Как проверить готовность интернет-магазина к Черной Пятнице. Практический пример.
Для маркетологов на эту тему написали уже сотни статей, в которых в основном общие слова. Включились в глобальную акцию, дали рекламу вместе со всеми, в общем посещаемость выросла в разы, сайт не открывается. "Проверьте готовность к нагрузке", бла-бла-бла. Как именно ее проверить?
Расскажу что конкретно проверяем у себя мы с клиентами.
"Проверяем готовность к нагрузке" покупателями
1. Определяем обычную нагрузку, с которой живем всегда. Нагрузка - это число обращений к страницам магазина в период времени. Важно - не посетителей, а именно просмотров, потому как один посетитель может носиться по сайту как угорелый.
Вот пример мини-наплыва: в 12:00 разошлась рассылка с большими скидками.
Видим что 300 человек в час дают 5000 просмотров. Усредненно получается 300 \ 60 = 5 человек в минуту дают 5000 \ 60 = 83 обращения в минуту, 1.2 обращения в секунду. Важно использовать не суточную посещаемость, а как минимум часовую - потому как запуск промо всегда дает пиковую нагрузку одномоментно, как в нашем примере с рассылкой.
Сайт эту нагрузку и не замечает. Возьмем ее за базу.
2. Определяем нагрузку, с которой начнутся проблемы. Как узнать нагрузку, которая станет заметна. Я использую сервис https://loadimpact.com . Забесплатно можно выполнить 50 тестов, для общей картины хватит.
Как выглядит тест? Мы знаем что, условно, 2 запроса в секунду нам норм, сколько будет не норм?
1) Создаем сценарий:
http.request_batch({
{"GET", "
https://%%%%%%%%%%%.ru/%%%%%%.html?attributes_filters[45][]=grouped78,80,81,82,83,85,86,87,88,89&attributes_filters[45][]=grouped90,92,93,94,95,96,97,98,99,100&price_min=360&price_max=4770&only_in_stock=undefined&manufacturer[]=1&manufacturer[]=7&manufacturer[]=10&manufacturer[]=4 "},
})
http.page_end("Page 1")
client.sleep(1)
Наш сценарий - обращения посетителя к страницы со сложной выборкой товаров с интервалом 1 секунду. Я специально беру одну из самых медленных страниц, чтобы за более простые страницы (каких абсолютное большинство) точно не переживать.
2) Запускаем этот сценарий теста на выполнение от имени 15 пользователей в течение 3 минут с задержкой от 1 до 20 секунд. Это как если бы обычные 15 человек одновременно активно ходили по сайту. То есть в три раза больше известной нагрузки, которая не вызывает проблем.
Результат: среднее время отдачи страницы от сервера посетителю - 3 сек (1.37- 6 сек). Плохо, но терпимо - мы знаем что в реальной жизни такая сложная выборка запрашивается нечасто, а обычные страницы работают существенно быстрее и уложатся в приемлимое время отдачи.
3) Тот же сценарий, но от имени 50 пользователей. В 10 раз больше обычного. Он загоняет время отдачи страницы в среднем до 15 сек (с максимумом 28), и далее 500-ые ошибки. Вот это уже точно предел возможностей.
(цвета на графике наоборот по сравнению с предыдущим)
Это очень приблизительный подсчет, но достаточно наглядный. Теперь мы знаем что на сайт можно привлекать не более чем в три раза больше трафика чем обычно. По опыту хорошая Черная Пятница дает прирост в 5-7 раз.
Что будем делать? Конкретно в этой истории я изучил серверные логи и узнал что белый экран - это ошибка со стороны MySQL "too many connections". Серверные мощности позволяли увеличить лимит на число соединений, что было сделано. Кроме того, оптимизировали некоторые запросы чтобы они исполнялись быстрее = занятых соединений было меньше = больше запросов в рамках лимита на соединения могло быть исполнено. Но в каждой истории набор действий может быть и будет разным.
"Проверяем готовность к нагрузке" скидками
Бывает так, что ежедневно обновляется информация по наличию товара в магазине. Это, условно, пара цифр для каждого товара. Реже обновляются скидки - информации на товар больше, но самих товаров со скидками обычно не так много, и обновляются они не обязательно все сразу. В ЧП происходит следующее - нужно в один момент обновлять много информации (скидки) по многим товарам. Если что-то пойдет не так, в лучшем случае покупатели не увидят скидок, в худшем (если обмен данными совсем кривой) поломается каталог.
Тут проверка простая: моделируем действия в ЧП на тестовых копиях магазина. Важно сделать это заранее, а не вечером перед стартом акции.
"Проверяем готовность к нагрузке" третьих сторон
Не забываем о внешних сервисах, подключенных к сайту. Колл-трекинг, чатики, всякие roistat , онлайн-кассы(!!!), и, особенно важно, CRM. Везде где есть виджеты или API, обязательно есть лимит на число обращений к ним со стороны клиента. Число запросов в месяц, в секунду, вообще. Если оно будет превышено, то в зависимости от кривизны интеграции может либо ничего не происходить (заказы будут в почте, но пройдут мимо CRM , чатик перестанет открываться и т.п.), либо начнутся ошибки в работе сайта, в т.ч. фатальные для выручки (заказы не будут завершены, на сайте будут некорректно работать какие-то функции из-за блокирующих ошибок JS и т.п.).
Что делаем? Пересчитываем подключенные сервисы, выясняем их лимиты, умножаем число обращений на число из п.1, получаем лимит по возможному трафику. Тут много тонких моментов, как например что создание в CRM одного лида может занимать сразу несколько запросов к API. Однако получить рабочие цифры не составляет труда. Да и лимиты к API, справедливости ради, для большинства средних магазинов далеко избыточны.
Что делать если тесты показали слабую готовность к Черной Пятнице?
Идете к разработчикам, которые делают магию. Какую? Разработчик определяет проблемное место и предлагает решение. Обычно решений два: прикупить (возможно временно) больше хостинговой мощности (старший тариф, более мощная конфигурация виртуального сервера), или оптимизировать программный код. Программисты топят за то чтобы все переписать правильно, системные инженеры утверждают что проще добавить вычислительной мощности. Какой вариант эффективнее - оцениваем по стоимости. Пример: сервер следующего уровня стоит на 2000 руб\месяц дороже, оптимизировать код - 10 человеко-часов за 20 000 руб. единоразово. Вложения "в программиста" сравняются с вложениями "в железо" через 10 месяцев. Считайте для себя с учетом частоты акций, наличия других проблем и всего такого.
Вам нужно подготовиться к Черной Пятнице?
Ревизия вашего сайта на готовность к повышенным нагрузкам стоит у меня 8 000 руб.
С Битриксом не работаю.
Wordpress, Opencart, самописы - работаю.
На входе - доступы к счетчикам, интервью с вами о вашей инфраструктуре. На выходе - результаты измерений и прогноз сколько посетителей и заказов ваш магазин сможет принять.