Workspace Digital Awards 2025 — успейте номинировать кейсы по льготной цене до 1 декабря. Принять участие!
#Сайт под ключ

Aizel

193 
KapDEV
KapDEV Россия, Москва
Поделиться:
Aizel
Клиент

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.


Стек технологий

  • Python Python Язык программирования
  • Flask Flask Фреймворк/библиотека

Выскажите мнение
Авторизуйтесь, чтобы добавить свой комментарий.
оставить заявку

Хотите заказать похожий проект?

KapDEV с удовольствием обсудит вашу задачу

Оставить заявку