NDA
Электронная коммерция
Россия
Апрель 2023
Автоматизировать синхронизацию товаров между разными цифровыми системами концепт-стора и маркетплейс-платформы AIZEL
— С чем пришёл заказчик
Изначальная картина - это два независимых сервиса: интернет-магазин на Shopify и ERP система. Необходимо было разработать двухстороннюю интеграцию между этими двумя системами, чтобы изменения в одной отражались в другой.
— В чём была сложность
Тезисно:
• Ограничения Shopify на кол-во запросов в секунду
• Возможные коллизии при одновременных изменениях в двух системах
• Важность стабильности и высокого аптайма системы
Всё остальное было достаточно тривиальным, обычные CRUD операции и механизмы аутентификации и авторизации, вёрстка и её интеграция с бекендом.
— Ограничения Shopify и стабильность
Во-первых, всю обработку веб-хуков мы выводили в отдельные потоки и моментально отдавали 200-ый ответ.
Во-вторых, мы формировали очередь запросов на обработку, которая хранилась в базе данных.
— Таким образом мы:
• Избавлялись от таймаут ошибок, когда нам нужно было долго обрабатывать запросы, например, из-за ретраев
• При возникновении ошибок не теряли данные запросов и могли восстановить их обработку из очереди
— Транзакционность
Нам было крайне важно обеспечить корректность отображаемых данных в разных системах. Мы старались придерживаться принципов ACID, но всё осложнялось тем, что у нас не было возможности изменять код систем, которые непосредственно вносили изменения в базы данных.
— Несмотря на это, мы смогли обеспечить актуальность данных следующим образом:
1. Atomicity
На каждое действие мы формировали и сохраняли roll-back последовательности. Это включало в себя и http запросы к Shopify или ERP и откаты локальной базы данных коннектора.
2. Consistency
Нетривиальными алгоритмами обеспечивали целостность базы данных. Не только проверяли банальности вроде невозможности вставить отрицательное значение в поле количества товара, но и в общем обеспечили возможность отменять невозможные заказы, например, когда в одной системе товар уже закончился, а в другой эти изменения ещё не появились.
3. Isolation & Durability
Изолированность и надёжность обеспечили при помощи очередей, алгоритм которых был описан выше. Тут, конечно, полноценной имплементации подходов не получилось, так как, например, в системах было доступно то же самое "грязное чтение", но в рамках технических ограничений, это лучшее, чего мы могли достичь.
Был разработан сервис, синхронизирующий базу данных Aizel с магазином на Shopify через их API.
KapDEV с удовольствием обсудит вашу задачу