Зачем изобретать велосипед: или как «М.Видео-Эльдорадо» развивает собственную микросервисную архитектуру

Технологическая инфраструктура Группы «М.Видео-Эльдорадо» сегодня – это значительно больше, чем гигантская цепочка контрольно-кассовых аппаратов в более чем 1000 магазинах по всей стране. Под капотом у нас онлайн-платформа обеспечивающая взаимодействие с клиентами, машинное обучение, алгоритмы «умного поиска», чат-боты, система рекомендаций, автоматизация ключевых бизнес-процессов и электронный документооборот.

ПРЕДАНЬЯ СТАРИНЫ ГЛУБОКОЙ

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

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

При этом внутри ИТ-ландшафта у нас были большие монолитные системы вида Oracle ATG E-commerce platform, SAP CRM и другие. Повторение логики в каждой из них или реализация в одной и переиспользование в другой необходимой функциональности по нашим расчетам выливалось в годы времени и десятки миллионов инвестиций.

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

Кодить решили на Java, так как в этом у нас был необходимый опыт. Выбрали Spring версии 3.2. В итоге получился некий распределенный микромонолит в три-четыре сервиса, тесно взаимосвязанных между собой. Несмотря на то, что разрабатывались они независимо, работать могли только все вместе.

Тем не менее это был большой скачок в плане развития собственных технологий. Мы перешли с Java6 на Java8, начали осваивать Spring 3, плавно перейдя на Spring 4. Конечно же, это была определенная проба пера.

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

ТЕХНОЛОГИЧЕСКАЯ ЭВОЛЮЦИЯ

В 2017-18 годах мы начали глобальный рефакторинг микромонолита. Концепция развития микросервисов понравилась, как и IT-специалистам так и бизнесу. Поток рабочих задач начал нарастать.

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

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

Сервисов становилось все больше, ими надо было централизовано управлять, стандартизировать работу с ними. Тут мы впервые попробовали контейнеризацию Docker тогда они были большие и тяжелые по несколько сотен мегабайт.

Позже нам пришлось решать вопросы с балансировкой трафика и нагрузки на сервисы. В качестве решений мы выбрали Consul для внешних клиентов и Eureka для внутренних. Пробовали разные инструменты межсервисного взаимодействия gRPC, RMI. Так мы жили почти год, и как нам казалось, научились успешно создавать микросервисы и строить микросервисную архитектуру.

ПРИСТЕГНИТЕ РЕМНИ, МЫ ТОНЕМ…

В 2019 году количество наших микросервисов увеличилось в разы, перевалив за отметку в 100+. Мы применяли новые решения для межсервисного взаимодействия, где это было возможно, старались внедрять event based подходы.

При этом все острее вставали вопросы оркестрации и управления зависимостями. Но самая большая перемена, которая коснулась нас уже в начале 2019 года, относилась к смене политики компании в отношении использования Java.

Перед нами был выбор, что делать дальше: остаться с Oracle и платить им много денег, инвестировать в собственную сборку open jdk или же попытаться найти какие-то реальные альтернативы.

Мы выбрали третий вариант и вместе с компанией BellSoft, после ряда встреч и обсуждений, сформировали план перехода и пилотирования новой версии Java, причем совместив это с переходом сразу на Java11. Процесс был непростой, но на всех тестовых испытаниях, мы не ощутили серьезных и неразрешимых проблем. Следующим шагом для нас стало внедрение управления контейнерами под Kubernetes. Благодаря этому на некоторое время нам показалось, что все хорошо и мы достигли серьезного успеха. Но тут появились очередные проблемы с инфраструктурой. Она попросту не справлялась с постоянным ростом нагрузки. Мы элементарно не успевали масштабироваться. Стала очевидной необходимость очередных кардинальных технических преобразований. Так мы начали смотреть в сторону облачных технологий и стремиться примерить их на себя.

ПОДНИМИСЬ НАД ОБЛАКАМИ

Начало 2020 года обещало нам большой шаг в развитии наших внутренних технологий, понимании и совершенствовании нашей микросервисной архитектуры. Впереди виднелся большой шаг в облака. Увы, корректировать планы пришлось корректировать, как говорится, прямо по ходу пьесы.

Из-за пандемии COVID-19, вместо постепенной миграции и изучения возможностей облачных сервисов, нам пришлось всей компанией искать новые инструменты для удовлетворения изменившихся в связи с пандемией потребностей наших клиентов. Мы фактически писали очередные микросервисы, параллельно внедряя новые технологии и все же переходя на облачную инфраструктуру.

Для нас стал критичным размер контейнеров по двум простым причинам: это деньги за потребляемые облачные вычислительные мощности и время, которое тратит разработчик, а значит и вся компания на подъем контейнеров, их синхронизацию и конфигурирование, прогоны автотестов и так далее. И здесь мы в полной мере ощутили преимущество и полезность наших компактных контейнеров.

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

В конце 2020 года мы сосредоточились на процессных вещах: много времени и сил инвестировали в построение продуктового подхода, в разработку микросервисов, в выделение и формирование отдельных команд со своими метриками и KPI вокруг различных направлений бизнес-подразделений.

ПОСЛЕСЛОВИЕ

На пути нашей технической эволюции, во-первых, мы пересмотрели подход к процессу разработки самих сервисов и формированию команд. Мы сфокусировались на продуктовом подходе, укомплектовали команды исходя из максимальных принципов автономности.

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

В плане технического развития, мы выбрали для себя, как один из инструментов межсервисного взаимодействия ─ асинхронное коннективити с использованием Kafka, в том числе и Kafka Streams. Это позволило командам стать практически независимыми от других.

Мы также активно используем и практикуем реактивные практики разработке, на примере проекта reactor. По-прежнему очень хотим попробовать project Loom.

Для ускорения разработки, мы сфокусировались на развитии нескольких технических и организационных факторов, которые позволили нам существенно влиять на сроки.

Технологический аспект ─ переход на облачные технологии, обеспечивший оптимальную скорость автоматизации процессов CI\CD. Скорость и длительность прогона полного регресса и деплоймента того или иного микросервиса здесь критична.

Для примера сегодня полный прогон (со всеми видами тестирования юнитов, контрактные, интеграционные) CI\CD Pipeline для работающего продуктивного бизнес приложения ─ а это около 12-15 микросервисов связанных между собой) составляет около 31 минуты что на 7-8 минут меньше показателей начала 2020 года.

Таким образом, мы примерно на 17-18 % меньше времени тратим ожидания результата. Эта экономия позволяет нам заниматься другими продуктовыми задачами. Во многом это связано с тем, что мы используем компактные контейнеры на основе Alpine Linux, которые с каждым часом становятся все быстрее и легче.

Мы стали эффективнее в плане разработке микросервисов в целом. И это положительным образом сказывается на пользовательском опыте наших клиентов.

Одной из ключевых метрик наших онлайн-продуктов (сайт и мобильные приложения) сейчас является скорость, и Liberica JDK также позволяет нам добиваться этого прироста, по производительности который мы конвертируем в позитивный опыт наших покупателей.

Кроме того, правильный подход к разработке микросервисов позволил нам существенно ускорить время запуска нашего продукта на рынок. Мы научились выводить в продакшен отдельные сервисы, используя при этом различные стратегии деплоймент A\B, cannery и другие по мере необходимости. Это дает возможность быстро получать обратную связь о работе микросервисов. Мы за два месяца разработали и внедрили пару новых сервисов в покупательском опыте. Речь про так называемую быструю доставку товаров в течении 2 часов (используем различные агрегаторы такси и доставки) и выдачу наших заказов в самых неожиданных местах (в магазинах «Пятерочка» или отделениях «Почты России», даже на парковках больших бизнес-центров). У части клиентов Группы «М.Видео-Эльдорадо», благодаря нашим микросервисам, появилась возможность уехать на такси со своим товаром прямиком из магазина домой.

ТВОРЧЕСКИЕ ПЛАНЫ

В наших планах на 2021 год активное развитие облачной инфраструктуры и переход полностью на концепцию Infrastructure as a code («Инфраструктура как код»).

Мы планируем уделять большое внимание построению прозрачных решений для контроля и взаимодействия микросервисов в виде Service Mesh-решения на базе Istio и Admiral.

Нас ждет связанная с этим большая работа по доведению до ума и улучшениям всего стека Observability, мониторинг трассировки запросов и логирования сообщений.

Также в наших планах попробовать применять технологии serverless в том числе есть идею попробовать это в java в том числе. Кроме того, есть такая пока далекая но не кажущаяся нереальной идея построить multi-Cloud инфраструктуру и экосистему.

Если интересно потрогать наш технологический стек руками, не стесняйтесь, работы хватит на всех. Запись в добровольцы осуществляется 24/7: здесь.

{ "author_name": "Andreu Petrov", "author_type": "self", "tags": [], "comments": 26, "likes": 8, "favorites": 5, "is_advertisement": false, "subsite_label": "mvideoeldorado", "id": 213279, "is_wide": true, "is_ugc": true, "date": "Thu, 25 Feb 2021 12:35:17 +0300", "is_special": false }
0
26 комментариев
Популярные
По порядку
Написать комментарий...
4

Сайт как и раньше грузится довольно долго (хотя и быстрее связного)

Ответить
3

Спасибо. Интересно.

Ответить
2

Я честно не дочитал, видел что вы там тонете. Почему сайт м-видео такой тормозной и глючный? Честно говоря из всех сайтов крупный реитейлеров, ваш самый глючный.

Ответить
2

Привет! Можете уточнить в чем это выражается на ваш взгляд? За последние 6 мес существенно ускорили его быстродействие. 

Ответить
0

Могу, где-то дней пять назад делал заказ.
Во-первых, позиция добавленная в корзину, каким-то образом добавилась на разные строки. Одна и то же, не 2 единицы, а две строки. Странно, да?
Во-вторых, позиции в корзине не удалялись долгое время.
В-третьих, с логинами-авторизациями вообще что-то странное происходит. Привязка email к телефону, если это достаточно старый пользователь, какая-то кривая, я честно говоря сейчас не помню, но были проблемы недавно с подтверждением email. Тут к сожалению лень уже разбираться.

Ответить
1

Константин, напишите, пожалуйста, подробности и номер телефона (который привязан к личному кабинету) на электронную почту - onduty@mvideo.ru. Массовой проблемы тут нет, мы будем локально разбираться с вашим аккаунтом.
Кроме того, в ближайшее время планируется крупное обновление сайта. Все недостатки сайта постараемся учесть.

Ответить
1

А у меня случайно как зарегестрировались две бонусные карты так и мешают друг другу. Зато в облаках и микросервисы

Ответить
2

Владимир, напишите нам на электронную почту - onduty@mvideo.ru, пожалуйста. Будем разбираться!

Ответить
1

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

Ответить
1

Артём, здравствуйте! Напишите, пожалуйста, нам на электронную почту - onduty@mvideo.ru подробности. Мы во всём разберемся!

Ответить
1

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

Ответить
0

Юрий, здравствуйте! Напишите, пожалуйста, нам на электронную почту - onduty@mvideo.ru подробности. Мы во всём разберемся!

Ответить
1

Да вы и сами знаете о ситуации с корявыми сессиями, ну.

Ответить
–1

Сайты только так и открываются по полторы минуты (

Ответить
1

Привет! Какой браузер вы используете? В Chrome  менее 3-5 сек.

Ответить
–1

Chrome, полторы минуты это фигура речи, скорее
Но тем не менее, отклик такой долгий по сравнению с оным на других сайтах в Интернете, что вызывает боль

Ответить
0

Потребительский кейс 2021 года.
Интернет-магазин "Эльдорадо" не имеет технической возможности учесть баллы программы лояльности в счёт оплаты кода цифровой подписки, если  покупатель желает получить его тут же, т.е. дистанционно. Хотите скидку - идите получать свой заказ (т.е. распечатку кода для активации подписки) в розничный магазин 🤦‍♀️
К слову, при покупке цифровых подписок в М.Видео таких проблем нет.

Ответить
0

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

Ответить
0

Здравствуйте, Анастасия! Что касается применения бонусных рублей к цифровым подпискам, вы правы. Увы, сейчас установлено ограничение на эту категорию товара. Надеемся, что в будущем у нас получится полностью расширить список применения бонусных рублей. 
По поводу товара, надо разбираться. Напишите, пожалуйста, нам подробности на электронную почту - onduty@mvideo.ru

Ответить
0

Какое ограничение? Я купила в "Эльдорадо" подписку на Плюс с оплатой баллами, но пришлось код забирать в магазине. Это было в конце января. В ТП в чате watsapp мне сказали, что при получении именно дистанционно нет возможности у вас учесть баллы. Ну бред же - делать в цифровой среде покупку цифрового продукта, а получать его в реальном магазине. В "М.Видео" баллы без проблем учитываются при дистанционном получении кода, но на момент покупки не было активных баллов на моем счёте.

По поводу неверного отображения количества товаров в магазине не знаю, что и как вы будете проверять, скриншотов у меня не сохранилось. Заказы № 2005186280 и № 2005534584. В первом при оформлении было указано, что в магазине 4 шт., потом утром позвонил оператор и сказала, что в Москве браслетов нет вообще и предложила забрать в МО (тоже витринный экземпляр в итоге). Во втором при оформлении заказа было написано, что в магазине 2 шт., после подтверждения комплектации витринным образцом система показывала, что в магазине доступен ещё один, последний экземпляр.

Ответить
–1

Одна вода. Было бла-бла-бла. Стало микросервисное бла-бла-бла. И потом это бла-бла-бла улетело в обалка. Никакой конкретики.

Ответить
0

Какие детали вам были бы интересны?

Ответить
0

Было монолитное приложение A выполнявшее бизнес задачи X,Y,Z и монолитное приложение B выполнявшее задачи J,K,L.  Все это заменили на микросервисы q,w,e,r,t,y,u,i, каждый из которых выполняет следующие задачи...

Ответить
0

Вот тут ОЧЕНЬ много деталей: https://habr.com/ru/company/mvideo/blog/546536/ 

Ответить
0

А почему выбрали BellSoft?

Ответить
0

Перепробовали несколько вариантов. Этот оказался наиболее оптимальным. 

Ответить

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

Комментарии

null