Онлайн-сервис для сравнения цен на экипировку
Кастомная разработка на Drupal, которая помогла сократить время на обновление данных в два раза, повысить производительность сайта и настроить его систему восстановления после атак.
О клиенте и проекте
Сервис WeighMyRack помогает любителям активного отдыха искать и сравнивать характеристики снаряжения: касок, обвязок, верёвок, карабинов, страховок, обуви и одежды.

Площадка даёт возможность:

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

Мы познакомились с владельцами WeighMyRack, когда они были в поиске новой команды, которая хорошо разбиралась бы в Drupal и была бы готова заняться поддержкой и доработкой платформы — предыдущее агентство, с которыми они работали, закрылось.
Главная страница
Задачи
— Подключить к площадке 10 новых фидов (инструментов онлайн-торговли, которые передают на сайт информацию о новых товарах и обновляют данные о старых).
— Разобраться со взаимодействием двух серверов, которые использует сайт.
— Поправить UI, например, наладить отображение скидок и фильтрацию товаров по размеру скидки.
— Улучшить скорость и производительность сайта по показателям PageSpeed Insights.
— Обновить Drupal и контрибные модули.
— Исправить имеющиеся баги.
Поиск по товарам с обновленной системой фильтров
Решения
Настройка системы серверов
На проекте использовалось два сервера: main-сервер, на котором лежат контент сайта и который обслуживает пользователей, и sync-сервер, который обрабатывает фиды ритейлеров. Два сервера связаны через Jenkins API.

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

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

Мы также настроили Monit — систему для мониторинга и автоматического перезапуска процессов. Она же, кстати, помогает при DDoS-атаке: если MySQL, Apache или httpd не отвечают в течение трёх минут, Monit перезапускает соответствующий процесс или сервис, и сайт возвращается в норму.
Страница сравнения экипировки
Добавление и обновление фидов продавцов
Изначально к сайту было подключено всего два продавца. Обновление фидов запускалось по очереди в определённое время. Как только оба импорта завершались, мы сливали изменения баз данных sync-сервера и main-сервера.

Обновление двух фидов занимало в среднем 3–5 часов. Но сайт рос, мы добавляли ритейлеров, и со временем импорт стал занимать больше 24 часов. Чтобы решить проблему, мы стали запускать их обновление параллельно. Конечно, сразу возникли проблемы, потому несколько Drupal-запросов пытались получить доступ к одним и тем же данным.

Но Drupal просто перезаписывал изменения, сделанные параллельными импортами. Так, например, при тестировании из 1000 товаров обновлялось только 500–600.Тогда мы реализовали механизм блокировки: он не дает запросам перебивать друг друга. В результате мы снизили общее время обновления всех фидов в два раза: с 26–28 часов до 12–15 часов.
Страница товара
Обновление Drupal-модулей
Мы обнаружили на сайте девять контрибных модулей, в которые были внесены функциональные изменения. Их необходимо было обновить, но был шанс, что части сайта, за которые они отвечали, перестанут работать после обновления. Мы почистили модули от неправильного кода ровно настолько, чтобы можно было обновить сайт и не разрабатывать его с нуля.
Оптимизация скорости загрузки
Раньше Google Insights показывал 1–2 балла из 100, сейчас этот показатель улучшился в несколько раз за счёт оптимизации сервера, агрегации CSS и JavaScript и внедрения ленивой загрузки (lazy load) на тяжёлых страницах.
Результаты
  • Подключено более 10 дополнительных онлайн-магазинов.
  • Время на обновление данных сокращено в два раза.
  • Настроена система синхронизации серверов и система восстановления сайта после атак.

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