О чём эта история

Яндекс Магистрали — логистический сервис Яндекс Доставки для всех, кто перемещает грузы в пространстве, то есть для отправителей, перевозчиков и экспедиторов. С помощью технологических ресурсов команда Yandex Cloud создала универсальный масштабируемый Cloud‑Native‑сервис, который предназначен для решения логистических задач компаний любого масштаба. Основным достижением проекта стало снижение time‑to‑market: время вывода функциональности в продакшн сократилось с двух месяцев до одной недели.

С помощью serverless‑технологий оптимизировали бизнес‑процессы и сократили время на коммуникацию. Например, нет необходимости согласовывать квоты и ждать, когда DevOps‑инженер увидит тикет в своём спринте и выполнит задачу. Бессерверные сервисы масштабируются автоматически — это позволяет не расширять штат специалистов и перечень оборудования. Задачи решаются силами одного разработчика.

Как уменьшить time‑to‑market

Яндекс Магистрали — сервис Яндекс Доставки, который позволяет любому бизнесу оптимизировать процессы транспортной логистики, сокращать расходы напрямую за счёт торгов и дополнительных сервисов, а также экономить ресурсы на транспортировке грузов.

Яндекс Магистрали — это единая платформа для организации грузоперевозок между городами и внутри города, которая помогает грузовладельцам, перевозчикам, экспедиторам координировать все этапы перевозки: работу с грузоперевозчиками, поиск новых исполнителей, мониторинг заказа и многое другое.

Задачи в области транспортной логистики разнообразны, и для их решения существует множество подходов. Команда Яндекс Магистралей хотела разработать универсальный сервис, который позволит успешно решать логистические задачи любого типа и сложности. Для этого требуется активно исследовать рынок, ставить эксперименты и быстро проверять гипотезы.

Классический принцип разработки продуктов, принятый на тот момент в компании, не подходил для решения задачи. Каждый продукт или новая функциональность проходили многомесячный цикл разработки. В результате, если в начале пути была допущена ошибка, она перечёркивала все усилия. Поэтому не было гарантии, что команда сможет реализовать функции продукта в разумный срок, а значит, что они будут актуальны на момент релиза.

Команда поставила задачу снизить time‑to‑market при тестировании новых гипотез и функциональности сервиса. Нужно было ускорить процессы запуска и при этом не расширять штат.

Тогда команда начала искать технологии для размещения слоя бизнес‑логики и данных.

Когда всё кричит в пользу serverless‑технологий

Команда Яндекс Магистралей планировала ускорить разработку и запуск гипотез без увеличения численности штата. В отличие от физической инфраструктуры, облачная платформа Yandex Cloud предоставляла вычислительные мощности, масштабируемые по запросу, а также бессерверные технологии. Инфраструктура бессерверных сервисов масштабируется самостоятельно и не требует контроля в случае пиковой нагрузки — это позволяло не нанимать DevOps‑инженеров дополнительно.

Кроме того, облачные технологии подразумевают низкий порог входа для разработки и деплоя, а также возможность экономить бюджет за счёт отсутствия платы за простой.

Платформа Yandex Cloud предоставляет отказоустойчивое и автоматически масштабируемое окружение для кода и данных внутри экосистемы serverless, обеспечивает безопасность и непрерывную работу. Кроме того, при использовании облачной платформы Yandex Cloud команда Яндекс Магистралей по необходимости могла наблюдать за логами на графиках напрямую из консоли за счёт их доступности «из коробки». Команда оценила возможности тестирования и отладки «из коробки», наличия тегов функций для релизов и отката к стабильной версии.

Дополнительными факторами в пользу перехода в экосистему serverless Yandex Cloud стала подробная документация, множество примеров использования и широкие возможности Yandex Cloud по интеграции.

Подготовка к пилотным проектам

Сначала команда Яндекс Магистралей составила набор облачных сервисов, который бы стал основой для дальнейшего развёртывания всего проекта, и приступила к реализации двух экспериментальных кейсов.

Сервис Yandex Cloud Functions использовался для запуска кода в виде функции в безопасном, отказоустойчивом и автоматически масштабируемом окружении без создания и обслуживания виртуальных машин.

Для описания бизнес‑логики нового сервиса Яндекс Магистрали выбрали язык Typed Python 3.11 и библиотеку Pydantic. Pydantic входит в новый фреймворк Python для написания API, с её помощью можно быстро и удобно организовать валидацию данных, что было важно для проекта.

Функции можно протестировать на локальном компьютере, они не требуют упаковки в контейнер, а код на Python не требует сборки. Это значительно экономит время на тестирование.

Также использовали Yandex Cloud ToolKit для PyCharm. Возможность описать конфигурацию нужной функции прямо внутри PyCharm и одной кнопкой запустить новую версию сокращает время развёртывания. На случай форс‑мажорных обстоятельств можно откатить код к более стабильной версии прямо из IDE сервиса.

Для хранения данных команда использует YDB в serverless‑режиме. YDB автоматически масштабируется, не требуя дополнительных трудозатрат команды. YQL — диалект SQL, что упрощает понимание для разработчиков, которые ранее сталкивались с SQL. YQL позволяет отправлять параметризованные подготовленные запросы, что ускоряет время выполнения даже объёмных запросов. Таким образом, можно передавать в базу структуры объёмом до 50 МБ с гарантией безопасности от SQL‑инъекций. Также подготовленные запросы можно переиспользовать, что сокращает время на их парсинг.

Ускоряет работу и механизм Change Data Capture в Yandex Data Streams. Он позволяет отслеживать изменения в таблицах в режиме реального времени и запускать функцию сразу, как только данные записались в таблицу.

Яндекс Магистрали используют Yandex Lockbox для хранения секретов, которые можно легко передать в функцию. А запуск бизнес‑приложений происходит с помощью триггеров Yandex Cloud Functions.

Вопросы мониторинга и логирования также решаются с помощью сервисов Yandex Cloud. Yandex Monitoring служит для отслеживания нагрузки и устранения ошибок, а Yandex Cloud Logging — для работы с лог‑группами: позволяет структурировать логи и облегчает поиск.

Организовав инфраструктуру, команда Яндекс Магистралей приступила к реализации пилотных проектов.

Эксперименты с применением нового подхода к разработке

Один из важных запросов клиентов — отслеживание времени прибытия машин на склад для погрузки или выгрузки. Задача Яндекс Магистралей — обеспечить возможность показать авторизованному пользователю клиента экран, на котором он сможет наблюдать за машинами.

В интерфейсе Магистралей можно увидеть все данные по машинам, участвующим в перевозках, а также координаты мест и время погрузки и выгрузки. Так как у сервиса есть собственный API, то можно, например, получать развёрнутые данные о складе погрузки или выгрузки.

Одно из требований клиентов — наличие списка или таблицы с возможностью фильтрации. При этом важно, чтобы эти данные были доступны только авторизованным пользователям.

Для решения этой задачи в облачной инфраструктуре Яндекс Магистрали решили использовать Yandex DataLens. Этот полноценный инструмент BI‑аналитики предоставляет необходимые компоненты: виджет таблицы, селекторы, аутентификацию через ID, RLS для авторизации, коннектор для YDB. Протестировали инструмент на примере визуализации для двух таблиц — пользователей и рейсов.

Сейчас специалисту Яндекс Магистралей достаточно зайти в сервис один раз в определённое время, чтобы забрать данные и записать их в YDB, а затем подключить коннектор DataLens, и после этого функция становится доступна авторизованным пользователям. В результате пользователь может фильтровать информацию и использовать селекторы в DataLens для динамично изменяющихся данных, а команда проекта может контролировать доступ к данным.

Вторая решённая в пилотном проекте задача Яндекс Магистралей — предоставить авторизованному пользователю возможность заполнить форму со сменой статуса, а также обновлять строку в таблицах YDB и Магистралях, то есть дать форму для работы с данными.

В Магистралях уже есть API, которые позволяют менять эти статусы, но формы не было, и её решили реализовать с помощью облачных сервисов.

Сначала создали функцию сбора данных. Она получает данные из формы Yandex Forms, интегрированной с Yandex DataLens, и записывает их в YDB. Вторую функцию разработали для синхронных обновлений данных в Магистралях при изменениях данных в YDB. Для этого использовали Change Data Capture в Data Stream. Межсервисную авторизацию реализовали с помощью API Gateway, для хранения данных использовали Yandex Object Storage, а для визуализации — Yandex DataLens.

Кратное снижение time‑to‑market

В результате двух экспериментальных проектов вместе с Yandex Cloud Яндекс Магистрали отказались от классического подхода к разработке новой функциональности в пользу быстрого запуска на базе облачных технологий. Обновлённая версия сервиса стала доступна для первых пользователей уже через неделю после настройки новых возможностей в консоли. Команда Яндекс Магистралей разработала бизнес‑логику нового масштабируемого Cloud‑Native‑сервиса, а за инфраструктуру, масштабирование, фронтенд и компоненты в нём отвечает Yandex Cloud. За счёт небольшого RPS команда не выходит за рамки бесплатного тарифа. Кроме того, бессерверные технологии позволили не тратить время и силы команды на поддержку инфраструктуры. Всё это привело к реализации проекта практически без бюджета и без привлечения core‑разработчиков компании.

Сегодня Яндекс Магистрали воплощают идею создания универсального логистического сервиса, сократив time‑to‑market с двух месяцев до одной недели.

Мнение

Фёдор Никонов,
менеджер продукта Магистрали от Яндекс Доставки
Фёдор Никонов,
менеджер продукта Магистрали от Яндекс Доставки

Если раньше мы видели только один путь для ведения и разработки продуктов, то сейчас мы можем выбрать разные пути: самостоятельно поднимать виртуальные или реальные хосты, развернуть Kubernetes‑кластеры и обслуживать контейнеры. В любом случае нужно будет самостоятельно следить за масштабированием. А есть ещё один путь — использовать Cloud‑Native‑технологии и сконцентрироваться на разработке бизнес‑логики приложения, а задачи по инфраструктуре, фронтенду и другие технические вопросы доверить Yandex Cloud. Мы сделали именно так и не пожалели.