Что такое метрика RPS (Requests Per Second)?

«Что такое метрика RPS (Requests Per Second)?» — вопрос из категории DevOps, который задают на 25% собеседований C# Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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 для подходящих запросов.