Performance-платформа: нагрузочное тестирование до того, как нагрузка стала проблемой
Заказчика не раскрываем по условиям договора: платформа performance-маркетинга, которая готовилась к пиковой кампании с трафиком в разы выше обычного. Команда разработки знала узкие места в теории — очереди, база, лимиты API рекламных кабинетов — но не в цифрах. Задачей было получить цифры до запуска, а не после.
Исходная ситуация
Платформа забирает данные из рекламных кабинетов, пересчитывает и показывает клиентам в отчётах. В пиковую кампанию растёт не только трафик на интерфейс, но и объём данных, который нужно забрать и пересчитать, — и именно это ломается первым. Нагрузочных тестов раньше не было: о проблемах узнавали от клиентов, когда отчёты переставали обновляться.
- Нет профиля нагрузки — неизвестно, какие запросы и в какой пропорции идут в пик.
- Нет порогов — непонятно, что считать «выдержала».
- Узкие места известны по ощущениям, а не по измерениям.
- Внешние интеграции с лимитами запросов, которые в пик могут исчерпаться.
Что сделали
- Сняли профиль нагрузки с реальных логов за прошлую кампанию: какие запросы, в какой пропорции, с какими пиками по часам.
- Зафиксировали с владельцем продукта целевые пороги: p95 времени ответа для интерфейсных запросов и для пересчёта отчётов, допустимую долю ошибок на целевой нагрузке.
- Собрали сценарии пика в k6: интерфейс, API, сбор данных из кабинетов и пересчёт — с учётом лимитов внешних интеграций.
- Прогоняли ступенями с мониторингом базы, очередей и внешних вызовов, повышая нагрузку до нарушения порогов.
- Отдали отчёт с точкой насыщения, узкими местами, ранжированными по стоимости исправления, и воспроизводимыми сценариями.
Результат
- Все узкие места найдены и ранжированы до запуска кампании: часть закрыта настройками и лимитами, часть ушла в бэклог разработки с приоритетами.
- Команда получила воспроизводимый набор сценариев и прогоняет его после каждого релиза, трогающего интеграции или пересчёт.
- Пороги по p95 и доле ошибок стали частью критериев готовности к релизу.
- Профиль нагрузки обновляется по логам каждой кампании — набор не устаревает.
Что оказалось важным
Пороги, зафиксированные до теста. Пока их не было, обсуждение результатов превращалось в спор о том, «нормально» ли три секунды. С порогами результат читается однозначно: на целевой нагрузке p95 в пределах, доля ошибок в пределах — пройдено; нет — вот уровень, на котором сломалось, и вот что сломалось первым. Второй вывод — про внешние интеграции: лимиты рекламных API оказались узким местом раньше базы, и это невозможно было увидеть без сценариев, которые их задействуют.
Частые вопросы
Почему в кейсе нет цифр нагрузки?
Сколько занимает такая работа?
Нужно ли повторять нагрузочные тесты перед каждой кампанией?
Можно ли сделать то же для другой платформы?
Расскажите о задаче
Ответим в течение одного рабочего дня, оценку пришлём за 1–2 дня. Бесплатно.