Главное о кейсе
Разработали ecommerce-платформу, испытывающую экстремальные нагрузки в период запуска новых коллекций и требующий от пользователя моментального оформления заявки.
— Высокая скорость и отказоустойчивость в условиях нагрузки 3000+ запросов и 300+ заказов в секунду.
— Все ключевые функции на одной странице: возможность сделать заказ в 2 клика за пару секунд.
— Работают проверки и ограничения для борьбы с ботами и спекулянтами без ущерба для пользователей.
— Автоматизированы все процессы работы с заказами и заявками, в которых не требуется принятия решения менеджера.
— На порядки увеличилась скорость создания заказов: ранее 300 заказов создавались вручную в течение дня, сейчас тот же объём создаётся автоматически за 1 секунду.
Как проект изменил жизнь пользователей
Пользователи больше не страдают от действий спекулянтов и могут соревноваться за выпущенные ограниченными тиражами коллекционные товары в условиях справедливой конкуренции. Удобный и простой интерфейс позволяет буквально в 2 клика зарезервировать товар на одной странице, сайт работает быстро и безотказно даже в условиях экстра-трафика.
Цитата покупателя после релиза: «Я много раз пробовала раньше, но просто не успевала оформить заказ, а вчера наконец-то впервые смогла купить игрушку!»
Бизнес-задача и ее решение
Ариель — фабрика ёлочных украшений ручной работы, выпускающая коллекции ограниченными тиражами.
В момент запуска новинок всегда возникал спрос, кратно превышающий предложение: на сайт приходили тысячи пользователей, создавая огромную нагрузку (как следствие, ошибки и медленная загрузка), а спекулянты выкупали часть товаров для последующей перепродажи, используя технические средства для опережения обычных коллекционеров — это вызывало негатив и вредило репутации бренда. Кроме того, все заказы обрабатывались вручную, это требовало много времени и ресурсов.
Нам предстояло сделать так, чтобы сайт всегда работал быстро и стабильно, пользователи получали равный доступ к товарам, а все процессы, не требующие принятия решений, выполнялись автоматически.
—----------------------------------------------
Решение
Чтобы решить все задачи бизнеса и обеспечить комфортный пользовательский опыт, мы изучили параметры сайта в пиковые периоды, проанализировали поведение пользователей, оценили возможности для пресечения спекуляций и описали все бизнес-процессы для поиска возможностей их автоматизации.
В результате провели работу по четырём ключевым блокам.
—
Скорость и отказоустойчивость
В момент запуска новинок нагрузка на сайт увеличивается с 0 до нескольких тысяч запросов в секунду: пользователи массово заходят на сайт и часто обновляют страницу + существовал трафик ботов, которые обновляли страницу автоматически и создавали дополнительную нагрузку.
— Реализовали гибридную архитектуру: ключевые нагруженные части API работают на Laravel, при этом у менеджеров клиента есть удобный и функциональный бэкофис от Битрикс для управления пользователями, заказами и товарами.
— Разместили проект в Yandex Cloud. Это решение позволяет оперативно увеличивать мощности в периоды активных продаж и экономить бюджет в период затишья.
— Сформировали рекомендации по фильтрации трафика от ботов.
В результате сервер всегда отвечает стабильно и быстро: при увеличении нагрузки в 1000 раз время ответа сервера увеличивается всего на 20%, что совсем незаметно для пользователя.
—
Борьба со спекулянтами
Опираясь на существующие сценарии поведения спекулянтов, мы внедрили ряд условий, которые ограничили возможности для злоупотреблений и при этом минимально повлияли на нормальный пользовательский опыт.
Среди прочего мы реализовали обязательную авторизацию по номеру телефона с подтверждением через sms (быстрая и привычная процедура для большинства пользователей) и ограничили количество для каждого SKU в заказе — добавить можно не более 1 шт. каждого товара.
Это помогло существенно ограничить возможности спекулянтов и позволило большему количеству частных коллекционеров сделать заказ.
—
Быстрый и удобный интерфейс
В отличие от пользователей большинства интернет-магазинов, клиенты Ариель получали всю исчерпывающую информацию о новинках не на сайте, а в соцсетях ещё до старта продаж. Поэтому роль сайта заключалась только в том, чтобы пользователь мог заказать товар. Процесс должен быть очень быстрым, ведь за каждую позицию большая конкуренция.
— Сделали возможность заранее заполнить контактные данные и адрес доставки для оформления заявки, чтобы пользователь не тратил на это время после старта продаж.
— Реализовали все ключевые функции на одной странице (Главная), разделив её на два блока: блок с товарами и блок с чекаутом. В результате авторизованному пользователю нужно совершить всего 2 клика, чтобы зарезервировать доступный товар: клик на товар и клик на кнопку «Оформить заявку».
— Предусмотрели интерфейс, который снимает стресс пользователя после оформления заявки. В условиях 300+ заявок в секунду формирование заказов требует несколько секунд ожидания, поэтому сразу же после оформления заявки мы
выводим окно с подтверждением «Товары забронированы», в котором пользователь видит подгружающиеся элементы.
— К оплате пользователь переходит уже после подтверждения заявки и может уже в спокойном режиме вводить данные для оплаты в течение отведённого времени.
В результате получился лёгкий интерфейс с упором на функциональность, требующий от пользователя минимум действий для получения результата.
—
Автоматизация бизнес-процессов
Ранее вся работа с заявками и заказами осуществлялась в ручном режиме: изменения статусов, отправка уведомлений и ссылок на оплату, создание заказов на производство, отгрузку, доставку и т.д.
— Мы детально расписали все бизнес-процессы клиента по сценариям и автоматизировали все операции, которые не требуют принятия решения со стороны менеджера. В разных сценариях были автоматизированы:
• Формирование ссылок на оплату и ограничение срока их действия
• Отправка писем со статусами и ссылками на оплату
• Изменение статуса заказа на основе информации о событии (например, истёк лимит времени на оплату или пришёл сигнал о доставке от ПВЗ)
• Передача оплаченных заказов на отгрузку
• Формирование всех документов в зависимости от событий: накладных / чеков / документов на возврат и т.д.
• Передача заказа в транспортную компанию, получение трек-номера, статуса и т.д.
• Выпуск штрихкодов для транспортной тары
— Разработали сервис выдачи заказов Ariel Point. Пользователь сообщает номер заказа и код для получения сотруднику, сотрудник вводит данные в сервис, получает подтверждение, меняет статус заказа после выдачи, после чего автоматически запускается целая цепочка событий: печать чека, письмо клиенту о выдаче заказа и т.д.
— Работают интеграции с Bitrix, 1С, эквайрингом, кассами, транспортной компанией и sms-сервисами.
Крафт (мастерство), реализация, технические детали
Главная техническая особенность — высокие пиковые нагрузки в период продаж. Тысячи заказов оформляются всего за несколько секунд, при этом нужно не допустить деградации производительности и корректно обрабатывать заказы, оплаты и вести количественный учет остатков.
— Особенности архитектуры. Система представляет собой гибридную архитектуру на базе 1С-Битрикс и Laravel. Ключевые нагруженные части API реализованы на чистом Laravel, при этом у клиента остается удобный и функциональный бэкофис от Битрикс для управления пользователями, заказами и товарами.
—Технологии. В качестве основной связки для повышения производительности использовали Laravel Octane (Swoole) + PHP-FPM + Nginx. Обработка запросов разделена и работает по-разному в зависимости типа страницы. В отличие от традиционных PHP-приложений, которые перезапускают фреймворк при каждом запросе, Octane сохраняет приложение в памяти между запросами. Это позволяет обрабатывать последующие запросы без перезагрузки всего приложения и снижает накладные расходы, связанные с типичным циклом запроса PHP, где приложение перезапускается с нуля каждый раз. Swoole в сочетании с Laravel Octane позволяет приложениям обрабатывать тысячи одновременных соединений с низкой задержкой. Memcached используется для хранения сессий и кэширования данных. Redis применяется для временных данных, информации об очередях для Laravel Horizon.
— Инфраструктура. Для того, чтобы сэкономить бюджет на инфраструктуру было принято решение разместить проект в Yandex Cloud. Это позволяет оперативно увеличивать объем ресурсов к распродажам и отказываться от них сразу после.
— Прочие решения. Для сокращения времени ответа сервера был реализован высокопроизводительный механизм управления корзинами и заявками вне ядра Битрикс. Помимо этого было реализовано асинхронное создание заказа, что позволяет пользователям мгновенно отправлять заявки и бронировать товары, работать с остатками, при этом заказы формируются фоново и не аффектят производительность.
Технические результаты:
Нагрузка в пике 3000 RPS, формирование 2000+ заказов за 7 секунд. При этом время ответа сервера не превышает 20 мс.
Инсайты, гипотезы, процесс создания и взаимодействия с заказчиком
— Проблема борьбы со спекулянтами существует очень давно и развивается по принципу «войны на истощение»: после ввода ограничений в интересах частных коллекционеров спекулянты находили способы их обхода. Учитывая это, мы не только внедрили ограничения, эффективные прямо сейчас, но и разработали рекомендации на будущее.
— Все частные клиенты (коллекционеры) — фанаты бренда, которые активно общаются в дружном комьюнити, обмениваются фотографиями трофеев и т.д. Поэтому они искренне расстраивались, когда товар на сайте Ариель уже закончился, а на Авито появлялись предложения от «перекупов» по цене х3. Решение этой проблемы дало значимый репутационный эффект со знаком «+».
— До запуска проекта уже предпринимались попытки решить задачу со сверхвысокими нагрузками в период старта продаж, но все предыдущие решения имели побочные эффекты. Например, одна из предыдущих механик предполагала, что для оформления заявки пользователи заполняют форму, а после на её основе заказы создаются менеджерами. Фактически это приводило к децифровизации части процессов и увеличению объёма ручного труда.
— Инженерный интерфейс не привязан к классическим шаблонам интернет-магазинов, а ориентирован на решение задач бизнеса и пользователей в условиях флеш-продаж. Каждая продажа — это не только 2000+ заказов за 10 секунд, которые нужно автоматически обработать, но и несколько тысяч пользователей, которые волнуются и ждут решения — успели они заказать желаемую игрушку или нет. Зная это, мы уже на этапе проектирования интерфейса закладывали ключевое требование — как можно быстрее выдать пользователю решение по заявке, даже если детали заказа (номер и т.д.) ещё в процессе формирования.
Скриншоты