Поиск Написать публикацию. Яндекс Как мы делаем Яндекс. Время на прочтение 9 мин. Меня зовут Илья, я отвечаю за инфраструктуру пользовательских продуктов в Яндекс Go.
Публикации
Мы строим цикл заказа такси — процессы, происходящие под капотом после того, как пользователь нажимает «Заказать». Поиск машины, назначение водителя, изменение адреса, оплата поездки — всё это части цикла. Ещё мы делаем инфраструктуру создания циклов, которая используется в Автомат яндекс такси, Лавке, Доставке и других направлениях внутри Яндекса.Но обо автомат яндекс такси по порядку. Давайте расскажу историю того, как мы развивали механизм обработки заказа, адаптировали его под нужды пользователей и старались исключить ошибки, а главное, почему мы используем такую архитектуру.
- Oct , Чтобы определить, подходит ли машина для тарифа, мы учитываем: Окончательное решение по каждому автомобилю остается за сервисом Яндекс Такси.
- У сервиса Яндекс Такси есть общие требования к автомобилям, которые могут выполнять заказы в разных тарифах. Чтобы определить, подходит ли машина для .
- Получается, что действия, которые необходимо производить при обработке каждого события, зависят от текущего состояния заказа. Так у нас появился конечный .
Если у вас на бэкенде тоже выполняются последовательности зависящих друг от друга действий, и не оставляет желание оптимизировать логику — то тем более добро пожаловать под кат.
Как всё начиналось В году мы запустили сервис заказа такси. Получается, в момент поиска бэкенд должен сделать несколько действий подряд, каждое из которых может сломаться с небольшой вероятностью. В этом случае нужно, чтобы кто-то повторил действия, продолжив с нужного места.
Подходящие авто для тарифов Яндекс.Такси по перевозке пассажиров.
Проще всего попросить это делать пользователя. Но у такого решения есть проблемы: например, пользователь может не отправить запрос повторно, поскольку у него пропалразрядился телефон или потому что человек просто закрыл приложение.Автомат яндекс такси в случае ошибки бэкенд выполнит только часть действий. Скажем, назначит на заказ водителя, но не сообщит об. Мы не хотим такого допускать — это может привести к тому, что пассажир и водитель не смогут встретиться и начать поездку. Для решения проблемы мы вынесли последовательность действий, которую нужно совершить для заказа, в отдельную асинхронную задачу на бэкенде — она перезапускается сама в случае ошибки. Теперь клиент получает ответ о том, что заказ принят к обработке, а сами действия по назначению водителя выполняются асинхронно.
Даже если пользователь закроет приложение, мы будем уверены, что заказ пройдёт все нужные стадии обработки. Саму последовательность действий, которую нужно выполнять асинхронно, мы назвали процедурой обработки заказа или процессингом.
Заказывайте такси в приложении, на сайте или по телефону. Стоимость поездки по городу и в аэропорт известна заранее, подача машины за минут Классификатор: какой автомобиль подойдёт для выполнения заказов. У сервиса Яндекс Такси есть общие требования к автомобилям, которые могут выполнять заказы в разных тарифах Яндекс Goприложение для заказа такси, еды, продуктов, товаров, доставки посылок, аренды машин и просмотра расписания транспорта
Как у нас появилась своя очередь задач Чтобы заводить автомат яндекс такси задачи, поначалу взяли самое простое решение — запускать на серверах крон-таски, выполняющиеся раз в минуту.Внутри крона мы сканировали базу данных на наличие новых заказов и запускали их в обработку. К сожалению, и тут не всё было гладко. Во-первых, заказы, добавленные сразу после запуска крона, могли пролежать без дела целую минуту, а мы не хотим заставлять пользователя ждать. Во-вторых, все решения, которые мы автомат яндекс такси в Яндексе, должны уметь переживать отказы единичных серверов.
Даже более того: все наши сервисы сейчас представлены в двух-трёх зонах доступности и умеют переживать отключение как минимум одной из.
Архитектура такого решения становится избыточной, её сложно понимать и поддерживать. Поэтому следующим нашим шагом стал переход цикла заказа на Сelery. Это широко используемый проект, с помощью которого можно организовать фоновую обработку задач. Celery написана на Python, поддерживает несколько брокеров сообщений и баз данных для хранения результатов задач. В нашей конфигурации мы использовали MongoDB в качестве брокера, потому что у Такси уже был богатый опыт работы с этой базой.
Бэкенд ставил задачу в очередь, Celery-worker получал задачу и выполнял нужную последовательность действий — поиск водителя и отправку предложения о заказе ему на устройство. Если какая-то операция приводила к ошибке, задача перезапускалась.
Сервис премиум-класса
Некоторое время всё работало успешно, но однажды Celery перестала справляться с нагрузкой. Существенным фактором было то, что мы не хотели поддерживать зоопарк баз данных и использовали только MongoDB, а Celery с ней работает не так хорошо, как хотелось.Мы прикинули за и против и автомат яндекс такси разрабатывать собственную платформу для запуска асинхронных задач. Начали с небольшого автомат яндекс такси на Python и MongoDB.
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Решение оказалось удачным и продолжило развиваться. Если разработчик хочет обрабатывать свои задачи, то ему нужно объявить под это функцию у себя в сервисе, и она будет вызываться в нужные моменты. После этого надо зарегистрировать очередь в системе — и можно отправлять задачи в брокер.
Тот проследит, чтобы задача была выполнена как автомат яндекс такси один раз, при этом не допустит ситуации, когда задача выполняется несколькими обработчиками одновременно. Разработчик может контролировать, какие сервисы и с какой частотой могут добавлять задачу в очередь, не копятся ли в очереди необработанные задачи, и устанавливать максимальную пропускную способность «разгребания» задач.
Внутри система состоит из stateless-брокера задач, хранилища данных и обвязки на стороне обработчика. Рядом с кодом обработчика стоит side-car-демон, то есть агент, который с одной стороны взаимодействует с брокером задач, а с другой — с библиотекой интеграции внутри обработчика.
Например, недавно мы добавили поддержку Go. Платформа сейчас обрабатывает десятки тысяч задач в секунду. Время от постановки задачи до начала выполнения в среднем составляет всего пару десятков миллисекунд. Почему нужна сериалиазция событий Иногда пользователи отменяют заказы. В году случалось, что на такие отменённые заказы всё же приезжали водители.
Проблема возникало достаточно редко, всего несколько раз в неделю, но пользовательский опыт от этого сильно страдал.
Покупка или лизинг автомобиля: шаг за шагом
Оказалось, что возникал race condition между отправкой предложения водителю и отменой заказа пользователем. Такую проблему можно решить разными способами. Мы решили создать лог событий, отражающих всё, что происходит с заказом, и актора, который будет применять события друг за автомат яндекс такси. Тогда при конкурирующих поиске и отмене может возникнуть две последовательности событий.В автомат яндекс такси сценарии нужно отправить водителю отмену, а во втором — вообще не отправлять ему автомат яндекс такси.
Яндекс Go. Такси, доставка посылок, самокаты и еда из ресторанов. 🚕 ТАКСИ. 📲Выбирайте и сравнивайте тарифы. «Эконом»такси на каждый день. «Комфорт» и «Комфорт+»чтобы расслабиться в Rent up to three scooters from the same account, buy Minute Bundles to make rides more affordable, and use Yandex Plus to subscribe to Scooters for free unlocks. • 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 This service will help you quickly order an inexpensive official taxi using the site or mobile app. The taxi will arrive in minutes. Pay with cash or card
Получается, что действия, которые необходимо производить при обработке каждого события, зависят от текущего автомат яндекс такси заказа.- В дальнейшем заказать поездку в ИИ- такси можно будет в приложении «Яндекс Go». По идее, никак, это автомат, и он не может ошибаться, но у техники бывают сбои. .
- Yandex Taxi. Yandex Taxi (Russian: Яндекс Такси, romanized: Yandeks Taksi; stylised as taksitema.ru) is an international company operating taxi hailing and food delivery services across Russia, the CIS, Eastern Europe. It is owned by Russian tech company Yandex. [] The company is among the world's leading developers of self-driving
- Работа в Яндекс Такси на личном автомобиле. .
- Закажите в приложении taksitema.ru поездку заранее. Выберите в пожеланиях к заказу «Запланировать поездку» и установите нужные дату и время. Поиск машины начнётся незадолго до начала
- Введите адрес подачи машины. Если нужный адрес указан по умолчанию, нажмите Куда. Чтобы выбрать другой адрес, нажмите Изменить адрес или переместите точку на карте.
Так у нас появился конечный автомат заказа и цикл его обработки. К этой архитектуре мы пришли примерно к году. Автомат яндекс такси поддержка новых способов оплаты, добавлялись тарифы и сценарии использования, например доставка.
Запустился Яндекс Плюс — то есть добавилась механика начисления кешбэка и списания баллов. К году перед нами встала задача управления сложностью нашей конструкции. Мы постарались максимально структурировать схему.
Последнее обновление 23 окт У сервиса Яндекс Такси есть общие требования к автомобилям, которые могут выполнять заказы в разных тарифах. Среднерыночную стоимость: определяем по данным Авто. Проверьте, какой тариф подходит вашему автомобилю. Статья была для вас полезной. Классификатор: какой автомобиль автомат яндекс такси для выполнения заказов Последнее обновление 23 окт Как машины попадают в классификатор Чтобы определить, подходит ли машина для тарифа, мы учитываем: Модель: подходят только машины, у которых 4 двери или.
Возраст: считаем от года выпуска производства по ПТС.
Сделали собственный DSL — специализированный под задачу язык описания действий, которые нужно выполнять при обработке заказа. Взяли фреймворк userver и написали рантайм, который выполнял код на нашем DSL.Действия могут быть такими: сходить в сервис по HTTP или отправить сообщение в очередь. Последнее, если нужно выполнить действие безусловно, работает отлично. Например, автомат яндекс такси отправить сообщение «начать поиск машины». Когда надо получить результат от сервиса, удобнее написать HTTP-запрос. В том числе, назначая водителя на заказ, мы отправляем запрос в сервис driver-app-api.
Тот отвечает, удалось ли зарезервировать машину или по какой-то причине не удалось.
Aug , У сервиса taksitema.ru есть общие требования к автомобилям, которые могут выполнять заказы в разных тарифах.От ответа зависят наши дальнейшие шаги — ждать, пока водитель доедет до пассажира, или начать новый поиск. Вот только формат заказов у этих сервисов сильно отличается от Такси, да и сами переходы конечного автомата не имеют с Такси ничего общего. Мы сделали ещё одну итерацию разработки, чтобы полностью отвязать наш процессинг от цикла заказа такси. Команда разработала хранилище событий, разделив его автомат яндекс такси горячую и холодную части.
Так мы можем запоминать всё, что происходит с заказами это очень помогает поддержкеи при этом не проседать в производительности. Добавили в наш DSL возможность декларативного описания переходов конечного автомат яндекс такси, чтобы разработчики Еды или Лавки могли описать свои циклы обработки. В результате получили инфраструктуру для создания циклов обработки чего угодно, processing as a service. Продуктовые требования к нашей инфраструктуре получаются очень противоречивыми.
С одной стороны, нужно обрабатывать заказы как можно быстрее. Нельзя допускать, чтобы время поиска водителя увеличилось на десятки секунд из-за проблем с каким-нибудь компонентом: пользователям вряд ли такое понравится. Посмотрим на пример выше. А обработка каждого события состоит из десятков действий, каждое из которых может потенциально сломаться — и затормозить весь конечный автомат.
Мы придумали несколько стратегий, которые помогают сочетать быструю обработку событий с сохранением их последовательности. Чтобы переживать отказы единичных обработчиков, мы развиваем систему стратегий фолбэков. Нам нужно уметь обнаруживать отказы и справляться с. Задача определения отказов на первый взгляд выглядит простой: если мы сходили в сервис по HTTP и получилизначит, сервис не работает. Вряд ли можно считать, что сервис при этом сломался: процесс завершится за несколько секунд и пользователи ничего не заметят.
Поэтому не стоит отключать сервис сразу, когда на нём появляются ошибки. Для более надёжной детекции мы подсчитываем статистику в некотором окне. Подробнее автомат яндекс такси том, как всё устроено, можно почитать в этом конспекте. Иногда сервис не работает только для пользователей, заказавших такси на полнолуние в Нижних Васюках. Такой пользователь может быть всего один, для него сервис определённо сломан, а на статистике в разрезе сервиса этого не.
Но нам важна история каждого пользователя, поэтому мы ведём статистику не только в разрезе сервиса, но и в разрезе определённого заказа: даже одна зависшая поездка будет замечена, а баг, который вызвал зависание, пофиксят.
Как всё начиналось
Сервис Яндекс Такси — пожалуй, самое популярное такси среди пассажиров в России. И не последнюю роль в этом играет выбор удобного варианта заказа машины. Вызвать автомат яндекс такси можно одним из нескольких способов: при помощи приложения, телефона или компьютера. Агрегатор сам найдет ближайшую к вам машину и отправит на заказ.