От монолита к микросервисам. Как упростить и ускорить работу онлайн-магазина продуктов

Опыт «Утконоса».

От монолита к микросервисам. Как упростить и ускорить работу онлайн-магазина продуктов

Уже 21 год компания «Утконос ОНЛАЙН» доставляет продукты жителям Москвы и области. Мы были одними из первых на рынке: в нулевых наши клиенты выбирали товары из печатного каталога, делали заказ по телефону и потом забирали его в пунктах выдачи. С тех пор многое изменилось: сейчас на нашем сайте более 70 тысяч товаров, которые мы можем привезти за два часа, а в год доставляем около 3 млн заказов. В блоге компании будем рассказывать о том, как эти изменения стали возможны.

Начинаем блог с разговора про бэкэнд: директор ИТ-департамента Мария Артамонова делится опытом перехода от неповоротливого приложения к быстрым сервисам, которые подстраиваются под любые бизнес-задачи.

Бизнес хотел, чтобы мы менялись быстрее

Монолитом называют продукт, все компоненты которого взаимосвязаны и взаимозависимы. Если один не работает, то не работают и все остальные.

Микросервисы — небольшие, автономные сервисы, которые работают совместно и нацелены, как правило, на выполнение одной задачи.

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

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

Например, раньше мы хранили часть данных в системе планирования SAP ERP, другую часть — в компоненте для управления запасами EWM и на нашем сайте. Это значит, чтобы отобразить интервал доставки при оформлении заказа, нужно получить данные о доступности ресурсов из трёх разных систем. То же самое с любыми доработками, в том числе с простыми изменениями логики доставки для курьеров.

Отслеживать сбои в монолите тоже было непросто. Из-за запутанной, где-то сращённой логики невозможно было разобраться, чей набор функций работал некорректно. Например, адрес доставки каким-то неявным способом влияет на скидки. Кто должен это исправить? Продуктовые команды перекладывают ответственность друг на друга: «это не наше, идите к логистике». Поэтому на устранение проблемы уходило слишком много времени.

Также из-за сложности кода, его нечитабельности было трудно привлекать новых разработчиков: чтобы разобраться со старым, нагруженным решением, требовалось время.

За два года мы переработали весь ландшафт приложения

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

Мы не могли остановить бизнес-процессы, переделывать приходилось на ходу.

Это всё равно что пересобрать двигатель, пока автомобиль мчится по дороге на скорости 220 км/час. Звучит невыполнимо. Но в итоге за два года мы переделали 80% приложения.

  • Начали с изменений в архитектуре. Раньше в приложении «Утконоса» была только витрина и SAP-платформа. Корпоративной шины, которая бы связывала продукты внутри системы, не было. Мы её создали.
  • Потом взялись за микросервисы. Где-то использовали отторгаемую бизнес-логику и реализовывали её по-новому, а где-то просто переносили модуль на более подходящий стек. Первым независимым элементом стала TMS (система управления транспортом).
  • Долго анализировали и разделяли базу данных. Изменили отдельные её части, подвязали их к разным микросервисам.
  • Исправили исходный код. Создали из кусочно-лоскутной архитектуры красивое, понятное решение.

Из незавершённого — это бэкэнд-витрина. Эта часть до сих пор в процессе рефакторинга. Мы могли бы её оставить в прежнем виде (она выдерживает нагрузку), но решили всё же разбить на микросервисы: мы собираемся кратно расширить команду, чтобы запараллелить процессы. На монолите это было невозможно, а на микросервисах достижимо.

Нам помогла пандемия

В тот период всем нужно было меняться быстрее обычного. Нам удалось запустить экспресс-доставку за 2 часа (до этого привозили только на следующий день), расширить ассортимент на десятки тысяч товаров (сейчас в ассортименте 70 тысяч позиций, это сопоставимо с ассортиментом огромного гипермаркета) и создать самописную WMS-систему (warehouse management system), которая автоматизирует работу складов. Последнее обычно занимает полтора-два года, но мы справились за 9 месяцев, над этим проектом сегодня трудятся 70 специалистов: продакты, разработчики, аналитики и тестировщики.

Нагрузку увеличивали постепенно. Сначала рядовая проверка на тестовых стендах, потом интеграционная, потом — выкладка в продуктив на минимальный трафик 1–5% и плавное увеличение до 100%. Некоторые сервисы мы просто «зеркалировали»: процессы работали по старой логике, пока мы тестировали новую.

Численность ИТ-департамента выросла в два раза

При переходе от монолита к микросервисам мы не привлекали сторонних специалистов, обращались к ним только за консультацией (иногда важно услышать другую точку зрения). Поэтому команду расширили — в три раза (причём через профильные сайты нашли всего половину, остальных — по рекомендациям и через соцсети, в том числе LinkedIn). Разработчиков стало больше, около 80%, тестировщиков — порядка 20%.

При этом обновление технологического стека и переход на Python сильно упростили наём: молодые специалисты теперь охотнее идут к нам в команду.

Сейчас в ИТ-команде «Утконоса» более 400 человек, в начале года нас было 219.

Инициативы бизнеса стали реализовываться мгновенно

До перехода мы вели работу в разных вариациях системы SAP. Система — всё ещё часть компании, но большая её часть превратилась в микросервисы и разделилась на 3 основные части:

  • Витрина, которая состоит из сайта, приложений для iOS и Android. Именно с ней взаимодействуют наши клиенты.
  • Warehouse Management System — система управления нашими складами, сейчас их 4. WMS координирует сотрудников и процессы. Например, механизирует приёмку и размещение товара, комплектацию и отгрузку заказов, обработку возвратов и инвентаризацию.
  • Transport Management System — система управления грузоперевозками, она оцифровывает заказ и размещает его в существующих маршрутах.

Раньше, если что-то не получалось, мы часто слышали: «виноват ИТ-департамент». Теперь этот тезис благополучно забыт. С переходом на микросервисы мы моментально подхватываем практически любую инициативу бизнеса.

Например, весной 2021 года у компании возникла идея продавать букеты и доставлять их день в день. Мы собрали необходимые функции максимально быстро (от идеи до внедрения прошло два месяца) и реализовали такой алгоритм, который позволил привозить свежие цветы от поставщика сразу к клиенту — то есть с виртуальной приёмкой, без отгрузки на нашем складе.

У каждого набора функций от бизнеса свой продакт-менеджер: он оценивает инициативы бизнеса с точки зрения юнит-экономики (сколько денег принесёт та или иная доработка), отклоняет неактуальные, ставит задачи по наиболее важным изменениям.

Советы коллегам

«Распил» монолита — это долго, сложно и травматично. Именно поэтому так много компаний продолжают использовать устаревший легаси-код. Если ваша компания всё же решилась на трансформацию, наш главный совет:

  • Подготовьте бизнес к тому, что функциональность местами будет проседать. А сами приготовьтесь морально: у разных отделов появится много взаимных претензий. Это точно временно.

Для этого процесса привлекайте только самых сильных специалистов компании, а лучше — уже «сыгранную» команду.

2020
24 комментария

Спасибо за рассказ.
«Из-за запутанной, где-то сращённой логики невозможно было разобраться, чей набор функций работал некорректно» — а как микросервисы помогли решить эту проблему?

3
Ответить

Замените облако микросервисами :-)

8
Ответить

Добрый день!
Микросервисная архитектура сделала систему прозрачной и ускорила решение инцидентов. У нас есть четкое понимание какая команда за что отвечает. Если у какой-то системы неполадки — чинить нужно только этот «кусочек», а не искать причину по всей системе.

4
Ответить

Хотелось бы больше технических подробностей )

2
Ответить

Добрый день!
В будущих статьях обязательно уделим больше внимания техническим подробностям :)

3
Ответить

Вообще интересно как находясь на рынке доставка продуктов десятки лет утконос умудрился в чистую слить рынок таким компаниям как лавка и самокат

2
Ответить

Комментарий недоступен

2
Ответить