Ответ
RPS (Requests Per Second, запросов в секунду) — это ключевая метрика производительности, которая показывает, сколько HTTP-запросов сервер или микросервис способен обработать за одну секунду. Это прямой индикатор пропускной способности (throughput) системы.
Зачем измерять RPS?
- Оценка производительности: Понимание, как ведет себя приложение под нагрузкой.
- Планирование емкости (Capacity Planning): Определение необходимого количества серверов/инстансов для ожидаемой нагрузки.
- Выявление узких мест (Bottlenecks): Падение RPS при увеличении нагрузки может указывать на проблемы с CPU, памятью, блокировками в БД или внешними API.
- Настройка автоскейлинга: Правила автомасштабирования (например, в Kubernetes или облачных провайдерах) часто основываются на RPS или аналогичных метриках.
Как измеряется? Обычно с помощью нагрузочного тестирования инструментами вроде k6, JMeter, Locust или Vegeta.
Пример простого скрипта для k6:
import http from 'k6/http';
import { check, sleep } from 'k6';
export const options = {
stages: [
{ duration: '30s', target: 50 }, // Плавный рост до 50 виртуальных пользователей
{ duration: '1m', target: 50 }, // Удержание нагрузки
{ duration: '30s', target: 0 }, // Плавное снижение
],
};
export default function () {
const res = http.get('https://test-api.example.com/products');
check(res, { 'status was 200': (r) => r.status == 200 });
sleep(1); // Имитация "мышления" пользователя
}
После запуска теста k6 выдаст отчет, включающий средний RPS, процентили времени ответа и процент ошибок.
Важные нюансы:
- RPS vs. Throughput: RPS — частный случай throughput, специфичный для HTTP. Throughput может измеряться в других единицах (операций/сек, Мбит/сек).
- Зависимость от сложности запроса: RPS для "тяжелого" POST-запроса с вычислениями будет на порядки ниже, чем для простого GET-запроса за статичными данными.
- Не единственная важная метрика: Высокий RPS бесполезен, если растет время отклика (latency) или процент ошибок. Всегда анализировать вместе с p95/p99 latency и error rate.
- Влияние кэширования: Кэширование на уровне приложения (in-memory, Redis) или CDN радикально повышает RPS для подходящих запросов.