Как в 4 раза ускорить актуализацию витрины крупного ритейлера

Как в 4 раза ускорить актуализацию витрины крупного ритейлера

870bc5afeb19e94721b227ef15b7d897.png

О заказчике

Заказчик — крупный российский ритейлер, одна из самых стремительно развивающихся торговых сетей в стране. До марта 2020 года компания работала преимущественно в офлайне. Однако во времена локдауна фокус переместился на онлайн-продажи.

С каждым годом бизнес-показатели электронной коммерции набирали обороты: в 2023 году объемы реализованной через интернет-магазин продукции составили уже 50% от продаж. В какой-то момент начали появляться узкие места в работе сайта.

Задача

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

1) Увеличить пропускную способность (для начала в 2 раза, но забегая вперед — мы сделали в 4!).
2) Как следствие — ускорить доставку продукта до полки интернет-магазина.
3) Сделать импорт более стабильным (с возможностью валидации и просмотра истории импортируемых данных).

Этапы реализации проекта

1. Анализ и проектирование.
Было принято решение сначала проанализировать текущую интеграцию через REST запросов в Magento API. В старой реализации использовался импорт продуктов через RESTful API Magento, что автоматически накладывало большие ограничения как на пропускную способность импорта, так и на его стабильность в целом.

Так же было замечено, что в глубине интеграции использовалась обычная функциональность импорта Magento, который из коробки заточен только на редкие обновления пакетами из файла, но никак не подходит для регулярного обновления/добавления продуктов запросами REST.

e1e5208226563637a02ef8c794b0219d.png

Под сложным продуктом понимается конфигурируемый, состоящий из нескольких простых. Например, духи могут быть 30 ml, 50 ml и 100 ml — это всё один конфигурируемый товар из нескольких простых.


2) Перевод на асинхронный импорт

c2729098e7740440f4c8ffb133dbd6f6.png


Первым шагом оптимизации стал отказ от синхронного подхода с REST в сторону асинхронного через очереди Kafka. Это позволило нам иметь возможность просмотра истории сообщений, повторно переимпортировать нужные сообщения (пришедшие из других систем данные), что сильно подняло стабильность — вероятность утраты данных стала близка нулю.

Также команда внедрила батчинг (пакетную обработку) сообщений, чтобы импорт Magento получал продукты в привычном ему виде. В итоге получили прирост в 70%, что уже больше целевого прироста оптимизации, поставленного изначально.


3) Отказ от стандартного импорта и перевод его на точечные импорты напрямую в базу данных (ускорение на 400%)

Следующим шагом стал отказ от Magento-импорта и переход на импорт прямыми запросами в базу, так как в самой Magento реализовано очень много дополнительной логики и проверок, которые не нужны клиенту. Была полностью переписана интеграция простых продуктов и логика обновления конфигурируемых. В итоге получили суммарный прирост на 400% относительно старого решения.

c73a442da67037b3b2a9dca45b3aea77.png


4) Реализация полного маппинга контракта из PIM с атрибутами в Magento. С созданием опций атрибутов и брендов на лету (порядка 200 новых значений ежедневно при общем количестве ~200.000).

Следующей задачей бизнеса стало автоматическое создание и маппинг атрибутов в процессе импорта, чтобы не было необходимости создавать их вручную — система Magento самостоятельно определяет, какие атрибуты поступили с импортом. Эта потребность возникла из-за появления большего количества потребителей данных из PIM. Ответственность за подготовку данных перешла на потребляющие системы, и Magento не стала исключением.

Разработчики реализовали удобный маппинг, позволяющий сопоставить любой приходящий контракт с любым списком атрибутов с теми, что созданы в Magento. Сам маппинг отрабатывает за 30 мс каждое приходящие сообщение из Kafka.

В результате работы этого решения в Magento, по данным на январь 2024 года, создано порядка 200.000 новых опций атрибутов и прирост каждые сутки порядка 500.

5) Мгновенная актуализация витрины из DAX 365

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

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

Теперь время включения продукта, готового к продажам, измеряется секундами, а не днями в случае ручного введения информации.

Полный текст статьи читайте на CMS Magazine