Мифы и реальность яндекс такси
Поиск Написать публикацию. Яндекс Как мы делаем Яндекс. Время на прочтение 9 мин. Меня зовут Илья, я отвечаю за инфраструктуру пользовательских яндекс найди мне яндекс такси в Яндекс Go.
Описание приложения
Мы строим цикл заказа такси — процессы, происходящие под капотом после того, как пользователь нажимает «Заказать». Поиск машины, назначение водителя, изменение адреса, оплата поездки — всё это части цикла. Ещё мы делаем инфраструктуру создания яндекс найди мне яндекс такси, которая используется в Еде, Лавке, Доставке и других направлениях внутри Яндекса.Но обо всём по порядку. Давайте расскажу историю того, как мы развивали механизм обработки заказа, адаптировали его под нужды пользователей и старались исключить ошибки, а яндекс найди мне яндекс такси, почему мы используем такую архитектуру.
- Обратиться в службу поддержки. Нет доступа к геопозиции. Стоимость поездки по городу и в аэропорт известна заранее, подача машины за минут. Заказывайте такси в приложении, на сайте или по
- Обратиться в службу поддержки. Нет доступа к геопозиции. Стоимость поездки по городу и в аэропорт известна заранее, подача машины за минут. Заказывайте такси в приложении, на сайте или по
- Наберите номервам ответит оператор. Диспетчер спросит у вас место, откуда вы хотите уехать, число пассажиров и пункт назначения. Как только машину найдут.
Если у вас на бэкенде тоже выполняются последовательности зависящих друг от друга действий, и не оставляет желание оптимизировать логику — то тем более добро пожаловать под кат.
Как всё начиналось В году мы запустили сервис заказа такси. Получается, в момент поиска бэкенд должен сделать несколько действий подряд, каждое из которых может сломаться с небольшой вероятностью. В этом случае нужно, чтобы кто-то повторил действия, продолжив с нужного места. Проще всего попросить это делать пользователя.
Электронные чеки при оплате картой в приложении
Но у такого решения есть проблемы: например, пользователь может не отправить запрос повторно, поскольку у него пропалразрядился телефон или потому что человек просто закрыл приложение.Тогда в случае ошибки яндекс найди мне яндекс такси выполнит только часть действий. Скажем, назначит на заказ водителя, но не сообщит об. Мы не хотим такого допускать — это может привести к тому, что пассажир и водитель не смогут встретиться и начать поездку. Для решения проблемы мы вынесли последовательность действий, которую нужно совершить для заказа, в отдельную асинхронную задачу на бэкенде — она перезапускается сама в случае ошибки.
Теперь клиент получает яндекс найди мне яндекс такси о том, что заказ принят к обработке, а яндекс найди мне яндекс такси действия по назначению водителя выполняются асинхронно.
такси. Быстрый заказ такси. Вы указываете, куда ехать, и сразу видите цену поездки и предполагаемое время в пути. Оплатить можно картой или наличными водителю. Как заказать такси на сайте. Для начала выберите время заказа, откуда и куда вы поедете, укажите дополнительные пожелания. Вы можете выбрать такси класса «эконом», . Заказать такси по телефону через Яндекс Go. Наберите номервам ответит оператор. Обычно на это нужно несколько секунд, но иногда время ожидания может быть больше.
Даже если пользователь закроет приложение, мы будем уверены, что заказ пройдёт все нужные стадии обработки. Саму последовательность действий, которую нужно выполнять асинхронно, мы назвали процедурой обработки заказа или процессингом. Как у нас появилась своя очередь задач Чтобы заводить асинхронные задачи, яндекс найди мне яндекс такси взяли самое простое решение — запускать на серверах крон-таски, выполняющиеся раз в минуту.Внутри крона мы сканировали базу данных на наличие новых заказов и запускали их в обработку. К сожалению, и тут не всё было гладко. Во-первых, заказы, добавленные сразу после запуска крона, могли пролежать без дела целую минуту, а мы не хотим заставлять пользователя ждать. Во-вторых, все решения, которые мы разрабатываем в Яндексе, должны уметь переживать отказы единичных серверов.
Решение на кронах плохо горизонтально масштабируется — нужно, чтобы один заказ не обрабатывался одновременно на нескольких серверах. Значит, нужно придумывать распределенные блокировки. Архитектура такого решения становится избыточной, её сложно понимать и поддерживать. Поэтому следующим нашим шагом стал переход цикла заказа на Сelery.
Это широко используемый проект, с помощью которого можно организовать фоновую обработку задач. Celery написана на Python, поддерживает несколько брокеров сообщений и баз данных для хранения результатов задач.
Калькулятор дохода
В нашей конфигурации мы использовали MongoDB в качестве брокера, потому что у Такси уже был богатый опыт работы с этой базой. Бэкенд ставил задачу в очередь, Celery-worker получал задачу и выполнял нужную последовательность действий — поиск водителя и отправку предложения о заказе ему на устройство.Если какая-то операция приводила к ошибке, задача перезапускалась. Некоторое время всё работало успешно, но однажды Celery перестала справляться с нагрузкой. Существенным яндекс найди мне яндекс такси было то, что мы не хотели поддерживать зоопарк баз данных и использовали только MongoDB, а Celery с ней работает не так хорошо, как хотелось. Мы прикинули за и против и решили разрабатывать собственную платформу для запуска асинхронных задач.
Начали с небольшого проекта на Python и MongoDB. Решение оказалось удачным и продолжило развиваться. Если разработчик хочет обрабатывать свои задачи, то ему нужно объявить под это функцию у себя в сервисе, и она будет вызываться в нужные моменты.
Яндекс Таксиодна из самостоятельных бизнес-единиц «Яндекса», предлагающая сервисы агрегатора такси, доставки еды и продуктов, а также мобильные.После этого надо зарегистрировать очередь в системе — и можно отправлять задачи в брокер. Тот проследит, чтобы задача была выполнена как минимум один раз, при этом не допустит ситуации, когда задача выполняется несколькими обработчиками одновременно.
Разработчик может контролировать, какие сервисы и с какой частотой могут добавлять задачу в очередь, не копятся ли в очереди необработанные задачи, и устанавливать максимальную пропускную способность «разгребания» задач. Внутри система состоит из stateless-брокера задач, хранилища данных и обвязки на стороне обработчика. Рядом с кодом обработчика стоит side-car-демон, то есть агент, который с одной стороны взаимодействует с брокером задач, а с другой — с библиотекой яндекс найди мне яндекс такси внутри обработчика.
Агент следит за состоянием обработчика, собирает метрики и группирует задачи, уменьшая нагрузку на брокер. Такая архитектура позволяет быстро добавлять поддержку новых языков: зависящая от языка часть системы совсем маленькая и пишется опытным разработчиком за пару дней.
Платформа сейчас обрабатывает десятки тысяч задач в секунду. Время от постановки задачи до начала выполнения в среднем составляет всего пару десятков миллисекунд. Почему нужна сериалиазция событий Иногда пользователи отменяют заказы. В году случалось, что на яндекс найди мне яндекс такси отменённые заказы всё же приезжали водители.
Проблема возникало достаточно редко, всего несколько раз в неделю, но пользовательский опыт от этого сильно страдал. Оказалось, что возникал race condition между отправкой предложения водителю и отменой заказа пользователем.
Для Android
Такую проблему можно решить разными способами. Мы решили создать лог событий, отражающих всё, что происходит с заказом, и актора, который будет применять события друг за другом. Тогда при конкурирующих поиске и отмене может возникнуть две последовательности событий.В первом сценарии нужно отправить водителю отмену, а во втором — вообще не отправлять ему предложение.
Яндекс Go. Такси, доставка посылок, самокаты и еда из ресторанов. 🚕 ТАКСИ. 📲Выбирайте и сравнивайте тарифы. «Эконом»такси на каждый день. «Комфорт» и «Комфорт+»чтобы расслабиться в Яндекс Goприложение для заказа такси, еды, продуктов, товаров, доставки посылок, аренды машин и просмотра расписания транспорта. Работает в Москве, Санкт-Петербурге, Казани и сотне других Find gas stations, car washes, and charging stations for your car directly in the app. • FOOD FROM RESTAURANTS. Order delivery from independent and popular chain restaurants. Stock up on snacks for a party, soup, khachapuri, wok, sushi, pizza, and vegan options
Получается, что действия, которые необходимо производить при обработке каждого события, зависят от текущего состояния заказа. Так у нас появился конечный автомат заказа и цикл его обработки. К этой архитектуре мы пришли примерно к году.- Яндекс Go Такси, самокаты, каршеринг, путешествия, доставка товаров, еды, продуктов, посылок и грузов. Воспользуйтесь удобным поиском или выбирайте подходящие категории, чтобы найти то, что вам нужно. .
- Яндекс Goмобильное приложение на базе taxipchelka.ru Оно помогает быстро передвигаться по городу с помощью заказа такси, каршеринга, кикшеринга или расписания.
- В приложении taxipchelka.ru теперь можно сделать предзаказ. Если для вас важно, чтобы машина приехала к определенному времени, вы можете заказать поездку заранее. Интервал предзаказаот минут до двух дней. То есть
- Стоимость поездки по городу и в аэропорт известна заранее, подача машины за минут. Заказывайте такси в приложении, на сайте или по телефону.
Появлялась поддержка новых способов оплаты, добавлялись тарифы и сценарии использования, например доставка. Запустился Яндекс Плюс — то есть добавилась механика начисления кешбэка и яндекс найди мне яндекс такси баллов.
К году перед нами встала задача управления сложностью нашей конструкции. Мы постарались максимально структурировать схему.
Такси - популярный сервис заказа такси яндекс найди мне яндекс такси России. Но не все знают, что в приложении можно заказать такси на конкретное время. Это удобно, когда важно успеть куда-то вовремя. В этой статье я подробно расскажу, как заказать такси ко времени в Яндекс. Такси через приложение или сайт. Предзаказ такси в Яндекс.
Сделали собственный DSL — специализированный под задачу язык описания действий, которые нужно выполнять при обработке заказа. Взяли фреймворк userver и написали рантайм, который выполнял код на нашем Яндекс найди мне яндекс такси.Действия могут быть такими: сходить яндекс найди мне яндекс такси сервис по HTTP или отправить сообщение в очередь. Последнее, если нужно выполнить действие безусловно, работает отлично. Например, можно отправить сообщение «начать поиск машины».
Яндекс Go. Такси, доставка посылок, самокаты и еда из ресторанов. 🚕 ТАКСИ. 📲Выбирайте и сравнивайте тарифы. «Эконом»такси на каждый день. «Комфорт» и «Комфорт+»чтобы расслабиться вКогда надо получить результат от сервиса, удобнее написать HTTP-запрос. В том числе, назначая яндекс найди мне яндекс такси на заказ, мы отправляем запрос в сервис driver-app-api. Тот отвечает, удалось ли зарезервировать машину или по какой-то причине не удалось.
От ответа зависят наши дальнейшие шаги — ждать, пока водитель доедет до пассажира, или начать новый поиск. Вот только формат заказов у этих сервисов сильно отличается от Такси, да и сами переходы конечного автомата не имеют с Такси ничего общего. Мы сделали ещё одну итерацию разработки, чтобы полностью отвязать яндекс найди мне яндекс такси процессинг от цикла заказа такси. Команда разработала хранилище событий, разделив его на горячую и холодную части. Так мы можем запоминать всё, что происходит с заказами это очень помогает поддержкеи при этом не проседать в производительности.
Добавили в наш DSL возможность декларативного описания переходов конечного автомата, чтобы разработчики Еды или Лавки могли описать свои циклы обработки. В результате получили инфраструктуру для создания циклов обработки чего угодно, processing as a service. Продуктовые требования к нашей инфраструктуре получаются очень противоречивыми. С одной стороны, нужно обрабатывать заказы как можно быстрее. Нельзя допускать, чтобы время поиска водителя увеличилось на десятки секунд из-за проблем с каким-нибудь компонентом: пользователям вряд ли такое понравится.
Посмотрим на пример выше. А обработка каждого события состоит из десятков действий, каждое из которых может потенциально сломаться — и затормозить весь конечный автомат. Мы придумали несколько стратегий, которые помогают сочетать быструю обработку событий с сохранением их последовательности. Чтобы переживать отказы единичных обработчиков, мы развиваем систему стратегий фолбэков. Нам нужно уметь обнаруживать отказы и справляться с.
Задача определения отказов на первый взгляд выглядит простой: если мы сходили в сервис по HTTP и получилизначит, сервис не работает. Вряд ли можно считать, что сервис при этом сломался: процесс завершится за несколько секунд и пользователи ничего не заметят. Поэтому не стоит отключать сервис сразу, когда на нём появляются ошибки. Для более надёжной детекции мы подсчитываем статистику в некотором окне.
Подробнее о том, как всё устроено, можно почитать в этом конспекте. Иногда сервис не работает только для пользователей, заказавших такси на полнолуние в Нижних Васюках. Такой пользователь может быть всего один, для него сервис определённо сломан, а на статистике в разрезе сервиса этого не. Но нам важна история каждого пользователя, поэтому мы ведём статистику не только в разрезе сервиса, но и в разрезе определённого заказа: даже одна зависшая поездка будет замечена, а баг, который вызвал зависание, пофиксят.
Снимки экрана
Поиск Написать публикацию. Яндекс Как мы делаем Яндекс. Время на прочтение 9 мин. Меня зовут Илья, я отвечаю за яндекс найди мне яндекс такси пользовательских продуктов в Яндекс Go. Мы строим цикл заказа такси — процессы, происходящие под капотом после того, как пользователь нажимает «Заказать». Поиск машины, назначение водителя, изменение адреса, оплата поездки — всё это части цикла.
Ещё мы делаем инфраструктуру создания циклов, которая используется в Еде, Лавке, Доставке и других направлениях внутри Яндекса.