Load testing на собеседовании системного аналитика
orders_2024 и orders_2025 имеют одинаковую структуру. Некоторые заказы случайно попали в обе таблицы. Чем будут отличаться результаты SELECT * FROM orders_2024 UNION SELECT * FROM orders_2025 и того же запроса с UNION ALL?Виды нагрузочного тестирования
Нагрузочное тестирование — это не один тест, а семейство разных проверок, и на собесе системного аналитика первым делом смотрят, различаете ли вы их. Каждый вид отвечает на свой вопрос о поведении системы.
- Load test (нагрузочный). Прогоняем ожидаемый рабочий трафик и проверяем, что система держит его в рамках SLA. Базовый вопрос: «выдерживаем ли мы обычную нагрузку».
- Stress test (стресс). Даём нагрузку выше проектной ёмкости, чтобы увидеть, как именно система деградирует и падает — плавно или обвально, и восстанавливается ли после. Вопрос: «где наш предел и что происходит за ним».
- Spike test (пиковый). Резкий всплеск трафика за короткое время — распродажа, рассылка, вирусный пост. Проверяем, переживёт ли система внезапный скачок и успеет ли автоскейлинг.
- Soak / endurance test (на выносливость). Держим нагрузку часами или сутками. Именно так вылезают утечки памяти, исчерпание пула соединений и другие проблемы, которые не видны за пять минут.
- Volume test (объёмный). Проверяем поведение на больших объёмах данных — распухшие таблицы, длинные очереди, — когда деградирует не трафик, а сам размер данных.
Инструменты
Конкретные инструменты называть полезно, но важнее понимать, чем они отличаются и когда что брать.
- k6. Современный инструмент, сценарии пишутся на JavaScript, запускается из CLI и легко встраивается в CI/CD. Хорош для инженерного подхода «нагрузка как код».
import http from 'k6/http';
// каждый виртуальный пользователь дёргает endpoint заказов
export default function () {
http.get('https://example.com/api/orders');
}- JMeter. Ветеран с графическим интерфейсом, очень функциональный, много протоколов и плагинов. Тяжеловат и менее удобен для версионирования сценариев, зато закрывает почти любой кейс.
- Locust. Сценарии на Python, умеет распределённый запуск с нескольких машин. Удобен, когда команда пишет на Python и нужна гибкая логика поведения пользователей.
- Gatling. На Scala, высокая производительность и хорошие отчёты. Один генератор нагрузки выдаёт много запросов.
- Yandex.Tank. Российский инструмент с движком Pandora, распространённый в РФ-компаниях. Часто всплывает на собесах именно как локальная альтернатива.
- Vegeta. Простой инструмент на Go для быстрой проверки постоянной нагрузки на HTTP-endpoint без сложных сценариев.
Сценарии нагрузки
Хороший нагрузочный тест воспроизводит реальное поведение пользователей, а не равномерно долбит один endpoint. Это ключевая мысль, которую проверяют на собесе.
- Реалистичное распределение. Нагрузка неравномерна: большинство пользователей просто смотрят, и лишь малая доля доходит до оплаты. Тест должен повторять эти пропорции, иначе вы нагружаете не то, что нагружено на проде.
80% — просмотр каталога и карточек
15% — добавление в корзину
4% — оформление заказа
1% — административные действия- Ramp up (постепенный рост). Плавно повышаем нагрузку, чтобы найти точку, где система начинает деградировать. Так определяют реальную ёмкость и порог, за которым растут задержки и ошибки.
- Sustained (удержание пика). Держим пиковую нагрузку долго, чтобы поймать утечки памяти и исчерпание ресурсов, которые не видны на коротком прогоне.
- Mixed (смешанный). Разные типы пользователей работают одновременно — просмотр, покупки, фоновые задачи, — чтобы проверить систему в условиях, близких к боевым.
Метрики
Результат нагрузочного теста — это набор метрик, и на собесе важно не просто их перечислить, а объяснить, что каждая значит.
- Throughput (пропускная способность). Сколько запросов в секунду система реально обрабатывает. Главный показатель ёмкости.
- Latency (задержка). Время ответа, обязательно по перцентилям — p50, p95, p99, — а не среднее. Среднее прячет проблемы хвоста.
- Error rate (доля ошибок). Процент упавших запросов. Рост доли ошибок под нагрузкой — сигнал, что система прошла свой предел.
- Saturation (насыщение ресурсов). Загрузка CPU, памяти, сети, диска. Показывает, какой ресурс упрётся в потолок первым, — обычно именно он и есть узкое место.
- Tail latency (хвостовые задержки). p99 говорит о худших запросах больше, чем среднее: даже при отличном mean несчастливый 1% пользователей может ловить секундные ответы. SLA обычно живёт именно в хвосте.
Цель всего упражнения — подтвердить, что система держит SLA под ожидаемой нагрузкой с запасом (headroom), а не работает на пределе, где любой всплеск её обрушит.
Связанные темы
- Capacity planning для SA
- SLA SLO SLI для SA
- Latency budget для SA
- Chaos engineering для SA
- Подготовка к собесу системного аналитика
FAQ
Чем стресс-тест отличается от нагрузочного?
Нагрузочный тест проверяет, что система держит ожидаемый трафик в рамках SLA. Стресс-тест намеренно превышает проектную ёмкость, чтобы увидеть, как система деградирует и падает за пределом и восстанавливается ли она после. Первый отвечает на «выдержим ли норму», второй — «где наш предел и что за ним».
Почему задержку меряют по перцентилям, а не по среднему?
Среднее прячет хвост распределения. При хорошем среднем несчастливые 1% запросов (p99) могут отвечать за секунды — и именно они формируют негативный опыт и нарушают SLA. Поэтому смотрят p95 и p99, а не mean.
Зачем нужен soak-тест, если нагрузочный уже прошёл?
Короткий прогон не ловит проблемы, которые накапливаются со временем: утечки памяти, исчерпание пула соединений, распухание логов и очередей. Soak-тест держит нагрузку часами или сутками именно для того, чтобы такие деградации проявились до продакшена.
Как выбрать реалистичный сценарий нагрузки?
Опираться на реальное распределение действий пользователей из аналитики, а не бить равномерно по одному endpoint. Обычно это пирамида: много просмотров, меньше добавлений в корзину, ещё меньше оформлений. Тест должен повторять эти пропорции, иначе вы нагружаете не те части системы, что на проде.
Это официальная информация?
Нет. Статья основана на документации инструментов нагрузочного тестирования и индустриальных практиках. Конкретный выбор инструмента и сценариев зависит от системы и требований команды.
Тренируйте системный анализ — откройте тренажёр с 1500+ вопросами для собесов.