Яндекс Такси — это миллионы поездок каждый день. Стоимость поездки рассчитывается в реальном времени, и этот алгоритм — сердце сервиса. Недавно инженеры Яндекс опубликовали статью, в которой рассказали, как они вынесли алгоритм ценообразования из основного кода. На первый взгляд, зачем трогать то, что работает? Но как оказалось, это решение было критически важным. Разбираемся, в чём была проблема и почему это было неочевидно.
История началась с того, что команда столкнулась с рядом ограничений, которые мешали развитию сервиса. Казалось бы, алгоритм работал, но с ростом нагрузки и появлением новых функций стало ясно: дальше так жить нельзя. Авторы статьи на Хабре делятся деталями этого инженерного путешествия.
Что не так с ценообразованием в коде
Изначально алгоритм ценообразования был встроен в основной код приложения. Это казалось удобным: всё в одном месте, можно быстро менять. Но с ростом сервиса появились проблемы:
- Каждое изменение алгоритма требовало полного деплоя.
- Сложно тестировать: нужно было проверять весь функционал.
- Высокая связанность: другие модули зависели от этого кода.
- Масштабирование: при пиковых нагрузках алгоритм не успевал.
В статье на Хабре авторы описывают, что они столкнулись с этими проблемами, когда стали расширять функциональность и запускать эксперименты.
Почему не было очевидно
Может показаться, что вынести алгоритм — логичный шаг. Но не всё так просто. Во-первых, алгоритм был тесно связан с другими системами: тарифами, геоданными, платежами. Во-вторых, команде казалось, что «работает — не трогай». В-третьих, вынесение требовало серьёзной архитектурной перестройки.
Авторы отмечают, что осознание пришло не сразу: сначала они пытались улучшать существующую архитектуру, но упирались в ограничения. Только после анализа узких мест стало понятно, что нужно выделять ценообразование в отдельный сервис.
Как выносили алгоритм
Процесс выноса был итеративным. Сначала определили границы сервиса: какие данные нужны, какие зависимости остаются. Затем создали отдельный модуль, который мог работать автономно.
Одним из ключевых решений было использовать контракты API: алгоритм стал вызываться через API, а не напрямую из кода. Это позволило добавлять новые функции независимо.
Авторы также рассказывают, как они проводили тестирование: использовали shadow-mode (когда новый сервис получает тот же трафик, но не влияет на реальный результат) и A/B-тесты.
Результаты
После выноса команда получила:
- возможность быстро изменять цены без полного деплоя;
- более лёгкое масштабирование: сервис можно реплицировать отдельно;
- улучшенную тестируемость.
Вот таблица сравнения «до» и «после»:
| Критерий | До выноса | После выноса |
|---|---|---|
| Внесение изменений | Полный деплой | Обновление отдельного сервиса |
| Масштабирование | Вместе с монолитом | Независимая репликация |
| Тестирование | Затрагивало всё | Изолированное |
Выводы для других команд
История Яндекс Такси — хороший пример того, что иногда нужно пересматривать, казалось бы, устоявшиеся решения. Если ваша система содержит критичный алгоритм, который постоянно меняется, возможно, стоит вынести его в отдельный микросервис. Главное — не бояться архитектурных изменений.
А для автоматизации работы с внешними сервисами и API можно использовать платформы, которые упрощают интеграцию. Например, ASI Biont поддерживает подключение к [Яндекс Такси] через API — подробнее на asibiont.com/courses.
Заключение
Вынос алгоритма ценообразования из кода Яндекс Такси — это не просто техническое улучшение, а стратегический шаг, который позволил сервису стать гибче. Урок прост: даже если что-то работает, стоит периодически пересматривать архитектуру. Подробнее вы можете прочитать в оригинальной статье: Источник.
Комментарии