Как Мы Разработали Сервис, Который Вошел В Топ-5 Крупнейших Аптечных Сайтов Мира

Мы занимаемся разработкой и технической поддержкой сервиса Apteka.ru уже 7 лет. За это время было выполнено около 2300 задач! Объем работы настолько велик, что проанализировать все – довольно сложная задача.

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

Давайте поговорим о решениях, которые помогли сделать сервис интернет-аптекой №1 в России – как по обороту, так и по времени, которое пользователи проводят на сайте.



Как мы разработали сервис, который вошел в топ-5 крупнейших аптечных сайтов мира



Клиент

Apteka.ru — федеральный сервис по поиску и бронированию лекарств и товаров для здоровья, проект крупного фармацевтического дистрибьютора в Рунете АО «НПК «Катрен».

В 2018 году на сайт пришлось 31% от общего объема продаж интернет-аптек.

По рейтингу АКИТ входит в ТОП-10 по количеству заказов среди всех российских интернет-ресурсов.

На протяжении 7 лет сервис ежегодно увеличивал свои показатели вдвое, а в 2019 году рост ускорился.

По итогам 2019 года оборот Apteka.ru увеличился на 171% и превысил 34 млрд рублей, а количество заказов увеличилось в 2,7 раза.

В настоящее время на сайте размещается более 2 миллионов заказов в месяц.

Ассортимент Apteka.ru включает до 28 000 позиций от 840 российских и зарубежных брендов.

Сервис работает строго в рамках закона.

Клиент оформляет заказ на сайте, информация о нем поступает в систему, оперативно обрабатывается, и товар отправляется в выбранную аптеку.



Цели и задачи: эволюция

По мере развития проекта менялись цели и задачи заказчика.

Условно их можно разделить на три этапа.



Начальная ступень.

Начинать

Сайт представляет собой стандартный интернет-магазин на базе CMS 1С-Битрикс.

Функционал простой — продемонстрировать каталог товаров и реализовать схему их приобретения через партнерские торговые точки.



Вторая фаза.

Масштабирование

За первый год реализации проекта товарооборот увеличился в 36 раз.

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

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

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

Совместно с заказчиком мы сформулировали основные задачи:

  • Улучшенное удобство использования.

  • Внедрение нового функционала.

  • Интеграция с внешней учетной системой.

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

При этом сайт должен был соответствовать следующим критериям:
  • адаптивность для мобильных устройств;
  • время загрузки – не более 2-3 секунд (по состоянию на январь 2020 года – 1,5 секунды для главной страницы).



Третий этап.

Техническая поддержка и оптимизация

К 2017 году сервис стал одним из лидеров в своем сегменте и единственным специализированным ресурсом в сфере медицины и здоровья в топ-30 крупнейших российских сайтов по объему продаж.

С этого момента важно было сохранить, а затем и укрепить свои позиции.

На первый план вышли новые задачи:

  • Обновление сервиса под текущие требования клиентов и рынка.

  • Модернизация стека технологий и рефакторинг кода.

  • Обеспечение стабильной работы высоконагруженного проекта.

  • Редизайн и улучшение интерфейса.



Решения



Масштабирование

Интеграция с учетной системой Мы настроили соединение с внешней учетной системой заказчика – SAP Business Explorer (BE).

Необходимо было добиться постоянного динамического обновления информации в 1С-Битрикс: Управление сайтом, чтобы на сайте всегда была актуальная информация.

Интеграцию пришлось писать с нуля.

Мы получили готовый протокол межсетевого взаимодействия со стороны BE. Для этого мы разработали взаимодействие на своей стороне: обработку пакетов (сгенерированных блоков данных), поступающих от BE, и отправку их в учетную систему.

Потом возникла трудность — количество посылок выросло настолько, что мы не успели их отправить.

Чтобы ускорить процесс, мы реализовали брокер сообщений RabbitMQ. Это помогло существенно улучшить производительность отправки пакетов и масштабировать эту процедуру.

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

Настройка цен Типичные цены интернет-магазина не могут удовлетворить все потребности клиентов.

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

Цена конкретного товара для каждого пользователя рассчитывается индивидуально в зависимости от его клиентской истории и других параметров.

Улучшение коробки Битрикс Изначально сервис Apteka.ru разрабатывался на Битриксе, поскольку данное решение было оптимальным для интернет-магазина – коробочная версия позволяет быстро запустить сайт. Однако есть и недостаток – система настраивается в достаточно узком диапазоне, ее сложнее настроить под задачи проекта.

Поэтому масштабирование потребовало разработки расширенной архитектуры программного обеспечения.

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

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

В частности, мы:

  • Мы использовали контейнер внедрения зависимостей Dependency Injection, на основе которого построили систему модулей — более гибкую, удобную и расширяемую.

  • Мы реализовали компоненты Symfony — шаблонизатор и компонент для создания консольных команд. Это облегчило создание визуальной составляющей проекта, улучшило читаемость кода, а также расширяло и переопределяло шаблоны, не нарушая общий алгоритм.

Среди последних разработанных модулей:
  1. Система отзывов и рейтингов.

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

    Комментарии публикуются на сайте автоматически, но модератор может их редактировать или удалять.

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

  2. Модуль напоминаний для пользователей написан с нуля на PHP. Если клиент заказал препарат, который необходимо принимать курсом, он получит об этом напоминание.

  3. Трекин г – пользователь может отслеживать перемещение заказа на карте и видеть время доставки.

  4. Сервис имеет обширную админ-панель, включающую от 150 до 200 страниц.

    Через него вы можете управлять разными элементами сайта – заказами, пользовательскими данными, товарами, контентом.

Интеграция с картами Яндекс.

Чтобы максимально упростить процедуру заказа лекарств, заказчик предложил использовать API сервиса Яндекс.

Карты.

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

Учитывая, что в базе проекта Apteka.RU более 80 000 аптек, такое решение оказалось оптимальным.

Поисковая оптимизация в 3 этапа Мы уделили много времени поисковой оптимизации – основному инструменту привлечения пользователей на сайт. На старте проекта мы сделали ряд внутренних доработок сервиса для повышения релевантности результатов поиска.

Встроенный в CMS поиск быстро перестал справляться с входящими запросами.

Мы установили и настроили поисковую систему Sphinx, которая на тот момент имела хорошую производительность.

Служба поиска стала работать быстро и без сбоев.

Однако через несколько лет текущая версия Sphinx уже не так активно поддерживалась разработчиками, из-за чего не обеспечивала необходимой стабильности.

А самое главное, чтобы реализовать новый функционал, который требовал заказчик, нам пришлось бы создать кучу «костылей».

Несколько раз из-за проблем в поисковой системе возникали проблемы с доступностью сайта.

Мы оперативно внесли улучшения для обеспечения бесперебойной работы сервиса.

Но стало ясно, что это не выход. Мы решили перейти на Elastic Search, более современный движок с открытым исходным кодом.

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



2. Техническая поддержка

Когда сайт был запущен, для его работы было достаточно одного сервера.

Посещаемость начала быстро расти.

Поначалу мы справлялись с нагрузкой, просто оптимизируя код и SQL-запросы.

Более того, удалось добиться хорошего роста производительности труда.

Но затем этот ресурс был исчерпан.

Возможностей для оптимизации кода было все меньше и меньше.

Потом мы перенесли часть сервисов (в частности, базу данных) на другие сервера.

Эта конфигурация какое-то время работала, но потом и ее стало недостаточно.

Мы начали масштабировать отдельные сервисы.

Вместо одного сервера мы добавили несколько PHP-серверов и организовали балансировку нагрузки между ними.

Тот же принцип использовали при масштабировании базы данных — разделили ее на несколько баз данных, нагрузка между которыми балансировалась.

В начале проекта мы использовали веб-сервер Apache для обработки запросов.

Но при высоких нагрузках он работал плохо.

Затем мы настроили веб-сервер на базе технологий Nginx + Php-Fpm, после чего сайт стал намного стабильнее и производительнее.

Посещаемость службы растет. В 2019 году были достигнуты рекордные показатели за всю его историю.

В месяц интернет-магазин посещают более 11 миллионов пользователей.

Чем популярнее становился сервис, тем чаще на него совершались DDoS-атаки.

Мы были к этому готовы: постоянно увеличивали мощности серверов и развивали серверную архитектуру.

Повысить отказоустойчивость удалось за счет перераспределения нагрузки и взаимозаменяемости серверов.

Во время массовых DDoS-атак мы блокировали запросы с IP-адресов из других стран.

Кроме того, в ноябре 2019 года мы подключили сервис DDoS-Guard для автоматической защиты от ботов.

Это значительно улучшило защиту от хакерских атак.



3. Оптимизация

Функционал сервиса расширялся с каждым годом.

Возникли новые требования к производительности, качеству кода, удобству сопровождения и читабельности.

Для решения этих задач мы использовали два метода:

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

  • Изменение технологического стека или рабочего механизма.

    Если необходимы более радикальные меры, мы предлагаем новые веб-решения.

Приведем пару примеров:
  • Интеграция Doctrine ORM. Раньше для работы с базами данных использовались нативные запросы, SQL-запросы или API Битрикса.

    Doctrine ORM — это своего рода связующее звено между базой данных и кодом для размещения/извлечения созданных объектов из базы данных.

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

  • Логика корзины покупок мобильное приложение перенесено на серверную часть.

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

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

Иногда сложнее всего было убедить заказчика выбрать конкретное решение.

Для этого нужна активная позиция – обосновать свое мнение, показать конкретную выгоду.

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

Заказчик начинает это ценить и доверять нашим рекомендациям.



Как мы разработали сервис, который вошел в топ-5 крупнейших аптечных сайтов мира



Полученные результаты

Мы создали платформу для эффективного масштабирования проекта.

Мы выполнили комплекс работ по SEO-оптимизации, технической реализации маркетинговых мероприятий и разработке интерфейса.

Мы реализовали решения по расширению серверной архитектуры и технической поддержке высоконагруженного проекта.

Это способствовало улучшению бизнес-результатов клиента.

Сегодня Apteka.ru — единственный специализированный интернет-магазин, который принимает заказы в объемах, сопоставимых с крупнейшими маркетплейсами.

По данным Data Insight, в первом полугодии 2019 года сервис вошел в тройку лидеров по динамике роста наряду с Wildberry и Ozon.ru, а также стал сервисом №1 по посещаемости среди аптечных сетей.



Как мы разработали сервис, который вошел в топ-5 крупнейших аптечных сайтов мира

Apteka.ru неоднократно получала высокую оценку профессионального сообщества и завоевывала престижные отраслевые награды.

Последние награды 2019 года:

  • Первое место в рейтинге наиболее часто используемых фармацевтами профессиональных сайтов (по данным опроса сотрудников аптек аналитической компанией Ipsos).

  • Диплом лауреата фармацевтической премии «Зеленый Крест» в номинации «Лучшая система заказа и бронирования».

Теги: #docker #php #symfony #1С-Битрикс #memcached #sphinx #интернет-магазин 1с #1с-Битрикс
Вместе с данным постом часто просматривают: