Мы занимаемся разработкой и техподдержкой сервиса Apteka.ru в течение 7 лет. За это время выполнено около 2300 задач! Объем работ настолько большой, что проанализировать все — тот еще челлендж. Но мы постарались систематизировать свой опыт, чтобы поделиться им с коллегами. Расскажем о решениях, которые помогли сделать сервис интернет-аптекой №1 в России – и по обороту, и по времени пребывания пользователей на сайте.
Apteka.ru — федеральный сервис по поиску и бронированию лекарств и товаров для здоровья, проект крупного фармацевтического дистрибьютора Рунета АО НПК «Катрен». В 2018 году на долю сайта приходился 31% от общего объема продаж онлайн-аптек. Согласно рейтингу АКИТ, он входит в ТОП-10 по количеству заказов среди всех российских интернет-ресурсов.
На протяжении 7 лет сервис ежегодно удваивал свои показатели, в 2019 году рост ускорился. По итогам 2019 года товарооборот Apteka.ru вырос на 171% и превысил 34 млрд руб., а число заказов увеличилось в 2,7 раза. Сейчас на площадке оформляется свыше 2 млн заказов в месяц.
В ассортименте Apteka.ru — до 28 000 наименований 840 российских и зарубежных брендов. Сервис работает строго в рамках закона. Клиент делает заказ на сайте, информация о нем поступает в систему, оперативно обрабатывается – и товар отправляется в выбранную аптеку.
С развитием проекта цели и задачи заказчика менялись. Условно их можно разделить на три этапа.
Сайт — стандартный интернет-магазин на CMS 1С-Битрикс. Функционал прост – продемонстрировать каталог товаров и реализовать схему их выкупа через розничные точки партнеров.
За первый год развития проекта товарооборот увеличился в 36 раз. Вырос трафик на сайт, возникла необходимость в повышении конверсии, использовании новых способов стимулирования продаж. Сервис стал превращаться в крупный ритейл-проект, а это требовало более сложной разработки с привлечением нестандартных инструментов.
Основной целью стало создание стабильно функционирующего интернет-магазина, который приносит компании прибыль благодаря сотрудничеству с поставщиками и аптеками.
Совместно с заказчиком мы сформулировали основные задачи:
При этом сайт должен был отвечать следующим критериям:
К 2017 году сервис стал одним из лидеров в своем сегменте и единственным специализированным ресурсом в области медицины и здоровья в топ-30 крупнейших российских сайтов по объему продаж. С этого момента было важно удержать, а затем и усилить позиции.
На первый план вышли новые задачи:
Интеграция с системой учета
Мы настроили связь с внешней системой учета заказчика – SAP Business Explorer (BE). Необходимо было добиться постоянного динамического обновления информации в «1С-Битрикс: Управление сайтом», чтобы на сайте всегда были актуальные сведения.
Интеграцию пришлось писать с нуля. Мы получили готовый протокол межсетевого взаимодействия со стороны BE. Под него разработали взаимодействие на своей стороне: обработку пакетов (сформированных блоков данных), приходящих от BE, и их отправку в систему учета.
Потом возникла сложность – количество пакетов выросло настолько, что мы не успевали их отправлять. Чтобы ускорить процесс, внедрили брокер сообщений RabbitMQ. Он помог существенно повысить производительность отправки пакетов и масштабировать эту процедуру. Теперь, если возникнет необходимость отправить большое количество пакетов, можно легко увеличить количество воркеров, и они справятся с возросшей нагрузкой.
Кастомизация ценообразования
Типовое ценообразование интернет-магазина не могло удовлетворить все потребности заказчика. По запросу мы написали кастомизированную программу ценообразования, которая обладает более высокой производительностью, учитывает особенности самого проекта, а также взаимодействия с системами учета и ценообразования клиента. Цена конкретного товара для каждого пользователя рассчитывается индивидуально в зависимости от его клиентской истории и других параметров.
Доработка коробки Битрикс
Изначально сервис Apteka.ru разрабатывался на Битрикс, так как это решение было оптимальным для интернет-магазина — коробочная версия позволяет быстро запустить сайт.
Однако есть и недостаток – система настраивается в довольно узком диапазоне, ее сложнее кастомизировать под задачи проекта. Поэтому при масштабировании потребовалась разработка расширенной программной архитектуры.
Apteka.ru предлагает множество товаров с разными наименованиями и свойствами, что усложняло фильтрацию и поиск, замедляло работу сайта. Пришлось провести большую работу с базами данных и добавить новый функционал для разработки модулей. В частности, мы:
В числе последних разработаны модули:
Интеграция с картами Яндекса
Чтобы максимально упростить процедуру заказа лекарства, заказчик предложил использовать API сервиса Яндекс.Карты. Система автоматически определяет местоположение пользователя и выгружает карту с ближайшими доступными для доставки аптеками. Учитывая, что в базе проекта Apteka.RU более 80 000 аптек, это решение было оптимальным.
Оптимизация поиска в 3 этапа
Много времени мы уделили оптимизации поиска — основного инструмента привлечения пользователей на сайт. На старте проекта выполнили ряд внутренних доработок сервиса для повышения релевантности поисковой выдачи.
Встроенный в CMS поиск быстро перестал справляться с поступающими запросами. Мы установили и настроили поисковый движок Sphinx, который тогда отличался хорошей производительностью. Сервис поиска стал работать быстро и безотказно.
Однако через несколько лет текущая версия Sphinx уже не так активно поддерживалась разработчиками, из-за чего не обеспечивала нужной стабильности работы. А главное – чтобы реализовать новый функционал, который требовался заказчику, пришлось бы создавать кучу «костылей». Несколько раз из-за неполадок в поисковом движке возникали проблемы с доступностью сайта. Мы оперативно внесли доработки для бесперебойной работы сервиса. Но стало понятно – это не выход.
Решили перейти на Elastic Search – более современный движок с открытым кодом. Его преимущества – более стабильная работа, высокая производительность, а также расширенные возможности пользовательского поиска.
Когда сайт был запущен, для его работы хватало одного сервера. Посещаемость быстро начала расти. Первое время мы справлялись с нагрузкой, просто выполняя оптимизации кода и SQL-запросов. Причем удавалось добиться хорошего роста производительности.
Но потом этот ресурс был исчерпан. Возможностей для оптимизации кода становилось все меньше. Тогда мы перенесли часть сервисов (в частности, базу данных) на другие серверы. Какое-то время такая конфигурация работала, потом этого тоже стало недостаточно.
Мы начали масштабировать отдельные сервисы. Вместо одного сервера добавили несколько php-серверов и организовали балансировку нагрузки между ними. Тот же принцип использовали при масштабировании базы данных – разделили ее на несколько баз, нагрузка между которыми балансируется.
На старте проекта для обработки запросов мы использовали веб-сервер Apache. Но он плохо работал при высоких нагрузках. Тогда мы настроили веб-сервер на базе технологий Nginx + Php-Fpm, после чего работа сайта стала намного стабильнее и производительнее.
Посещаемость сервиса растет. В 2019 году были достигнуты рекордные показатели за всю его историю. В месяц интернет-магазин посещают более 11 млн пользователей.
Чем популярнее становился сервис, тем чаще на него устраивали DDoS-атаки. Мы были к этому готовы: постоянно увеличивали серверные мощности, развивали серверную архитектуру. Удалось увеличить отказоустойчивость за счет перераспределения нагрузки и взаимозаменяемости серверов.
При массированных DDoS-атаках мы блокировали запросы с IP-адресов из других стран. Кроме того, в ноябре 2019 года подключили сервис DDoS-Guard для автоматизированной защиты от ботов. Это позволило значительно улучшить защиту от хакерских атак.
Функционал сервиса с каждым годом расширялся. Возникали новые требования к производительности, качеству кода, сопровождаемости, читабельности. Для решения этих задач мы применяли два способа:
Приведем пару примеров:
Иногда сложнее всего было убедить заказчика сделать выбор в пользу конкретного решения. Для этого нужна проактивная позиция – обосновать свое мнение, показать конкретные выгоды. В итоге мы действуем в интересах клиента — помогаем сэкономить бюджет, предостерегаем от внедрения заведомо неэффективных решений. Заказчик начинает это ценить и доверять нашим рекомендациям.
Мы создали площадку для эффективного масштабирования проекта. Выполнили комплекс работ по SEO-оптимизации, технической реализации маркетинговой активности, разработке интерфейса. Внедрили решения по расширению серверной архитектуры и техподдержке высоконагруженного проекта.
Это способствовало достижению бизнес-результатов заказчика. Сегодня Apteka.ru — единственный специализированный интернет-магазин, который получает заказы в количестве, соизмеримом с крупнейшими маркетплейсами. По данным Data Insight, в первом полугодии 2019 года сервис вошел в тройку лидеров по динамике роста наряду с Wildberries и Ozon.ru, а также стал сервисом №1 по трафику среди аптечных сетей.
Apteka.ru многократно получала высокую оценку профессионального сообщества и завоевывала престижные отраслевые премии. Последние награды 2019 года: