Нагрузочное тестирование: k6, NBomber, метрики и профили нагрузки

↑ 7.5 Нагрузочное и продвинутое тестирование · → Следующая

Желательно~3 мин чтенияУровень: senior

Зачем это на собесе

Как проверить, что сервис выдержит нагрузку, и как интерпретировать результаты.

Объяснение

ПрофильЦель
Loadожидаемая рабочая нагрузка, проверка SLO
Stressнарастание до отказа: где предел и как деградирует
Spikeрезкий всплеск: справляется ли автоскейлинг
Soak (endurance)длительная нагрузка: утечки, деградация
Breakpointнайти максимальную пропускную способность

Инструменты: k6 (JS-сценарии, метрики, пороги, CI), NBomber (.NET, сценарии на C#), Gatling, JMeter, bombardier/wrk для быстрых замеров, Locust.

import http from "k6/http"; import { check, sleep } from "k6";
export const options = {
  stages: [{ duration: "2m", target: 100 }, { duration: "5m", target: 100 }, { duration: "1m", target: 0 }],
  thresholds: { http_req_failed: ["rate<0.01"], http_req_duration: ["p(95)<300"] },   // тест падает при нарушении
};
export default function () {
  const r = http.get(`${__ENV.BASE}/orders?limit=20`, { headers: { Authorization: `Bearer ${__ENV.TOKEN}` } });
  check(r, { "status 200": (x) => x.status === 200 });
  sleep(1);
}

Метрики: RPS, перцентили задержки (p50/p95/p99), доля ошибок, насыщение (CPU, память, пул соединений, потоки), метрики БД (медленные запросы, блокировки).

Порядок: определить SLO → реалистичный сценарий (миксы запросов, данные, think time) → прогрев → нагрузка → анализ узкого места → исправление → повтор.

Нюансы и подводные камни

  • Тест генератором на той же машине искажает результат.
  • Нереалистичные данные (один и тот же id) дают нереальный кэш-хит.
  • Смотрите не среднее, а p95/p99 и ошибки.
  • Открытая (фиксированный RPS) и закрытая (фиксированное число VU) модели нагрузки дают разные картины при деградации.
  • Нагрузочный тест на проде — только с планом и защитой (тестовые данные, лимиты).

Практика

  1. Напишите k6-сценарий с порогами и запустите в CI.
  2. Найдите предел RPS и первое узкое место.
  3. Проведите soak-тест на 1 час и сравните память.

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

Связанные темы