В ходе технической поддержки одного из крупных клиентов со сложной архитектурой баз данных мы столкнулись с серьезной проблемой: нестабильная работа скриптов и cron-заданий приводила к неактуальности данных по остаткам и ценам товаров, что отрицательно сказывалось на корректности информации, отправляемой на маркетплейсы.
Архитектура клиента включала сложную систему обмена данными о новых товарах, остатках, ценах и других атрибутах товарного каталога.
Основные факторы сложности проекта:
- Наличие внутренней учетной системы, аналогичной 1С, через которую информация о товарах поступает на внутренний сайт и в базу данных, а затем распространяется на несколько сайтов для продаж;
- Необходимость актуализации большого объема информации на сайтах;
- Обширный каталог активных товаров, насчитывающий около 200 тысяч наименований.
Изначально для решения проблемы была разработана система скриптов, которые по установленному расписанию формировали и запускали фиды с необходимой информацией.
Помимо скриптов, которые требовали проверки вручную, на проекте выполняется множество других cron-задач, работающих одновременно с обменом товарами.
Работа скриптов осуществлялась на фоне постоянных активных процессов на сайте, таких как заливка новых товаров, запуск распродаж и регулярные DDoS-атаки со стороны конкурентов. Из-за нагрузки на систему некоторые cron-задания выполнялись дольше, чем запланировано, в моменты, когда результат одного задания уже был необходим другому. Это приводило к наслоению скриптов и частым ошибкам выполнения, иногда без уведомлений.
В ответ на эти вызовы наша команда предприняла системный подход:
- Провели инвентаризацию скриптов;
- Оптимизировали структуру, уточнив их необходимость и исключив дублирование;
- Создали диаграмму Ганта;
- Обсудили первоначальный план оптимизации в команде разработчиков;
- Реализовали первичные оптимизации и распределение скриптов без временных пересечений;
- Изменили структуру базы данных, доработали скрипты и расширили серверные мощности;
- После тестирования гипотез провели еще один мозговой штурм;
- Исследовали программное обеспечение, сравнили варианты и проконсультировались с Заказчиком;
- Начали разработку и тестирование собственного продукта;
- Пока проводились тесты, поддерживали систему в режиме ручного контроля без автоматизации;
- Постепенно перешли с консольных заданий на Cron-manager и осуществляли отладку;
- Получив первый пользовательский отзыв, улучшили интерфейс для удобства работы и собрали запросы на усовершенствование функционала;
- В течение первого года внедрения тестировали и улучшали функциональность и юзабилити;
- Главный итог — мы поняли, что победили проблему, когда почти прекратили получать обратную связь о неактуальности данных и некорректной работе скриптов: они просто работают и создаются!
- Наша партнерство длится уже более 5 лет; заказчик доверяет нам, зная, что мы всегда решим его задачи и найдем выход, даже если потребуется разработать новый сервис.
А о том, что это за продукт и как он обеспечил надежную и качественную работу системы обмена информацией, снизив количество ошибок и повысив оперативность обновлений, читайте в следующих постах.