Ответ
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 для подходящих запросов.
Ответ 18+ 🔞
Слушай, вот объясняю про RPS, запросы в секунду, как есть. Это, по сути, счётчик того, сколько раз твой сервер могут пнуть за секунду, чтобы он не сдох. Прямой показатель, насколько он вообще живучий.
А нахуя это вообще мерить?
- Просто понять, не говно ли ты написал. Посмотреть, как твоё творение держится, когда на него начинают наваливать.
- Чтобы не попасть на бабки. Чтобы заранее прикинуть, сколько этих твоих виртуальных серверов надо купить, когда к тебе толпа пользователей придёт. А то будет ой.
- Найти узкое горлышко. Если RPS при росте нагрузки сначала растёт, а потом в пол обрушивается — всё, приехали. Ищи, где тормозит: процессор в пелёнке, память кончилась, база данных легла или какой-нибудь внешний сервис тебя послал.
- Для магии автоскейлинга. Эти умные системы, которые сами добавляют или убирают сервера, часто как раз на RPS и смотрят. Мало пинков — убавили, много — добавили.
Как меряют? Да просто насилуют специальными программами! Берут k6, JMeter, Locust — и начинают долбить твой API, как будто ему нечего делать.
Вот, смотри, простейший пример для 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); // Пользователь же не робот, ему подумать надо
}
Запустишь эту хуйню — и тебе вывалят отчёт: средний RPS, время ответа, где какие процентили, сколько ошибок. Всё как на духу.
Но есть важные детали, ёпта:
- RPS и общая пропускная способность — не одно и то же. RPS — это про HTTP-пинки. А throughput может быть в чём угодно: в операциях с базой в секунду, в мегабитах. Не путай.
- Всё зависит от запроса. RPS на запрос «отдай главную страницу» и на запрос «пересчитай мне всю аналитику за год» — это, блядь, небо и земля. Один будет как пуля, а второй — ползти, как черепаха в сиропе.
- RPS один — ни о чём. Можно иметь овердохуища запросов в секунду, но если каждый из них выполняется по 10 секунд, то пользователи просто сдохнут от ожидания. Смотри всегда вместе с временем отклика (особенно p95, p99) и процентом ошибок. Одно без другого — пиздёж.
- Кэш — твой лучший друг. Если правильно прикрутил кэширование (в памяти, в Redis, на CDN), то RPS для статики или одинаковых запросов взлетает до небес. Сервер просто отдаёт уже готовый ответ, а не ебётся с вычислениями каждый раз.