Авторизация
Сброс пароля
Как в 4 раза ускорить актуализацию витрины крупного ритейлера за счет комплексной оптимизации системы импорта в Magento
Заказчик: Крупный российский ритейлер, одна из самых стремительно развивающихся торговых сетей в стране
В начале 2021 года крупный ритейлер пришел в LACHESTRY сразу с несколькими задачами. Первым большим направлением развития интернет-магазина стала оптимизация импорта продуктов из PIM.
1. Вводная задача от заказчика, проблематика, цели
В начале 2021 года ритейлер пришел в LACHESTRY сразу с несколькими задачами.
Первым большим направлением развития интернет-магазина стала оптимизация импорта продуктов из PIM, основными целями которого были:
- Увеличить пропускную способность (для начала в 2 раза, но забегая вперед — мы сделали в 4!).
- Как следствие — ускорить доставку продукта до полки интернет-магазина.
- Сделать импорт более стабильным (с возможностью валидации и просмотра истории импортируемых данных).
2. Описание реализации кейса и творческого пути по поиску оптимального решения
Этапы реализации проекта
1. Анализ и проектирование. Было принято решение сначала проанализировать текущую интеграцию через REST запросов в Magento API. В старой реализации использовался импорт продуктов через RESTful API Magento, что автоматически накладывало большие ограничения как на пропускную способность импорта, так и на его стабильность в целом.
Так же было замечено, что в глубине интеграции использовалась обычная функциональность импорта Magento, который из коробки заточен только на редкие обновления пакетами из файла, но никак не подходит для регулярного обновления/добавления продуктов запросами REST.
Бенчмарки импорта:
- Простой продукт, добавление — 2 с
- Простой продукт, обновление — 1.5 с
- Сложный продукт, добавление — 8 с
- Сложный продукт, обновление — 6 с
Под сложным продуктом понимается конфигурируемый, состоящий из нескольких простых. Например, духи могут быть 30 ml, 50 ml и 100 ml — это всё один конфигурируемый товар из нескольких простых.
2) Повышение отказоустойчивости путем перевода на асинхронный импорт.
Первым шагом оптимизации стал отказ от синхронного подхода с REST в сторону асинхронного через очереди Kafka. Это позволило нам иметь возможность просмотра истории сообщений, повторно переимпортировать нужные сообщения (пришедшие из других систем данные), что сильно подняло стабильность — вероятность утраты данных стала близка нулю.
Также команда LACHESTRY внедрила батчинг (пакетную обработку) сообщений, чтобы импорт Magento получал продукты в привычном ему виде. В итоге получили прирост в 70 %, что уже больше целевого прироста оптимизации, поставленного изначально.
3) Отказ от стандартного импорта и перевод его на точечные импорты напрямую в базу данных (ускорение на 400 %)
Следующим шагом стал отказ от Magento-импорта и переход на импорт прямыми запросами в базу, так как в самой Magento реализовано очень много дополнительной логики и проверок, которые не нужны клиенту. Была полностью переписана интеграция простых продуктов и логика обновления конфигурируемых. В итоге получили суммарный прирост на 400 % относительно старого решения.
- Новые бенчмарки импорта:
- Простой продукт, добавление — 1 с
- Простой продукт, обновление — 200-300 мс
- Сложный продукт, добавление — 3 с
- Сложный продукт, обновление — 300-500 мс
4) Реализация полного маппинга контракта из PIM с атрибутами в Magento. С созданием опций атрибутов и брендов на лету (порядка 200 новых значений ежедневно при общем количестве ~200.000).
Следующей задачей бизнеса стало автоматическое создание и маппинг атрибутов в процессе импорта, чтобы не было необходимости создавать их вручную — система Magento самостоятельно определяет, какие атрибуты поступили с импортом. Эта потребность возникла из-за появления большего количества потребителей данных из PIM. Ответственность за подготовку данных перешла на потребляющие системы, и Magento не стала исключением.
Разработчики LACHESTRY реализовали удобный маппинг, позволяющий сопоставить любой приходящий контракт с любым списком атрибутов с теми, что созданы в Magento. Сам маппинг отрабатывает за 30 мс каждое приходящие сообщение из Kafka.
В результате работы этого решения в Magento, по данным на январь 2024 года, создано порядка 200.000 новых опций атрибутов и прирост каждые сутки порядка 500.
5) Мгновенная актуализация витрины из DAX 365
Последним этапом погружения в работу продуктов в системе стала актуализация витрины интернет-магазина. После общения с рядом сотрудников контент-направления клиента специалисты LACHESTRY выяснили, что включение продуктов сейчас никак не зависит от наличия остатков, цен, ассортимента и т.д. и, в основном, происходит в ручном режиме, что сильно увеличивает вероятность человеческой ошибки и попадания некорректных продуктов на витрину.
В рамках задачи по актуализации разработчики перевели все импорты из DAX (цены, ассортименты и стоки) на очереди из Kafka, что улучшило стабильность системы работы с продуктами. Также реализовали включение продуктов по триггерам, чтобы полностью автоматизировать этот процесс при появлении необходимых данных по товарам.
Теперь время включения продукта, готового к продажам, измеряется секундами, а не днями в случае ручного введения информации.
3. Результаты сотрудничества
В результате внедренных решений ритейлер значительно улучшил работу интернет-магазина. Пропускная способность импорта продуктов была увеличена в 4 раза, что ускорило доставку товаров на витрину. Импорт стал более стабильным благодаря переходу на асинхронные процессы через Kafka, а отказ от стандартного импорта в пользу прямых запросов в базу данных привел к ускорению операций на 400%.
4. Заключение
Также была реализована автоматическая актуализация атрибутов и мгновенная интеграция с DAX 365, что позволило сократить время появления товаров на витрине до нескольких секунд.