К содержимому
DDoS·Protect
База знаний

Как сайту выдержать пиковую нагрузку: распродажа, рассылка, эфир

Наплыв настоящих посетителей после рекламы, рассылки или телеэфира для сервера выглядит так же, как атака. Разница в том, что этих посетителей вы очень ждали. Подготовка к пику во многом совпадает с защитой от DDoS.

Что сделать заранее

  1. Провести нагрузочный тест своего сайта и узнать, сколько запросов он выдерживает.
  2. Включить кэш для всех страниц, которые одинаковы для всех посетителей.
  3. Упростить на время пика самые тяжёлые элементы: персональные рекомендации, сложные фильтры.
  4. Включить отдачу устаревшей копии при перегрузке сервера.
  5. Предупредить хостинг о плановом пике.

Нагрузочный тест: что именно мерить

Главная цифра — не «сколько выдерживает главная», а сколько оформлений заказа в минуту проходит без ошибок. Тестируйте сценарий целиком: вход на посадочную страницу, каталог, карточка, корзина, оформление. Отмечайте, на каком шаге первым растёт время ответа, — обычно это поиск, фильтры или расчёт доставки. Подойдут открытые инструменты вроде k6, Locust или Apache JMeter.

# k6: 200 виртуальных посетителей в течение 5 минут
# k6 run --vus 200 --duration 5m checkout.js
import http from 'k6/http';
import { sleep } from 'k6';
export default function () {
  http.get('https://staging.example.ru/catalog/');
  sleep(1);
  http.get('https://staging.example.ru/product/123/');
  sleep(2);
}
Тестируйте копию сайта или согласуйте окно с хостингом

Кэш: главный резерв мощности

Страница из кэша обходится серверу почти бесплатно, а сгенерированная — запросами к базе и работой PHP. Кэшируйте всё, что одинаково для неавторизованных посетителей: главную, лендинг акции, каталог, статьи. Даже кэш на 30–60 секунд на время пика снимает основную нагрузку. Подробнее — на странице о кэшировании.

# nginx: отдавать устаревшую копию, пока бэкенд занят или упал
proxy_cache_path /var/cache/nginx keys_zone=pages:50m max_size=1g inactive=60m;

location / {
    proxy_cache pages;
    proxy_cache_valid 200 1m;
    proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
    proxy_cache_background_update on;
    proxy_cache_lock on;
    proxy_pass http://backend;
}
Не кэшируйте корзину, личный кабинет и ответы с авторизационной cookie

Ограничьте то, что нельзя кэшировать

  • Поиск и фильтры: лимит на сессию и упрощённый режим на время пика.
  • Оформление заказа: если сервер на пределе, честная очередь «вы в очереди, осталось 2 минуты» лучше, чем ошибка 502 у всех сразу.
  • Тяжёлые фоновые задачи — выгрузки, пересчёт цен, синхронизация с 1С — перенесите за пределы пикового окна.

Во время пика

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

Вопросы и ответы

Поможет ли просто взять сервер помощнее?

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

Как отличить пик от атаки, если они совпали?

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

Ранний доступ

Подключим ваш сайт одним из первых

Сервис готовится к запуску. Оставьте заявку: проверим, от чего нужно защищать ваш проект, и подключим его в числе первых на условиях раннего доступа.