Ozon Fresh и Ozon Retail • Ozon Fresh: про короткие слоты и как мы доставляем быстро (проект «Автомаршрутизация курьерской доставки») • Ozon Retail: про распиливание большого монолита и превращение его в микросервисы
означает, что Ozon выступаетв качестве розничного продавца, а вы выступаете в качестве оптового поставщика для компании Ozon Модель 3P (Third-Party) означает что вы являетесь розничным продавцом и продаете товары напрямую потребителям через торговую площадку Ozon 1P — 100% Ozon Fresh Ozon Retail
интервалов, описывающих нормативы операционного процесса доставки • Regular — будущее туманно, но предсказуемо • Express (on demand, доставка в течении часа) — сильное возмущение в силе Принимаем заказы с витрины Закрываем слот(cut_in) Собираем заказ Передаем курьеру(cut_off) В дороге до клиента Окно доставки 10:10 10:20 10:30 10:40 10:50 11:00 10:00 Принимаем заказы с витрины Закрываем слот(cut_in) Собираем заказ Передаем курьеру(cut_off) В дороге до клиента Окно доставки t Regular + Express у одно курьера = Profit
VRP — это NP-трудная задача, со множеством ограничений. Задачи маршрутизации транспорта Задачи комбинаторной оптимизации, в которых для парка транспортных средств, расположенных в одном или нескольких депо, должен быть определен набор маршрутов до нескольких отдаленных точек-потребителей Vehicle Routing Problems, VRP
заказов Учесть размеры заказов, грузоподъемность и объем машины Окно доставки клиенту Надо успеть вовремя Пробочная ситуация Учесть пробки на маршруте Ресурс курьеров Учесть количество свободных курьеров 01 02 03 04 05
качества. Решение — это всегда баланс качественных оценок Defect rate DR — совокупная метрика, куда включаются все дефекты сервиса. Например: опоздание к клиенту Дисперсия заработка курьера Большая дисперсия снижает мотивацию курьеров, увеличивает текучку и наши расходы на поиск новых Утилизация курьера Утилизация показывает, насколько оптимально мы используем наших курьеров Cost per order CPO – метрика стоимости доставки заказа. Строя оптимальные маршруты, мы сокращаем пробег и увеличиваем доступность курьеров Профит
Легкость обслуживания и тестирования • Независимое развертывание • Гибкость технологий • Удобство отладки за счет технологий трассировки и поиска неисправностей • Разрастание процесса разработки. Если разрастание не контролируется должным образом, оно приводит к замедлению разработки и снижению операционной эффективности или к созданию архитектуры Big ball of mud • Экспоненциальный рост расходов на инфраструктуру • Дополнительные организационные расходы • Отсутствие стандартизации • Отсутствие ясности в вопросах владения Минусы:
управления закупками и поставками 2. Ни один товар не попадет на склады Ozon без этой системы 3. Расчет потребности в закупках. Сколько какого товара и на какой склад нужно привести 4. Управление заказами поставщикам. Согласование закупок внутри Ozon и с поставщиками 5. Атрибуты товаров и поставщиков, необходимые для закупок 6. Десятки других функций, потому что «так исторически сложилось»
Сложно найти разработчиков 2. Возможность вертикального масштабирования практически исчерпана 3. В Расчет потребности (после DS) занимал ежедневно 4 часа. А днем вообще не проходил, из-за наплыва пользователей. И это только один пример
в создании монолита (создали в 2016 году отпочкованием от еще одного монолита) Дополнительные трудности 2. Вся логика в хранимках. Код не получится переиспользовать 3. Система устарела морально. Требовалась не только техническая переработка, но и переосмысление бизнес-процессов 4. Поезд нужно пересобирать на полном ходу 27
за дело! 2. Выделили 10+ этапов. Каждый – проект на несколько месяцев 3. Выявили зависимости и приоритеты для бизнеса 4. Составили роадмап План – всему голова! Но все это только на втором году распила 😀 А в начале – тушили пожары и лечили там, где болело сильнее всего 28
исходного приложения, чтобы абстрагировать «микросервис» в свой собственный класс/API, который вызывает остальная часть кода • Использование Kafka в качестве шины событий для асинхронного межсервисного взаимодействия. Этот архитектурный стиль очень хорошо сочетается с потребностями связи микросервисов, когда один сервис может транслировать данные для использования любым количеством потребителей. Переход от SQL Service Broker к Kafka • Использование преимуществ gRPC • Уход от хранимых процедур, для возможности масштабирования и переиспользования кода
(уход от cdc) для гарантированности и консистентности доставки событий/данных • Рефакторинг монолитна — все операции чтения и записи данных в одном домене с четкими границами • Запись данных в исходную базу данных и их отправка в новый сервис (дублирование потоков). При этом исходная база данных остается источником истины для чтения пользовательских данных • Чтение в монолите из нового сервиса с регистрацией любых несоответствий данных, чтобы устранить любые возникающие ошибки. Обратная запись идет в монолит для синхронизации • Перенос бизнес логики с ее рефакторингом в части событийных моделей, статусных моделей