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

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

Опишите ожидаемую нагрузку

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

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

  • Какие страницы получат основной трафик?
  • Что посетитель должен успеть сделать?
  • Какие операции нельзя потерять или выполнить дважды?
  • Какой сценарий допустим при недоступности второстепенного сервиса?

Измерьте текущую работу

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

Не ограничивайтесь средним временем ответа. Перцентили p95 и p99 помогают увидеть медленную часть запросов, которую среднее значение может скрывать. Сопоставляйте их с нагрузкой, HTTP-ошибками и успешностью бизнес-операций.

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

Проверьте ограничения каждого компонента

Проследите путь запроса: веб-сервер, обработчики приложения, база, кеш и внешние сервисы. У каждого участка свои ограничения: рабочие процессы, память, соединения, блокировки, пропускная способность диска или квота API.

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

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

Подготовьте кеш и работу с базой данных

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

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

В базе найдите наиболее дорогие запросы, оцените блокировки и число соединений. Проверьте индексы и объём выдачи. Если один запрос просматривает лишние данные, дополнительные соединения способны усилить проблему вместо её устранения.

Проведите безопасный нагрузочный тест

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

  1. Подготовьте реалистичные сценарии и тестовые данные.
  2. Постепенно увеличивайте интенсивность запросов.
  3. Наблюдайте время ответа, ошибки, ресурсы и очереди.
  4. Найдите участок, после которого показатели начинают ухудшаться.
  5. Проверьте, возвращается ли система к нормальной работе после снижения нагрузки.

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

Ограничьте лишнюю работу и предусмотрите деградацию

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

Ограничение частоты запросов помогает защитить дорогие маршруты от чрезмерного использования. Например, NGINX поддерживает limit_req. Настройки нужно проверять на реальных сценариях: пользователи за общим IP или легитимная интеграция могут попасть под слишком жёсткий лимит.

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

Подготовьте команду к пику

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

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

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

Если нужна оценка готовности сайта и сервера, напишите в HOMEWEB. Укажите источник будущего трафика, критичные действия посетителей и сроки события.

Разбираете похожую ситуацию? Расскажите о ней в форме ниже — обсудим, с чего начать именно в вашем случае.