Офлайн-продажи росли, онлайн-канал падал. Онлайн-канал приносил десятки миллионов рублей в год. Офлайн рос, онлайн падал.

Подрядчики предлагали заменить платформу. Самое дешёвое предложений начиналось от 8 млн рублей.

Я предложил не начинать с новой CMS. Аудит показал, что клиент терялся не из-за дизайна витрины. Основная проблема находилась в обмене данными между 1С и сайтом.

88% брошенных корзин

Интернет-магазин обслуживал около 100 торговых точек и каталог более чем из 100 тыс. товаров.

Доля брошенных корзин достигала 88%. Отраслевая норма для этого сегмента — 55–65%. Невыкуп заказов также был примерно на 50% выше рыночного ориентира.

Клиенты регулярно сталкивались с расхождениями. Товар числился на сайте, но отсутствовал в выбранной точке. Или наоборот: в магазине товар был, а сайт его не показывал. Цена на витрине могла отличаться от цены в торговой точке.

Сайт тормозил так, что оформление одного заказа занимало до 20 минут.

Особенно болезненно это проявлялось во время рекламы и специальных предложений. Маркетинг приводил дополнительный трафик, но сайт мог почти перестать продавать именно в момент повышенного спроса.

Пять часов на обновление данных

Действующий механизм обмена был построен на стандартных возможностях CMS и позже доработан под задачи компании.

Каждое утро система загружала полный массив остатков и изменения цен за предыдущий день. Основную обработку выполняла сама CMS: принимала данные, сравнивала их с текущим состоянием и обновляла рабочие таблицы, из которых сайт одновременно обслуживал покупателей.

На каталоге более чем из 100 тыс. товаров и примерно 100 торговых точках такая обработка могла занимать до пяти часов.

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

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

У медленного сайта, неверных остатков и расхождений цен оказался один источник: обработка полного объёма данных шла внутри рабочего контура интернет-магазина.

Частичные доработки страниц эту проблему не решили бы.

События вместо полного справочника

Обработку вынесли на отдельный сервер с промежуточной базой данных. Интеграцию реализовали на RabbitMQ и Python.

После изменения цены или остатка 1С сразу публиковала событие в RabbitMQ. Брокер доставлял сообщение подписанному обработчику на Python.

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

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

Вся вычислительная нагрузка перешла на отдельный сервер. Сайт больше не сравнивал сотни тысяч записей во время работы покупателей. Он только отображал подготовленные данные.

Отдельно предусмотрели обработку ошибок. Если пакет не проходил, система повторяла попытку до трёх раз. После третьей ошибки сообщение направлялось в DLQ, а специалист получал уведомление и логи для ручного разбора. Для контроля доставки использовались подтверждения обработки сообщений.

Полная обработка справочника стала занимать менее пяти минут вместо нескольких часов. Ежедневные изменения начали попадать на сайт сразу после появления в 1С, а ежемесячная загрузка перестала выводить интернет-магазин из нормальной работы почти на весь день.

Стоимость всей реализации составила около 300 тыс. рублей. Предложения от 8 млн рублей предполагали замену платформы целиком и решали более широкий круг задач. Для восстановления онлайн-продаж такая миграция в тот момент не требовалась.

Результат за два месяца

Через два месяца после запуска:

  • доля брошенных корзин снизилась с 88% до 70% - на 18 процентных пунктов;
  • доля завершённых корзин выросла с 12% до 30% - в 2,5 раза;
  • абсолютная выручка сайта увеличилась на 20%;
  • полная обработка справочника сократилась с пяти часов до менее чем пяти минут;
  • сайт перестал выпадать из нормальной работы во время полных загрузок.

Результат сравнивали с предыдущими месяцами и год к году, чтобы учесть сезонность. Других существенных изменений в работе онлайн-канала в этот период не было.

Речь шла о выручке в десятки миллионов рублей в год. При стоимости проекта около 300 тыс. рублей решение окупилось в первый месяц.

У нового контура была своя цена. Обмен требовал мониторинга, контроля полноты данных и владельца процесса. Архитектурные ограничения CMS также никуда не исчезли, и при дальнейшем росте вопрос её замены мог вернуться.

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

Редизайна не было. Сайт просто перестал мешать клиенту купить.