Внедрение механизма запросов в реальном времени и применение Facebook Presto
1. Что такое Престо
Что такое Facebook presto? После того, как Facebook создал артефакт HIVE, другой распределенный механизм запросов в реальном времени с языком SQL в качестве интерфейса может быстро и интерактивно запрашивать данные уровня петабайта. Он поддерживает стандарт ANSI SQL, включая запросы, агрегирование, JOIN и оконные функции. В дополнение к созданию Facebook, он также широко используется в Китае, например, JD.com и Meituan. Для студентов со слабым английским языком вы можете посетить этот китайский сайт перевода, созданный Jingdong:http://prestodb-china.com/Только эта версия 0.100, а последняя версия сейчас 0.156.
Presto — это механизм распределенных SQL-запросов с открытым исходным кодом, подходящий для интерактивного анализа и запросов. Объем данных поддерживает байты от GB до PB.
Presto разработан и написан для решения проблемы интерактивного анализа и скорости обработки коммерческого хранилища данных размером с Facebook.
С чего начинается учет в СБИС Presto
Что это может сделать?
Presto поддерживает онлайн-запрос данных, включая Hive, Cassandra, реляционную базу данных и запатентованное хранилище данных. Запрос Presto может объединять данные из нескольких источников данных и анализировать по всей организации.
Presto ориентируется на потребности аналитиков, и они ожидают, что время отклика составляет от 1 секунды до нескольких минут. Presto решает дилемму анализа данных, используя быстрые и дорогие бизнес-решения или медленные «бесплатные» решения, которые потребляют много оборудования.
Кто это использует?
Facebook использует Presto для интерактивных запросов к нескольким внутренним хранилищам данных, включая хранилище данных объемом 300 ПБ. Каждый день более 1000 сотрудников Facebook используют Presto, выполняют запросы более 30 000 раз, а общее количество данных сканирования превышает 1 ПБ.
Ведущие интернет-компании, включая Airbnb и Dropbox, используют Presto.
2. Престо структура
Presto также является распределенной системой, которую необходимо развернуть на каждом узле данных, она включает координатора и несколько сотрудников:
- Координатор: интерфейс доступа, синтаксический анализ операторов SQL, генерация планов запросов, распределение задач и т. Д.
- Работник: отвечает за чтение и запись данных и выполнение планов запросов
Стоит отметить, что Presto абстрагирует уровень хранения данных в виде плагина. Он называется соединителем, таким как Cassandra Connector, Hive Connector, MySQL Connector и т. Д. Можно заметить, что по умолчанию он предоставляет не только соединители для связанных с Hadoop компонентов, Предоставляет соединители для СУБД, таких как Mysql, Postgresql и т. Д. В то же время его можно легко разработать с помощью пользовательских соединителей для достижения цели расширения, применимой к различным уровням хранения данных.
Presto — автоматизация ресторанов, кафе, столовых
Presto предоставляет следующие типы интерфейсов:
- Командная строка Presto
- Драйвер JDBC
3. Предварительная установка
Presto поддерживает только развертывание систем Linux. Его рабочие узлы также можно использовать в качестве узлов-координаторов, но Presto рекомендует развертывать узлы-координаторы независимо и развертывать их на независимых серверах, чтобы избежать снижения производительности.
Тестовая среда для этой статьи — это установка и тестирование кластерной среды Hadoop на основе CDH 5.5. Версия Presto: 0.152.3 Версия Presto для установки JDK должна требовать: 1.8 Метод обеспечения безопасности — независимый узел координатора + метод рабочего узла
1. Распакуйте Presto в каждый рабочий узел и узел координатора.
tar -xzvf presto-server-0.152.3.tar.gz
2. Настройте node.properties
node.properties содержит информацию о конфигурации узла Presto и расположение каталога etc / node.properties после распаковки. Такие как:
node.environment = myprestoproduction # Все имена кластеров одинаковы, тестирование не может быть смешанным регистром node.id = ffffffff-ffff-ffff-ffff-fffffffffff1 # Идентификатор каждого узла Presto должен быть различным. node.data-dir = / usr / local / presto-server-0.152.3 / data #presto каталог хранения данных, расположенный в каталоге понимающего программного обеспечения
3. Настройте jvm.config
jvm.config Этот файл конфигурации передает имя, каждый должен знать, что настроено. Содержание следующее:
-server -Xmx8G -XX:+UseG1GC -XX:G1HeapRegionSize=32M -XX:+UseGCOverheadLimit -XX:+ExplicitGCInvokesConcurrent -XX:+HeapDumpOnOutOfMemoryError -XX:OnOutOfMemoryError=kill -9 %p
4. Предварительная настройка: config.properties
Файл конфигурации config.properties используется для настройки рабочих параметров Presto, здесь координатор и узел Workder необходимо настраивать отдельно.
Конфигурация узла координатора:
координатор = true # Укажите здесь, чтобы работать в качестве узла координатора node-scheduler.include-coordinator=false http-server.http.port=8089 query.max-memory = 50GB # Общая память доступна для одного запроса query.max-memory-per-node = 1GB # Один запрос на максимальную доступную память одного узла discovery-server.enabled = true # Служба обнаружения используется для службы состояний узлов кластера Presto discovery.uri=http://master:8089
Конфигурация рабочего узла:
coordinator=false http-server.http.port=8089 query.max-memory=50GB query.max-memory-per-node=1GB discovery.uri=http://master:8089
- 1
- 2
- 3
- 4
- 5
- В этот момент вы можете запустить Presto как обычно. Но вы можете только взглянуть на Presto без какого-либо Connector, поэтому давайте сначала сконфигурируем Hive Connector.
5. Предварительно настроенный Hive Connector
Создайте новый файл: etc / catalog / hive.properties, содержимое которого:
connector.name = hive-cdh5 # В зависимости от версии Hadoop значения могут быть следующими: hive-hadoop1, hive-hadoop2, hive-cdh4, hive-cdh5 hive.metastore.uri = thrift: // master: 9083 # URL-адрес службы мета-магазина hive hive.config.resources=/etc/hadoop/conf/core-site.xml,/etc/hadoop/conf/hdfs-site.xml
6. Запустите Presto
После такой большой настройки мы наконец-то можем перейти к этапу запуска Presto. Этот шаг прост. Просто выполните команду запуска на каждом узле:
bin/launcher start
- 1
- Стоит отметить, что версия JDK, установленная CDH, равна 1.7, а версия, требуемая Presto, — 1.8, поэтому необходимо изменить файл модуля запуска и добавить параметр переменной среды JAVA, чтобы переопределить параметр по умолчанию 1.7.
7. Подключитесь к Presto
Подключитесь к Presto с помощью командной строки:
Но как вам может быть так легко подключиться, вам нужно скачать файл: presto-cli-0.156-executetable.jar, затем переименовать его в presto и увеличить разрешения для исполняемого файла ( chmod + x), а затем выполните команду подключения:
./presto —server master:8089 presto:default> SELECT * FROM system.runtime.nodes; node_id | http_uri | node_version | coordinator | state —————————————+—————————+—————+————-+——— ffffffff-ffff-ffff-ffff-fffffffffff2 | http://192.168.5.202:8089 | 0.152.3 | false | active ffffffff-ffff-ffff-ffff-fffffffffff1 | http://192.168.5.200:8089 | 0.152.3 | true | active ffffffff-ffff-ffff-ffff-fffffffffff3 | http://192.168.5.203:8089 | 0.152.3 | false | active ffffffff-ffff-ffff-ffff-fffffffffff4 | http://192.168.5.204:8089 | 0.152.3 | false | active (4 rows) Query 20161108_101627_00016_3i6da, FINISHED, 2 nodes Splits: 2 total, 2 done (100.00%) 0:00 [4 rows, 300B] [9 rows/s, 727B/s]
Системный разъем — это разъем, который поставляется с Presto и не требует настройки. Содержит информацию об узле Presto, информацию о конфигурации и информацию о метриках.
5. Используйте Presto для запроса данных таблицы HIVE
1. Подключитесь к Presto с помощью командной строки и укажите использование коннектора HIVE:
./presto-cli-0.107-jd-executable.jar —server master:8089 —catalog hive —schema default # Укажите базу данных по умолчанию, подключенную к HIVE по умолчанию
2. Запросите данные таблицы HIVE, затем вы можете запросить данные HIVE, используя стандартный SQL, такой как
presto:default> desc sample_08; Column | Type | Comment ————-+———+——— code | varchar | description | varchar | total_emp | integer | salary | integer | (4 rows) Query 20161108_145619_00028_3i6da, FINISHED, 2 nodes Splits: 2 total, 2 done (100.00%) 0:00 [4 rows, 258B] [11 rows/s, 726B/s] presto:default> select * from sample_08 limit 3; code | description | total_emp | salary ———+————————+————+——— 00-0000 | All Occupations | 135185230 | 42270 11-0000 | Management occupations | 6152650 | 100310 11-1011 | Chief executives | 301930 | 160440 (3 rows) Query 20161108_145632_00029_3i6da, FINISHED, 2 nodes Splits: 2 total, 2 done (100.00%) 0:02 [823 rows, 45KB] [439 rows/s, 24KB/s]
1. При использовании Presto для запроса типа данных Decimal в формате Parquet возникает исключение, и вам необходимо преобразовать его вручную:
presto:default> desc test_decimal; Column | Type | Comment ———-+—————+——— dec_col | decimal(2,0) | (1 rows) Query 20161108_151431_00066_3i6da, FINISHED, 2 nodes Splits: 2 total, 2 done (100.00%) 0:00 [5 rows, 358B] [14 rows/s, 1.02KB/s] presto:default> select dec_col from test_decimal limit 1; Запрос пропал (сервер перезапущен?) # Здесь есть исключение presto:default> select cast(dec_col as integer) from test_decimal limit 1; _col0 ——- 1 (1 row) Query 20161108_151456_00068_3i6da, FINISHED, 1 node Splits: 2 total, 2 done (100.00%) 0:00 [7.28K rows, 118KB] [19.5K rows/s, 314KB/s]
2. Другое дело, что информация об исключениях Presto слишком лаконична, многиеQuery is goneОчень трудно устранить неисправности, такие как:
presto:default> explain select * from sample_08; Query is gone (server restarted?)
3. Проблемы совместимости, такие как:
presto:default> select * from sample_tabpart limit 10; Query 20161109_031436_00013_3i6da failed: Unsupported Hive type char(4) found in partition keys of table default.sample_tabpart # Не поддерживает раздел KEY типа CHAR
Хотя Facebook presto не разрабатывался в течение долгого времени, а его версия невысока, текущая версия богата функциями и достигла требований к эффективности запросов, близких к реальному времени, и очень гибка. Presto будет важным выбором для инструментов запросов в реальном времени.
Источник: russianblogs.com
Знакомство с Presto — высокоскоростной веб-фреймворк на Ruby
2012-03-13 в 10:17, admin , рубрики: framework, ruby, метки: framework, ruby
Краткий экскурс
Меня часто спрашивают — чего ради ещё один фреймворк если есть Rails.
Я часто отвечаю — затем что поезд не решает те задачи которые решает автомобиль.
Ещё чаще меня спрашивают — чего ради Presto если есть Sinatra.
Также часто я отвечаю — потому что автомобили отличаются в плане скорости, комплектации и удобства.
Как работается?
В плане использования, Presto предлагает в полне стандартную логику создания приложений и такой же стандартный набор инструментов — контролеры, роутинг, редиректы, рендеринг etc.
В основном работается очень легко. Всё организовано натурально и просто. Легко подаётся пониманию.
В чём разница?
Из особенностей, в первую очередь стоит отметить высокую скорость обработки запросов.
Эталонная скорость Presto — от 4000 до 5000 запросов в секунду, в зависимости от железа.
Что такое эталонная скорость и в чём она измеряется?
Очень просто — это скорость «Hello World» приложения.
С точки зрения фреймворка, все приложения одинаковы, с единственной разницей — сколько времени приложение тратит на обработку запроса.
И поскольку «Hello World» приложение тратит менее одного процента, эту скорость можно считать эталонной.
А скорость любого приложения это эталонная скорость разделить на время которое приложение тратит на обработку запроса.
Теперь, предположим что ваш сайт обращается к БД и рендерит HTML, тратя при этом 50% времени.
Если вы используете Presto, 50% от 4000-5000 это 2000-2500, так что примерная скорость вашего сайта будет составлять около 2000 запросов в секунду.
Представьте какая скорость у вашего сайта если вы используете фреймворк с эталонной скоростью 100 запросов в секунду.
Другой важной особенностью являются Slices.
Любой модуль содержавший контролеры можно вмонтировать в любое приложение и будет работать везде одинаково.
Можно один раз написать скажем блог или форум и использовать его на любом Presto сайте.
Дальше — лучше …
Оформив слайс как гем мы получаем распределённый модуль с возможностью синхронизации.
Многоуровневое конфигурирование
Из практичных приятностей выделяется возможность многоуровневого конфигурирования.
Любой контролер можно конфигурировать на уровне контролера или же на уровне слайса в котором он состоит.
Так например если ваш форум мигрирует с /forums/ на /forum/, всё что вам нужно сделать это перемонтировать форум слайс под /forum/.
Или же если нужно добавить миддлеваре, или поменять путь к темплэйтам, или даже template engine — всё это делается как на уровне контролера так и на уровне слайса.
Притом что конфиг контролера является персональным и имеет приоритет перед общим слайсовым конфигом.
Ещё стоит отметить что Presto организован в виде множества Api.
В том смысле что инструменты не просто разбросаны внутри контролеров(или даже внутри Object класса!), а организованы по собственным Api.
Всё что связанно с HTTP находиться под http методом — http.params , http.session , http.cookies etc.
Всё что связанно с рендером находиться под view методом — view.render , view.render_partial , view.render_layout etc.
Таким образом, Presto добавляет всего-лищь 3 метода в ваши контролеры — http , view и node .
Другой практичной особенностью является Sandbox.
Sandbox позволяет запретить доступ к session и cookies, а также запретить redirect, forward и halt.
Можно также дать доступ к session и cookies в режиме только чтение.
Таким образом, верстальщик, которому вы не совсем доверяете, не сможет исполнять код который будет читать/отправлять куки/сессии пользователей,
или переправлять на другие адреса.
К no-logic templates это конечно не относиться.
Inline Testing
Ну и в конце стоит отметить такую диковинку как Inline Testing.
Суть в том что можно писать тесты «не отходя от кассы»…
Тест для любого акшиона можно писать прямо в контролере, рядом с самим акшионом.
Спорный вопрос, но таким образом сохраняется визуальный контакт между логикой приложения и тестовыми действиями.
То есть, когда вы пишете тесты, текущая логика физически находится перед вами, а не в вашем воображении.
Впрочем, это сугубо субъективный подход. Лично я, за последние полгода так привык к такому подходу что использую стандартный метод лишь в крайних случаях.
Приступаем к освоению — Install
Для начала надо установить Ruby версии 1.9.2 или выше.
Или же JRuby 1.9 mode.
Потом в терминале пишем:
$ gem install presto
Presto имеет лишь две зависимости — Rack и Tilt.
Так что процесс установки обычно занимает меньше минуты.
Controllers
Создать контролер в Presto также просто как создать и расширить класс в Ruby.
Надо просто создать класс, включить Presto::Api и адресовать через http.map
class MyController include Presto::Api http.map end
Routing
Routing в Presto начинается с http.map
http.map устанавливает корневой адрес для всех акшионов в данном контролере.
В примере выше, http.map вызван без параметров. Это означает что контролер будет обслуживать корневой адрес сайта — /
То есть http.map идентичен http.map «/»
Типичный пример — News обслуживает /news/
class News include Presto::Api http.map :news def index # some logic end def edit # some logic end end
Теперь News обслуживает 3 адреса:
- /news/
- /news/index
- /news/edit
Но http.map не является окончательным словом в роутинге.
Также как http.map устанавливает корневой адрес для акшионов в данном контролере,
аддрес на котором монтирован слайс устанавливает корневой адрес для контролеров в данном слайсе.
Скажем у нас такой слайс:
module Forum class Posts include Presto::Api http.map :posts # actions end class Users include Presto::Api http.map :users # actions end end
app = Presto::App.new
Монтируем форум в корневой адрес:
app.mount Forum
теперь Forum будет обслуживать все акшионы Posts и Users под /posts/ и /users/ соответственно.
Но мы также можем вмонтировать форумный слайс под любой другой адрес.
app.mount Forum, ‘/forum’
теперь Forum будет обслуживать все акшионы Posts и Users под /forum/posts/ и /forum/users/ соответственно.
Но и это ещё не всё.
Есть ещё возможность обслуживания множества корневых адресов одним и темже контролером.
Об этом в параграфе Canonical.
Canonical Routing
Допустим ваши новости мигрировали с /Novosti/ на /news/
Но вам нужно ещё какое-то время поддерживать новости на старом адресе.
Можно конечно сделать copy/paste, но в условиях нынешних тенденций это не то не целесообразно — это просто дико.
Presto предлагает решение по элегантнее — canonical routes.
Просто задаём http.map множество параметров, каждый из которых является каноническим адресом,
кроме первого разумеется, который является корневым адресом.
class News include Presto::Api http.map :news, :Novosti def index http.canonical?.to_s end end
Теперь News будет обслуживать /Novosti/ также как и /news/
Обратите внимание на def index , он содержит http.canonical? ,
который возвращает текущий канонический адрес если запрос сделан с канонического адреса или же nil если запрос сделан с корневого адреса.
В данном контексте, если ввести в браузер /news/, ответом будет пустая строка — http.canonical? возвращает nil потому что /news/ является корневым адресом.
Если же ввести /Novosti/, ответом будет /Novosti/
Сanonical работает как на уровне контролера так и на уровне слайса.
module Forum class Posts include Presto::Api http.map :posts # actions end class Users include Presto::Api http.map :users # actions end end app = Presto::App.new app.mount Forum, ‘/forum’, ‘/Forums’
Теперь Forum будет обслуживать следующие адреса:
- /forum/posts/
- /forum/users/
- /Forums/posts/
- /Forums/users/
Наверное вы задались вопросом — зачем же нельзя просто монтировать один и тот же слайс на множество адресов.
Можно, но не целесообразно.
— лишняя писанина.
— лишняя память для обслуживания ещё одного слайса.
— http.canonical? не будет работать так что вы не будете знать находитесь ли вы под рутом или под каноником.
Actions
Добавить акшион также легко как создать очередной метод в Ruby.
Пример: создаём 2 акшиона — index и edit
class MyController include Presto::Api http.map def index # some logic end def edit # some logic end end
Теперь MyController обслуживает 3 адреса:
Действительно легко, но ведь акшионы не всегда такие тривиальные.
Как например обслуживать такой адрес: /forum/posts/top-100 или /forum/users/online/active-only
Про это детально рассказывается в параграфе Mapping.
Mapping
Идея позаимствована из Ramaze. Я использовал Ramaze фреймворк на протяжении долгово времени и нахожу превосходной идею формирования URL из имён методов.
Например, def edit; end соответствует /edit в строке браузера.
А def users_online; end соответствует /users_online
Но def users__online; end соответствует /users/online
То есть __ преобразовывается в /
По умолчанию, у Presto 3 правила преобразования:
- «____» => «.»,
- «___» => «-«,
- «__» => «/»,
Пример: def users___online; end соответствует /users-online
Пример: def users____html; end соответствует /users.html
Вы конечно можете изменить данные правила или даже добавить новые.
Для этого используется http.path_rules на уровне контролера или слайса.
Пример: преобразовываем «_» в «/» на уровне контролера
class News include Presto::Api http.map :news http.path_rules «_» => «/» def read_active end end
Теперь read_active будет обслуживать /news/read/active адрес.
Пример: преобразовываем «_» в «-» на уровне слайса
module Ctrl; end class Ctrl::News include Presto::Api http.map :news def search_popular end end class Ctrl::Articles include Presto::Api http.map :articles def show_latest end end app = Presto::App.new app.mount Ctrl do http.path_rules «_» => «-» end
Теперь Ctrl::News#search_popular будет обслуживать /news/search/popular адрес.
Также как Ctrl::Articles#show_latest будет обслуживать /articles/show/latest адрес.
Хорошо, но это всё статические имена. Как же на счёт динамических параметров?
Например /news/delete/100
Об этом в следующем параграфе.
Parametrization
Параметризация в Presto натуральна и проста.
HTTP параметры становятся аргументами для текущего акшиона.
Допустим у нас такой контролер:
class News include Presto::Api http.map :news def edit id return «ID Passed: #» end end
Если в браузере набираем /news/edit/100, Presto сделает такой вызов — News#edit( 100 )
и в ответ получим «ID Passed: 100»
Если же набираем /news/edit/, вызов будет таким: News#edit , и так как #edit не может быть вызван без параметров,
в ответ получим ошибку «404, Page Not Found»
Для того чтобы акшион работал и без ID, надо дать параметру значение по умолчанию:
class News include Presto::Api http.map :news def edit return «ID Passed: #» end end
Если в браузере набираем /news/edit/, в ответ получим «ID Passed: 0»
Если же набираем /news/edit/100, в ответ получим «ID Passed: 100»
Можно также передать/принимать N-ое количество параметров:
class Users include Presto::Api http.map :users def details id, *columns return «ID: # | Columns: # » end end
Если в браузере набираем /users/details/100/name/email/status, в ответ получим «ID: 100 | Columns: name, email, status»
Если же набираем /users/details/100/, в ответ получим «ID: 100 | Columns: „
/users/details/ вернёт ошибку “404, Page Not Found»
То есть если Ruby метод будет работать с данными аргументами, будет работать и HTTP запрос.
При таком раскладе, можно задать любую комбинацию HTTP параметров, единственное правило — чтобы акшион с этой комбинацией работал.
Alias
Как мы уже говорили, контролеры и слайсы могут обслуживать множество адресов.
Но как же на счёт акшионов? Что если я хочу отображать идентичный контент при запросе разных акшионов.
Всё очень просто — используем http.alias
class Users include Presto::Api http.map :users def details end http.alias :details, :about, :features end
Теперь /users/details будет обслуживать 2 дополнительных адреса — /users/about и /users/features
Стандартное «Hello World» приложение
Создаём app.rb file
require ‘presto’ class HelloWorld include Presto::Api http.map def index «Hello World» end end app = Presto::App.new app.mount HelloWorld app.run server: :Thin, Port: 7890
Файл
Результат в браузере
Тест на производительность
На этом заканчиваем первую часть знакомства.
В следующих частях узнаем про rendering, content_type, hooks, cache, middleware, error handling, authentication, sandbox и многое другое.
Источник: www.pvsm.ru
PRESTO — это просто!
Туда и обратно. Скоро сказка сказывается, да не скоро дело делается. Особенно в области городского транспорта, неизменной темы для критики, бурных дискуссий, а также противостояния политических интересов и реальных потребностей жителей. Тем не менее, шаги прогресса ощущаются и в этой сфере…
После долгих задержек и неурядиц электронная система оплаты проезда становится повседневной реальностью. Kарточка PRESTO превращается из диковинки в такую же непременную вещь, как ключи или мобильный телефон.
А в светлом будущем в автобусах, трамваях и на станциях метро окончательно исчезнут кассы и терминалы для проездных билетов.
Что же касается настоящего, то преимущества PRESTO пока остаются не совсем понятными довольно немалому количеству пассажиров. Среди них — и наши читатели, которые обращаются в редакцию с разными вопросами по этому поводу. И хотя на сайте www.prestocard.ca дается подробная информация, с картинками и музыкой, попробуем все же поделиться ею на более понятном читателям языке.
Например, многие еще не уверены, что карточка PRESTO позволяет теперь совершать несколько пересадок в любом направлении, в течение 2-х часов после начала поездки.
Именно так, отвечает нам вебсайт, начиная с 26 августа этого года. При каждой следующей пересадке в автобус, метро или трамвай вы должны еще раз приложить карточку к зеленой штуковине у входа — это Card Reader, который фиксирует факт оплаты и время. И если вы укладываетесь в 2-часовой лимит, дополнительных денег с вас не возьмут.
PRESTO можно пополнять лично или онлайн, предусмотрена также функция Autoload, когда деньги регулярно переводятся с вашего счета. Кстати говоря, специальный линк на сайте поможет вам контролировать снятие денег с карточки.
«А если пользуешься услугами ТТС постоянно, — спрашивает читатель, — нужно ли по-прежнему покупать отдельную карточку Metropass, или PRESTO включает все? И как это работает?»
Еще один проездной не нужен, объясняют нам. Программа предусматривает те же возможности, и по той же цене, только заложенные в PRESTO — это Monthly Pass, ежемесячный, и 12 Month Pass, то есть позволяющий заранее, со скидкой, оплатить годовой проезд. Количество поездок — не ограничено. Приобрести такие карточки можно в отдельных (обратите внимание!) аптеках сети Shoppers Drug Mart, в автоматах, установленных на входе в некоторые (!) станции метро, а также онлайн, на www.prestocard.ca.
Конечно, наших пожилых читателей интересует, как купить карточку со скидкой, аналогично обыкновенному проездному, пока еще доступным талончикам или ушедшим в историю токенам.
К сожалению, автомат на станции не способен подтвердить ваш возраст. Поэтому карточку придется покупать в тех же Shoppers Drug Mart, с предъявлением водительских прав или другого официального документа, идентифицирующего вашу личность.
Есть и другой вариант — отправиться на станцию метро Davisville, где работает TTC Customer Service, и взять карточку там.
Те, кто пользуется услугами Wheel-Trans, должны при посадке приложить карточку к ручному сканеру, который подносит к вам водитель. А пересаживаясь на метро или автобус ТТС, отметиться еще раз, деньги за это не снимаются.
Скидка на проезд полагается также школьникам. А вот дети 6-12 лет пока что могут ездить бесплатно, но для того, чтобы войти на станцию метро, им все равно надо иметь при себе карточку PRESTO, приобретенную заранее.
Для студентов, начиная с ноября, станут доступными ежемесячные проездные. Сложнее обстоит дело с так называемым Downtown Express Bus, проезд в котором требует двойной оплаты. И потому, даже воспользовавшись PRESTO, вам придется доплатить наличными, талончиком или предъявив обычный Metropass. Пока что неразбериха возникает и при поездках за черту города, например, в York Region или Миссиссагу. Хотя на сайте объявлено, что система включает в себя возможность проезда в GTA — районе Большого Торонто, GTHA — районе Гамильтона, и Оттаве, с этим есть определенные сложности.
Так, если вы едете на автобусе ТТС на север от Steeles, использовать PRESTO не рекомендуется. Продолжайте доплачивать талончиками или GTA Weekly Pass. Можно загрузить в свой смартфон новую аппликацию YRT Pay. Оплата при посадке обеспечивает возможность обратной поездки, но только если вы уложились в те же самые 2 часа. Короче, до полностью светлого будущего с PRESTO нам еще жить и жить.
И напоследок — предупреждение: прочитав эту статью, не спешите зайти на вебсайт, упомянутый выше. PRESTO предупреждает, что по техническим причинам он не будет действовать с 10 утра пятницы до вечера воскресенья. А утром в понедельник, 15 октября — добро пожаловать!
Источник: www.russianexpress.net