Пропускная способность сервера: расчёт нагрузки
- Пропускная способность веб-сервера измеряется в RPS (requests per second) и зависит от времени ответа (latency) и числа одновременных соединений.
- Для типичного веб-приложения на Node.js/Python максимальный RPS ≈ (число соединений) / (среднее время ответа в секундах).
- Реальное значение RPS на 2026 год для дешевого VPS (1 vCPU, 1 GB RAM) — 50-200 RPS на статику, 5-20 RPS на динамику с БД.
- Увеличение числа воркеров (workers) не всегда повышает пропускную способность — при перегрузке CPU/IO рост останавливается.
- Онлайн-калькуляторы дают оценку до 30% точности, реальные цифры получаются только нагрузочным тестированием (например, wrk, k6).
- Что такое пропускная способность сервера и зачем её считать
- Основная формула: откуда берётся RPS
- Пошаговый расчёт на реальном примере: 5000 пользователей ежедневно
- Как отладить и измерить реальную пропускную способность: инструменты и команды
- Частые ошибки джунов: что ломает расчёты на практике
- Частные случаи: API, стриминг, базы данных
- Сравнение пропускной способности: статика vs динамика vs база данных
Что такое пропускная способность сервера и зачем её считать
Пропускная способность сервера — это максимальное количество обработанных запросов за единицу времени (обычно секунда), при котором качество обслуживания остаётся приемлемым: время ответа не превышает заданного порога (например, 1 секунда), ошибки HTTP 5xx отсутствуют.
Если вы разрабатываете веб-приложение, API или стриминговый сервис, без этой метрики вы рискуете:
- переплатить за избыточные ресурсы VPS/облачного сервера,
- провалить запуск или рекламную кампанию из-за падения при нагрузке,
- неправильно задать SLA для клиентов.
Пропускная способность тесно связана с латентностью (время ответа) и одновременными соединениями. Незнание этого баланса — одна из частых ошибок джунов. Чтобы не гадать, используйте Калькулятор пропускной способности сервера для быстрой оценки, но учитывайте, что точные цифры даёт только нагрузочное тестирование.
Важно: пропускная способность не равна ширине канала (скорости сети). Это количество операций сервера, а не трафик в Мбит/с.
Основная формула: откуда берётся RPS
Базовая формула для веб-сервера с асинхронной моделью (например, nginx, Node.js, Go):
Она исходит из закона Литтла: L = λW, где L — число запросов в системе, λ — интенсивность (RPS), W — среднее время обработки. На практике ограничивающим фактором становится CPU/IO, а не только сеть.
- Средняя задержка — время от получения запроса до начала ответа (latency). Включает обработку в приложении, запросы к БД, рендеринг, но не время на передачу по сети.
- Число одновременных соединений — зависит от модели воркеров. Для Node.js с одним потоком это обычно 1000-2000 на ядро; для многопоточного Python — 10-50 на воркер.
Пример: если средняя задержка 200 мс (0.2 с) и сервер держит 200 одновременных соединений, то RPS ≈ 200 / 0.2 = 1000. Реальный максимум будет чуть ниже из-за накладных расходов (очереди, контекстные переключения).
Для детального расчёта ресурсов под конкретный проект попробуйте Калькулятор нагрузки на сервер.
Пошаговый расчёт на реальном примере: 5000 пользователей ежедневно
Допустим, у вас интернет-магазин на WordPress + MySQL, средний пользователь делает 5 запросов за сессию, дневная нагрузка — 5000 активных сессий, пик в час 300 сессий. Нужно оценить минимальный сервер.
- Считаем среднее число запросов в секунду (RPS):
300 сессий/час × 5 запросов / 3600 с ≈ 0.42 RPS — пиковая нагрузка в секунду. Это почти ничего, даже дешёвый VPS справится. - Но на практике WordPress генерирует много медленных запросов из-за PHP + MySQL. Реальная средняя задержка на дешёвом хостинге — 500-1000 мс. При 300 параллельных соединениях maximum RPS будет 300 / 0.5 = 600 RPS, то есть запас есть.
- Проблема в том, что WordPress может открывать соединения к БД на каждый запрос. Если БД не выдерживает 300 одновременных соединений, наступает блокировка.
В итоге для такого магазина достаточно сервера с 2 vCPU, 4 GB RAM (около 1500 руб./мес. в 2026). Но если вы используете PHP-FPM с 50 воркерами, то максимальная пропускная способность будет около 50 / 0.5 = 100 RPS. Для пика в 0.42 RPS — огромный запас. Зная это, можно смело брать минимальную конфигурацию.
Проверить стоимость подходящего сервера можно в Калькуляторе стоимости VPS сервера.
Как отладить и измерить реальную пропускную способность: инструменты и команды
Теоретические формулы дают лишь оценку. Чтобы узнать точные цифры, нужно провести нагрузочное тестирование. Ниже — базовые инструменты и примеры.
| Инструмент | Команда (пример) | Описание | Когда использовать |
|---|---|---|---|
| wrk | wrk -t4 -c200 -d30s http://example.com | HTTP-бенчмарк, 4 потока, 200 соединений, 30 секунд | Быстрый тест статики/простого API |
| k6 | k6 run --vus 100 --duration 30s script.js | Скриптовый тест, имитация реальных сценариев | Сложные сценарии с паузами |
| ab | ab -n 10000 -c 100 http://example.com/ | ApacheBench, всего 10000 запросов, 100 параллельно | Консольная быстрая проверка |
| locust | Пишется Python-скрипт | Масштабируемый, с веб-интерфейсом | Тимная разработка, CI |
Важно: тестируйте на нагрузке, близкой к реальной (пропорция чтения/записи, размер данных). Чистый GET без тела даёт завышенные RPS.
После теста смотрите на p95 latency (95% запросов быстрее этого времени) и error rate. Если error rate > 1% или p95 > 1 секунды — пропускная способность превышена.
✅ План замера пропускной способности
0 из 8
Частые ошибки джунов: что ломает расчёты на практике
- Игнорирование бэкенда: считают только сетевую пропускную способность (10 Гбит/с), забывая про CPU и БД. Пример: сервер отдаёт статику на 1000 RPS, но динамический запрос к БД идёт 200 мс, снижая RPS до 30.
- Путаница между параллельными и последовательными запросами: браузер может открыть 6 соединений к домену, а сервер — обрабатывать 200 параллельно. Не смешивайте.
- Неучёт keep-alive: HTTP/2 multiplexing позволяет использовать одно соединение для многих запросов, что резко увеличивает RPS без роста числа соединений.
- Тестирование на localhost: задержка сети (1-30 мс) добавляется к латентности. Всегда тестируйте с реальным сетевым расстоянием.
- Завышение ожиданий от дешёвого VPS: на 1 vCPU (до 2.5 ГГц) реальный RPS для Python/Django редко превышает 20-30 на динамику. Для Go или Node.js — 200-400.
Проверить свои знания по архитектуре серверов можно в Тесте на когнитивные способности (раздел технического мышления).
Частные случаи: API, стриминг, базы данных
API (JSON): обычно лёгкие ответы (1-5 КБ), узким местом становится шина CPU/сеть при большом числе запросов. Типичная формула: RPS = (кол-во воркеров × 1000) / (latency + сериализация). Для FastAPI/Node.js — до 5000 RPS на 2 vCPU.
Стриминг видео (RTMP/HLS): здесь метрика — битрейт, а не RPS. Один стрим 5 Мбит/с занимает 5 Мбит/с пропускной способности сети. 1000 одновременных стримов = 5 Гбит/с. Серверный CPU в основном отвечает за репакинг/транскодинг.
Базы данных: пропускная способность измеряется в QPS (queries per second). Она сильно зависит от кэширования. InnoDB в MySQL на одном SSD может давать ~1000 QPS на простые SELECT, а 10 000 — на закэшированные.
Для разных типов нагрузки подберите сервер в Калькуляторе стоимости облачного сервера.
Сравнение пропускной способности: статика vs динамика vs база данных
Таблица ниже показывает типичные цифры для сервера среднего уровня (2 vCPU, 4 GB RAM, SSD) на 2026 год при тестировании через nginx + PHP-FPM или Node.js.
| Тип контента | Среднее время ответа | Макс. RPS (Node.js) | Макс. RPS (PHP-FPM) |
|---|---|---|---|
| Статика (HTML/CSS/JS) | 1-5 мс | 10 000+ | 5 000+ |
| Динамика без БД (рендер) | 10-50 мс | 2 000 | 200 |
| Динамика с БД (типичный запрос) | 100-500 мс | 200 | 30 |
Разница колоссальная. Поэтому для проекта с преобладающей динамикой критично кэширование (Redis, CDN) и выбор языка.
🧮 Посчитайте сами — инструменты по теме
🧭 Разделы по теме
Частые вопросы
Как расчитать пропускную способность сервера?
Используйте формулу: RPS = (число одновременных соединений) / (среднее время ответа в секундах). Но точное значение даёт только нагрузочное тестирование инструментами вроде wrk или k6.
Чем пропускная способность отличается от скорости интернета?
Пропускная способность — количество запросов (задач), скорость интернета — объём данных в единицу времени. Для статики узким местом может быть сеть, для динамики — CPU или БД.
Сколько RPS выдерживает сервер на 1 vCPU?
Зависит от технологии: Node.js около 200-1000, PHP-FPM около 20-50, Go до 2000. Для точности проведите тест на своём коде.
Как повысить пропускную способность без апгрейда железа?
Кэшируйте ответы (CDN/Redis), используйте HTTP/2 multiplexing, оптимизируйте запросы к БД, включите gzip, перейдите на асинхронную модель (Node.js, Go, asyncio).
Что такое RPS и как его замерить?
RPS — requests per second (запросов в секунду). Замеряется нагрузочным тестером: wrk -t4 -c200 -d30s http://your-server.com. Вывод покажет средний RPS.
Нужно ли учитывать размер ответа?
Да, если ответы большие (например, изображения, видео), то ограничением становится пропускная способность сети. Формула: макс. трафик = RPS × размер ответа. Убедитесь, что канал сервера не перегружен.
Какая пропускная способность нужна для 1000 пользователей в день?
Средний пользователь генерирует 5-10 запросов за сессию. 1000 сессий в день = около 0.1 RPS в среднем, пик может быть 1-2 RPS. Любой современный VPS справится.
Что делать, если пропускная способность ниже ожидаемой?
Проверьте логи на медленные запросы (slow query log, request profiling), включите кэш, увеличьте число воркеров (не более числа ядер*2), оптимизируйте код (асинхронность, связка nginx + PHP-FPM).
Источники и нормативные документы
- Документация nginx по пропускной способности
- RFC 7230 — HTTP/1.1
- Закон Литтла (Little's law) — Википедия
- Рекомендации по нагрузочному тестированию от Google