Кейс: Оптимизация системы обмена информацией для крупного клиента

Автор: Степан Чельцов

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

Архитектура клиента включала сложную систему обмена данными о новых товарах, остатках, ценах и других атрибутах товарного каталога.

Основные факторы сложности проекта:

  • Наличие внутренней учетной системы, аналогичной 1С, через которую информация о товарах поступает на внутренний сайт и в базу данных, а затем распространяется на несколько сайтов для продаж;
  • Необходимость актуализации большого объема информации на сайтах;
  • Обширный каталог активных товаров, насчитывающий около 200 тысяч наименований.

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

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

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

В ответ на эти вызовы наша команда предприняла системный подход:

  1. Провели инвентаризацию скриптов;
  2. Оптимизировали структуру, уточнив их необходимость и исключив дублирование;
  3. Создали диаграмму Ганта;
  4. Обсудили первоначальный план оптимизации в команде разработчиков;
  5. Реализовали первичные оптимизации и распределение скриптов без временных пересечений;
  6. Изменили структуру базы данных, доработали скрипты и расширили серверные мощности;
  7. После тестирования гипотез провели еще один мозговой штурм;
  8. Исследовали программное обеспечение, сравнили варианты и проконсультировались с Заказчиком;
  9. Начали разработку и тестирование собственного продукта;
  10. Пока проводились тесты, поддерживали систему в режиме ручного контроля без автоматизации;
  11. Постепенно перешли с консольных заданий на Cron-manager и осуществляли отладку;
  12. Получив первый пользовательский отзыв, улучшили интерфейс для удобства работы и собрали запросы на усовершенствование функционала;
  13. В течение первого года внедрения тестировали и улучшали функциональность и юзабилити;
  14. Главный итог — мы поняли, что победили проблему, когда почти прекратили получать обратную связь о неактуальности данных и некорректной работе скриптов: они просто работают и создаются!
  15. Наша партнерство длится уже более 5 лет; заказчик доверяет нам, зная, что мы всегда решим его задачи и найдем выход, даже если потребуется разработать новый сервис.

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