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

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.
Мы занимаемся разработкой и техподдержкой сервиса Apteka.ru в течение 7 лет. За это время выполнено около 2300 задач! Объем работ настолько большой, что проанализировать все — тот еще челлендж. Но мы постарались систематизировать свой опыт, чтобы поделиться им с коллегами. Расскажем о решениях, которые помогли сделать сервис интернет-аптекой №1 в России – и по обороту, и по времени пребывания пользователей на сайте.

image

Клиент


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. До этого данные хранились в мобильном приложении автономно, что мешало оперативно вносить изменения. Например, на сайте цена товара уже изменилась, а в приложении – еще нет. Теперь бэкенд корзины хранится на сервере и одинаково доступен как для мобильной, и для десктопной версии.

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

image

Результаты


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

Это способствовало достижению бизнес-результатов заказчика. Сегодня Apteka.ru — единственный специализированный интернет-магазин, который получает заказы в количестве, соизмеримом с крупнейшими маркетплейсами. По данным Data Insight, в первом полугодии 2019 года сервис вошел в тройку лидеров по динамике роста наряду с Wildberries и Ozon.ru, а также стал сервисом №1 по трафику среди аптечных сетей.

image

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

  • Первое место в рейтинге самых часто используемых провизорами профессиональных сайтов (по данным опроса сотрудников аптек аналитической компанией Ipsos).
  • Диплом лауреата фармацевтической премии «Зеленый крест» в номинации «Лучшая система заказа и бронирования».
Источник: https://habr.com/ru/post/505104/


Интересные статьи

Интересные статьи

WubbaLubbaDDubub дорогой читатель. В этой статье я хочу вам рассказать о своем опыте в ремонте цифровой электроники, почему начал и из-за чего забросил.Сдесь будет нагляд...
Бизнес-смыслы появились в Битриксе в начале 2016 года, но мало кто понимает, как их правильно использовать для удобной настройки интернет-магазинов.
Предлагаем вашему вниманию подборку с ссылками на новые материалы из области фронтенда и около него.
Пока Google готовил глобальное обновление для русскоязычного Ассистента – с новыми голосами, блэкджеком и встроенными оплатами, мы решили создать для него собственную игру. Мы экспериментировали ...
История первая. Роковые буквы [Оригинал] Когда-то давно Джордж устроился работать в офис Initech. Компания только что арендовала несколько этажей в старом офисном здании, недавно перешедшег...