Авторизация
Сброс пароля
Сайт для сравнения цен на экипировку для скалолазания WeighMyRack
Заказчик: WeighMyRack
Страница кейса/результат: https://weighmyrack.com/
Требовалось масштабировать импорт товаров за счёт подключения более 10 дополнительных фидов, провести рефакторинг кода, обновить CMS, устранить баги из имеющейся функциональности, улучшить производительность и интерфейс.
1. Вводная задача от заказчика, проблематика, цели
Компания WeighMyRack позиционирует себя как прайс-площадку с возможностью для сравнения цен между товарами. WeighMyRack не является магазином сам по себе и зарабатывает на процентах с продаж, совершаемых пользователями, перешедшими с прайс-площадки на сайт производителя скалолазного снаряжения.
Перед нами стояла задача масштабировать импорт за счёт подключения более 10 дополнительных фидов, сделать рефакторинг кода, обновить CMS, устранить баги из имеющейся функциональности, улучшить производительность сайта и интерфейс.
2. Описание реализации кейса и творческого пути по поиску оптимального решения
Новая функциональность
Ключевая функциональность сайта собрана на страницах с категориями товаров. Здесь пользователь может:
- найти нужный товар, фильтруя его по бренду, цене, цвету, форме, размеру, весу, полученных наградах и скидках;
- сравнить цену на товары в разных магазинах;
- оставить отзыв;
- добавить товар в свой список;
- добавить товар в вишлист;
- продолжить покупку, перейдя с сайта WeighMyRack в любой онлайн-магазин.
С помощью Drupal-модуля Facet API мы сделали несколько новых фильтров, использующих информацию о товарах (страна магазина, который продает товар, скидки и т. п.) из .csv или .txt-файлов (т. н. фидов).
Рефакторинг кода
Мы почистили модули от неправильного кода ровно настолько, чтобы можно было обновить сайт и не разрабатывать его с нуля.
Бэкап данных
У нас уже был настроен модуль backup_migrate, делающий бэкапы на сервере раз в день по таймеру, а также имелись еженедельные бэкапы на хостинге Digital Ocean. Но этого было мало, и мы написали скрипт, который делает ежедневные бэкапы данных перед началом очередного импорта и записывает их в бэкап-хранилище на удалённом сервере с отладочным сайтом.
Это позволяет работать в унисон с базой данны двум серверам — main (для обработки пользовательских запросов) и sync (для импорта данных). Использование одного сервера привела бы к слишком долгой загрузке сайта. Поэтому один сервер используется для монотонной вычислительной работы, а другой — для работы со спонсорами.
Ускорение обновления данных
Изначально сайт импортировал информацию о товарах с двух сайтов, что занимало 3-5 часов при последовательной обработке фидов. Но после добавления других источников время полного импортирования увеличилось до 24 часов. Чтобы снизить время, мы настроили параллельную обработку фидов и встроили lock mechanism, который не даёт вносить изменения на страницах с товарами сразу нескольким потокам данных, а заставляет ждать, пока не закончит импортирование один поток.
Защита от DDoS-атак
Мы установили систему для мониторинга и возобновления процессов Monit. Благодаря ей тот или иной процесс или сервис перезапускался спустя 3 минуты после того, как MySQL, Apache или httpd переставали отвечать, и сайт продолжал работать нормально — удобно, если DDoS-атака производится ночью.
Ускорение загрузки сайта
До нашего участия PageSpeed Insights показывал 1-2 из 100 на подавляющем большинстве страниц. Сейчас сайт откликается и грузится в разы быстрее прежнего — помогли оптимизация сервера, подключение агрегации css/js и использование технологии Lazy Load для особо тяжелых страниц.
3. Результаты сотрудничества
Выросли показатели сайта в Google Speed Insights и, как следствие, его производительность. За счёт увеличения числа подключенных магазинов и новых фильтров сайт стал ценнее для пользователей. Обновления данных о товарах ускорилось в два раза.
4. Заключение
Мы сохраняем отношения с клиентом и разрабатываем новую функциональность.