Поиск Написать публикацию. Яндекс Как что такое цепочка заказов в яндекс такси делаем Яндекс. Время на прочтение 9 мин. Меня зовут Илья, я отвечаю за инфраструктуру пользовательских продуктов в Яндекс Go.
Как и когда лучше принимать заявки в Яндекс.Такси
Мы строим цикл заказа такси — процессы, происходящие под капотом после того, как пользователь нажимает «Заказать». Поиск машины, назначение водителя, изменение адреса, оплата поездки — всё это части цикла.Ещё мы делаем инфраструктуру создания циклов, которая используется в Еде, Лавке, Доставке и других направлениях внутри Яндекса. Но обо всём по порядку.
- Для работы в Яндекс такси по системе «цепочка заказов» достаточно, чтобы в статусе водителя высвечивалось «На линии».
- Цепочка автоматически включается, когда вы выходите на линию. Если вы приняли заказцепочка работает. Система сама рассчитает, когда и где вы завершите поездку, и незадолго до этого
- ️Подключайся: + Telegram канал: @park_atomВ этом видео вы узнаете:Как работает "Цепочка заказов" в Яндекс
- Как работает цепочка заказов в Яндекс Такси?
- Цепочка заказовфункция назначения заказов. Она выбирает водителей среди тех, кто в статусе «Свободен», и тех, кто заканчивает поездку в ближайшем месте от .
Давайте расскажу историю того, как мы развивали механизм обработки заказа, адаптировали его под нужды пользователей и старались исключить ошибки, а главное, почему мы используем такую архитектуру. Если у вас на бэкенде тоже выполняются последовательности зависящих друг от друга действий, и не оставляет желание оптимизировать логику — то тем более добро пожаловать под кат.
Как всё начиналось В году мы запустили сервис заказа такси. Получается, в момент поиска бэкенд должен сделать несколько действий подряд, каждое из которых может сломаться с что такое цепочка заказов в яндекс такси вероятностью. В этом случае нужно, чтобы кто-то повторил действия, продолжив с нужного места. Проще всего попросить это делать пользователя. Но у такого решения есть проблемы: например, пользователь может не отправить запрос повторно, поскольку у него пропалразрядился телефон или потому что человек просто закрыл приложение.
Тогда в случае ошибки бэкенд выполнит только что такое цепочка заказов в яндекс такси действий.
Почему не приходят заказы на Яндекс Такси?
Скажем, назначит на заказ водителя, но не сообщит об. Мы не хотим такого допускать — это может привести к тому, что пассажир и водитель не смогут встретиться и начать поездку. Для решения проблемы мы вынесли последовательность действий, которую нужно совершить для заказа, в отдельную асинхронную задачу на бэкенде — она перезапускается сама в случае ошибки.Цепочка автоматически включается, когда вы выходите на линию. Если вы приняли заказцепочка работает. Система сама рассчитает, когда и где вы завершите поездку, и незадолго до этого ️Подключайся: + Telegram канал: @park_atomВ этом видео вы узнаете:Как работает "Цепочка заказов" в Яндекс Привет, в этом ролике я расскажу как работает цепочка заказов в Яндекс. Такси и, естественно, немного
Теперь клиент получает ответ о том, что заказ принят к обработке, а сами действия по назначению водителя выполняются асинхронно.Даже если пользователь закроет приложение, мы будем уверены, что заказ пройдёт все нужные стадии обработки. Саму последовательность действий, которую нужно выполнять асинхронно, мы назвали процедурой обработки заказа или процессингом. Как у нас появилась своя очередь задач Чтобы заводить асинхронные задачи, поначалу взяли самое простое решение — запускать на серверах крон-таски, выполняющиеся раз в минуту.
Внутри крона мы сканировали базу данных на наличие новых заказов и запускали их в обработку. К сожалению, что такое цепочка заказов в яндекс такси тут не всё было гладко. Во-первых, заказы, добавленные сразу после запуска крона, могли пролежать без дела целую минуту, а мы не хотим заставлять пользователя ждать. Во-вторых, все решения, которые мы разрабатываем в Яндексе, должны уметь переживать отказы единичных серверов.
Даже более того: все наши сервисы сейчас представлены в двух-трёх зонах доступности и умеют переживать отключение как минимум одной из. Решение на кронах плохо горизонтально масштабируется — нужно, чтобы один заказ не обрабатывался одновременно на нескольких серверах. Значит, нужно придумывать распределенные блокировки.
Celery написана на Что такое цепочка заказов в яндекс такси, поддерживает несколько брокеров сообщений и баз данных для хранения результатов задач.
Report Page
В нашей конфигурации мы использовали MongoDB в качестве брокера, потому что у Такси уже был богатый опыт работы с этой базой. Бэкенд ставил задачу в очередь, Celery-worker получал задачу и выполнял нужную последовательность действий — поиск водителя и отправку предложения о заказе ему на устройство.Если какая-то операция приводила к ошибке, задача перезапускалась. Некоторое время всё работало успешно, но однажды Celery перестала справляться с нагрузкой. Существенным фактором было то, что мы не хотели поддерживать зоопарк баз данных и использовали только MongoDB, а Celery с ней работает не так хорошо, как хотелось. Мы прикинули за и против и решили разрабатывать собственную платформу для запуска асинхронных задач.
Начали с небольшого проекта на Python и MongoDB. Решение оказалось удачным и продолжило развиваться.
️Подключайся: + Telegram канал: @park_atomВ этом видео вы узнаете:Как работает "Цепочка заказов" в Яндекс.Если разработчик хочет обрабатывать свои задачи, то ему нужно объявить под это функцию у себя в сервисе, и она будет вызываться в нужные моменты. После этого надо зарегистрировать очередь в системе — и можно отправлять задачи в брокер. Тот проследит, чтобы задача была выполнена как минимум один раз, при этом не допустит ситуации, когда задача выполняется несколькими обработчиками одновременно.
Разработчик может контролировать, какие сервисы и с какой частотой могут добавлять задачу в очередь, не копятся ли в очереди необработанные задачи, и устанавливать максимальную что такое цепочка заказов в яндекс такси способность «разгребания» задач. Внутри система состоит из stateless-брокера задач, хранилища данных и обвязки на стороне обработчика.
Агент следит за состоянием обработчика, собирает метрики и группирует задачи, уменьшая нагрузку на брокер. Такая архитектура позволяет быстро добавлять поддержку новых языков: зависящая от языка часть системы совсем маленькая и пишется опытным разработчиком за пару дней. Например, недавно мы добавили поддержку Go. Платформа сейчас обрабатывает десятки тысяч задач в секунду.
Время от постановки задачи до начала выполнения в среднем составляет всего пару десятков миллисекунд. Почему нужна сериалиазция событий Иногда пользователи отменяют заказы. В году случалось, что на такие отменённые заказы всё же что такое цепочка заказов в яндекс такси водители.
Заказы по пути домой
Проблема возникало достаточно редко, всего несколько раз в неделю, но пользовательский опыт от этого сильно страдал. Оказалось, что возникал race condition между отправкой предложения водителю и отменой заказа пользователем.Такую проблему можно решить разными способами. Мы решили создать лог событий, отражающих всё, что происходит с заказом, и актора, который будет применять события друг за другом. Тогда при конкурирующих поиске и отмене может возникнуть две последовательности событий.
Рассказываем о работе, полезных фишках, Таксометре и обо всём, что происходит в taxi-co.ruчение к Вы почти завершили текущий заказ, а taxi-co.ru тут же предлагает вам новыйэто значит, что у вас работают заказы по цепочке Что такое цепочка заказов. Как только водитель завершает один заказ, приложение Таксометр может ему предложить новый – такая ситуация и называется цепочкой
В первом сценарии нужно отправить водителю отмену, а во втором — вообще не отправлять ему предложение. Получается, что действия, которые необходимо производить при обработке каждого события, зависят от текущего состояния заказа.Так у нас появился конечный автомат заказа и цикл его обработки.
- Вы почти завершили текущий заказ, а Яндекс Про тут же предлагает вам новыйэто значит, что у вас работают заказы по цепочке.
- В этом долгом и нудном видео я рассказываю как и почемуя недели тестировал теорию о том, как работать в Яндекс такси с выключенной цепочкой taxi-co.ru
- «Цепочка» включается автоматическипросто следите за сообщениями в Таксометре. Мы рассчитаем, в какое время в какой точке города вы освободитесь, и система taxi-co.ru предложит следующий заказ за несколько минут до окончания текущего.
К этой архитектуре мы пришли примерно к году. Появлялась поддержка новых способов оплаты, добавлялись тарифы и сценарии использования, например доставка. Запустился Яндекс Плюс — то есть добавилась механика начисления кешбэка и списания баллов. К году перед нами встала задача управления сложностью нашей конструкции.
Мы постарались максимально структурировать схему.
Моя лента Все потоки Разработка Администрирование Дизайн Менеджмент Маркетинг Научпоп. Поиск Написать публикацию. Яндекс Как мы делаем Яндекс. Время на прочтение 5 мин. Одна из главных задач в Яндекс. Такси — как сделать так, чтобы к пользователю быстро приезжала машина, а у водителя сокращалось время «холостого пробега» то есть время, когда он на линии без пассажира. Казалось бы, всё просто: пользователь выбирает тариф, указывает дополнительные пожелания детское кресло, например.
Остаётся отфильтровать водителей на линии по этим критериям, выбрать ближайшего и предложить ему заказ.
Сделали собственный DSL — специализированный под задачу язык описания действий, которые нужно выполнять при обработке что такое цепочка заказов в яндекс такси. Взяли фреймворк userver и написали рантайм, который выполнял код на нашем DSL. Действия могут быть такими: сходить в сервис по HTTP или отправить сообщение в очередь.Последнее, если нужно выполнить действие безусловно, работает отлично. Например, можно отправить сообщение «начать поиск машины». Когда надо получить результат от сервиса, удобнее написать HTTP-запрос. В том числе, назначая водителя на заказ, мы отправляем запрос в сервис driver-app-api.
Что такое цепочка заказов и как она работает. Во время работы водитель Я taxi-co.ru может получать новый заказ до завершения предыдущегоТот отвечает, что такое цепочка заказов в яндекс такси ли зарезервировать машину или по какой-то причине не удалось.
Что такое цепочка заказов в яндекс такси ответа зависят наши дальнейшие шаги — ждать, пока водитель доедет до пассажира, или начать новый поиск. Что такое цепочка заказов в яндекс такси только формат заказов у этих сервисов сильно отличается от Такси, да и сами переходы конечного автомата не имеют с Такси ничего общего. Мы сделали ещё одну итерацию разработки, чтобы полностью отвязать наш процессинг от цикла заказа такси. Команда разработала хранилище событий, разделив его на горячую и холодную части.
Так мы можем запоминать всё, что происходит с заказами это очень помогает поддержкеи при этом не проседать в производительности. Добавили в наш DSL возможность декларативного описания переходов конечного автомата, чтобы разработчики Еды или Лавки могли описать свои циклы обработки. В результате получили инфраструктуру для создания циклов обработки чего угодно, processing as a service.
Продуктовые требования к нашей инфраструктуре получаются очень противоречивыми. С одной стороны, нужно обрабатывать заказы как можно быстрее. Нельзя допускать, чтобы время поиска водителя увеличилось на десятки секунд из-за проблем с каким-нибудь компонентом: пользователям вряд ли такое понравится. Посмотрим на пример выше. А обработка каждого события состоит из десятков действий, каждое из которых может потенциально сломаться — и затормозить весь конечный автомат.
Мы придумали несколько стратегий, которые помогают сочетать быструю обработку событий с сохранением их последовательности. Чтобы переживать отказы единичных обработчиков, мы развиваем систему стратегий фолбэков. Нам нужно уметь обнаруживать отказы и справляться с. Задача определения отказов на первый взгляд выглядит простой: если мы сходили в сервис по HTTP и получилизначит, сервис не работает.
Вряд ли можно считать, что сервис при этом сломался: процесс завершится за несколько секунд и пользователи ничего не заметят. Поэтому не стоит отключать сервис сразу, когда на нём появляются ошибки. Для более надёжной детекции мы подсчитываем статистику в некотором окне. Подробнее о том, как всё устроено, можно почитать в этом конспекте. Иногда сервис не работает только для пользователей, заказавших такси на полнолуние в Нижних Васюках. Такой пользователь может быть всего один, для него сервис определённо сломан, а на статистике в разрезе сервиса этого не.
Но нам важна история каждого пользователя, поэтому мы ведём статистику не только в разрезе сервиса, но и в разрезе определённого заказа: даже одна зависшая поездка будет замечена, а баг, который вызвал зависание, пофиксят.
Как у нас появилась своя очередь задач
Одна из вреднейших функций у агрегатора Яндекс. Такси - это возможность принимать новые заказы не завершив текущий. Водитель выполняет заказ, передвигаясь при помощи что такое цепочка заказов в яндекс такси, особенно в конце поездки, когда необходимо найти нужный адрес в незнакомом дворе или на оживлённом перекрёстке, как вдруг, что такое цепочка заказов в яндекс такси раздается "взрывной" сигнал нового заказа, а информация о нём полностью перекрывает весь экран смартфона с навигационной картой.
Водителю необходимо незамедлительно убрать это окно, чтобы продолжить правильный маршрут, но убрать его можно нажав на выбор лишь две клавиши: большую, яркую и красивую клавишу "ПРИНЯТЬ" или маленькую, черную и невзрачную "ПРОПУСТИТЬ". Интуитивно водитель выберет клавишу принять, невзирая на то, что она даже зелёного цвета, хотя карта отливает перламутром повышенного спроса. Яндекс знает это, и весь интерфейс окна поступления нового заказа строился на психологии, что видно невооружённым глазом.