
яндекс · 6 июн.
Яндекс Go — один из крупнейших в России агрегаторов такси, который работает также в десятках других стран на четырёх континентах. Чтобы сервис радовал миллионы водителей и пассажиров по всему миру, мы заботимся не только о его надёжности и отказоустойчивости, но и о том, чтобы в системе всегда были свободные водители, машины приезжали быстро, время подачи предсказывалось точно, а в поездке не происходило неприятных сюрпризов.
Мы разрабатываем Проводник — кросс-платформенный продукт, доступный в Такси, Доставке и Яндекс Еде. В его основе лежат алгоритмы, которые позволяют водителям и курьерам перемещаться в точки интереса с возможностью попутных заказов. В результате у водителя сокращается холостой пробег, а у пассажира — время ожидания такси (подходящих водителей становится больше). Другие наши алгоритмы позволяют водителям и курьерам работать в определённых зонах, например в районах, близких к дому, или там, где спрос особенно высок. Кроме того, мы работаем над [платформой](https://vc.ru/yandexgo/76605-kak-algoritmy-yandekstaksi-raspredelyayut-avtomobili-v-gorode), которая распределяет водителей по городу исходя из спроса на такси, чтобы в любом месте в любой момент времени было достаточно водителей, готовых отвезти пассажиров.
Узнайте про разработку Городских сервисов Яндекса на [dev.go.yandex](https://dev.go.yandex/teams/taxiefficiency)
Разработка кросс-платформенных фич
При разработке фич вам предстоит учитывать, что основу сервиса составляет унифицированное ядро и протокол взаимодействия с системой распределения заказов и клиентом. Благодаря этому удаётся сохранять единую логическую кодовую базу и разделять функционал для автомобилистов, велосипедистов и пешеходов на уровне протокола взаимодействия бэкенда и клиента, а также на уровне данных (например, дорожных маршрутов), которыми оперирует бэкенд.
Решение архитектурных задач высоконагруженного распределённого сервиса
Вы будете выполнять оптимизацию и актуализацию архитектурных решений, которые со временем перестают эффективно справляться со своими задачами: в пиковое время в режимах Проводника одновременно находятся ≈170 тысяч человек, сервис ежесекундно проверяет ≈80 тысяч пар заказ — исполнитель, оценивает ≈200 тысяч дорожных маршрутов. Каждый год продукт растёт на 20–40%.
Разработка и улучшение алгоритмов подбора заказов по пути и в районе
Вам предстоит развивать продукт за счёт новых механик или комбинации базовых механик. Примеры простых кейсов: поездка в конце рабочей смены домой с попутными заказами; подбор заказов внутри окружности. Мы заменили окружность на комбинации сложных полигонов, а поездки по пути в точку расширяем до поездок по пути в полигон.
Выстраивание Проводника как платформы для создания новых продуктов
Проводник существует не только как самостоятельный продукт — он представляет собой систему, которая позволяет перемещать водителей внутри геозоны. Примеры: система быстрой подачи такси на основе FIFO-очереди водителей на парковках аэропортов (наполнение такой очереди реализовано через Проводник); режим «Обратно» в междугородних поездках (Проводник помогает подобрать заказ на обратном пути). Двигаемся в сторону модели Backend as a service.
Эффективное распределение водителей по городу
Мы знаем, где и когда возникает повышенный спрос на такси, и у нас есть система перемещения водителей. На стыке этих двух фактов мы построили [сервис](https://vc.ru/yandexgo/76605-kak-algoritmy-yandekstaksi-raspredelyayut-avtomobili-v-gorode), который предлагает водителям поехать туда, где они особенно нужны. Вам предстоит улучшать качество данных и скорость работы сервиса, чтобы предложения о перемещении были ещё лучше и полезнее.
Больше о бэкенде в Яндексе — в канале Yandex for Backend
* Работали с бэкендом, проектировали архитектуру сервисов
* Использовали реляционные базы данных, в идеале — PostgreSQL
* Разрабатывали в Unix-подобных системах — Linux, macOS (терминал, cmake/make, Python/Bash-скрипты не вызывают панику)
* Понимаете, как клиенты (другие сервисы, мобильное приложение) работают с бэкендом: в новых фичах ретраи и идемпотентность проектируются изначально
* Знаете C++/STL (или готовы к быстрому погружению), а также классические алгоритмы и структуры данных
* Работали с высоконагруженными и/или распределёнными системами
* Строили системы, в которых возможны и учтены гонки данных
* Работали с MongoDB, Redis/Valkey