Уровень производительности системы - это формальная категория, которая описывает, какую нагрузку система выдерживает при заданных метриках и какой запас мощности остаётся у неё на пики и отказы. Классификация опирается на четыре группы измерений: RPS (запросы или транзакции в секунду), время отклика на перцентилях p95 и p99, пропускную способность сетей и хранилищ (МБ/с, ГБ/с, IOPS) и запас ресурсов CPU, RAM, дискового ввода-вывода и сети.
Шкала состоит из четырёх уровней: базовый (минимально приемлемый), стандартный, продвинутый и высокопроизводительный. Для каждого ниже даны границы по метрикам, разобрано, как снимать замеры без ошибок, и приведены примеры классификации для Nginx, PostgreSQL и TrueNAS на ZFS.
У методики есть граница применимости. ISO/IEC 25010:2023 относит производительность к свойствам качества систем и программных продуктов наряду с функциональной пригодностью, совместимостью, удобством, надёжностью и безопасностью (разбор модели качества ПО), но не задаёт ни числовых порогов, ни готовой шкалы уровней. Границы в таблицах ниже - рабочая методика для инженерных задач, а не нормативное требование стандарта.
Что такое уровни производительности систем и зачем их выделять
Уровень производительности фиксирует два независимых факта: сколько нагрузки система обрабатывает сейчас и сколько нагрузки она выдержит после роста трафика или отказа узла. Формальная классификация решает четыре практические задачи.
- Сравнение систем. Два сервера с похожим железом можно поставить рядом и увидеть, какой из них ближе к SLA.
- Планирование мощностей. Запас ресурсов показывает, на сколько месяцев роста хватит текущей конфигурации.
- Бюджет. Переход между уровнями стоит конкретных денег, и обосновать расходы проще таблицей порогов, чем фразой «стало тормозить».
- Поиск узких мест. Уровень задаёт самый слабый ресурс, поэтому классификация сразу показывает, что именно ограничивает систему.
Аналогия с классами энергоэффективности бытовой техники уместна: категория на этикетке ничего не говорит об устройстве прибора, но позволяет мгновенно сравнить два изделия по одному признаку. Уровень производительности работает так же, только вместо ватт на киловатт-час используются RPS, задержки и запас ресурсов.
Почему одной метрики недостаточно
RPS без указания времени отклика ничего не значит. Веб-сервер способен отдать десятки тысяч запросов на статике при p99 в несколько секунд, если запросы копятся в очереди. Для интерактивного API такой профиль означает деградацию: пользователь ждёт, хотя счётчик запросов выглядит внушительно.
Обратная ошибка встречается не реже. Система отвечает за 20 мс на сотне запросов в секунду, но при первом пике упирается в лимит соединений к базе и часть запросов падает в таймаут. Низкая задержка при нулевом запасе ресурсов не даёт права считать систему производительной.
Третий срез - профиль нагрузки. Последовательное чтение блоками по 1 МБ и случайные чтения по 4 КБ дают на одном и том же массиве разницу в пропускной способности в десятки раз. Уровень описывают набором метрик, снятых на профиле, близком к рабочему.
Связь с надёжностью и отказоустойчивостью
В модели качества ISO/IEC 25010:2023 надёжность и производительность перечислены как разные свойства (свойства качества систем и ПО). На практике они сцеплены: если при выходе одного узла кластера оставшиеся упираются в 95% CPU, система теряет уровень производительности в момент отказа, даже когда в штатном режиме показывала продвинутый результат.
Отсюда рабочее правило: запас ресурсов считают не только на пик трафика, но и на отказ самого нагруженного узла. Кластер из трёх узлов, который после потери одного выходит на 85-90% загрузки, находится в предельной конфигурации. Запас в 30% на узел позволяет пережить отказ и сохранить метрики отклика.
Как связаны задержки, репликация, балансировка и число одновременных запросов, разобрано в материале о связи производительности и отказоустойчивости вычислительных систем.
Классификация уровней производительности: от базового до высокопроизводительного
Ниже сводная шкала для интерактивных сервисов. Границы расходятся по типам систем, поэтому таблица задаёт ориентир, а не жёсткий закон: для СУБД нормативы по задержкам строже, для систем хранения на первый план выходят IOPS и пропускная способность.
| Уровень | Запас ресурсов | p95 | p99 | Резервирование | Типичное назначение |
|---|---|---|---|---|---|
| Базовый | менее 10% | 600-800 мс при SLA 1 с | 1,5-2 с | нет | тестовые и второстепенные сервисы |
| Стандартный | 10-20% | 250-300 мс | 600-800 мс | бэкапы, ручное восстановление | внутренние сервисы |
| Продвинутый | 30-50% | 100-150 мс | 150-300 мс | резервный узел, балансировка | клиентские сервисы с SLA |
| Высокопроизводительный | более 50% | менее 30 мс | менее 50 мс | отказоустойчивость на всех уровнях, автомасштабирование | критичные сервисы с жёстким SLA |
Базовый уровень: минимально приемлемая производительность
Признаки: запас ресурсов меньше 10%, p95 подходит к границе SLA вплотную, резервирования нет, мониторинг может отсутствовать. Система работает, но любой скачок трафика, плановое задание или перезапуск соседнего сервиса выводит её за SLA.
Пример: Nginx на 1 vCPU и 2 ГБ RAM отдаёт 500 RPS при p95 = 800 мс и SLA в 1 секунду. Запас по CPU около 5%, по RAM меньше 10%. Места для всплеска или обновления без простоя здесь нет. Решение: планировать переход на стандартный уровень до первого инцидента, а не после.
Стандартный уровень: стабильная работа с небольшим запасом
Признаки: RPS держится с запасом 20-30%, p95 в 2-3 раза ниже SLA, свободно 10-20% CPU и RAM, есть базовое резервирование в виде бэкапов и понятной процедуры восстановления.
Пример: Nginx на 2 vCPU и 4 ГБ RAM, 1500 RPS, p95 = 300 мс. СУБД PostgreSQL на 4 vCPU и 16 ГБ RAM, 5000 TPS, среднее время отклика запроса 5 мс. Такой уровень закрывает большую часть внутренних сервисов и корпоративных систем отчётности.
Продвинутый уровень: готовность к пикам и росту
Признаки: запас 30-50%, p99 стабильно низкий и не растёт при сезонных пиках, есть горизонтальное масштабирование, настроены мониторинг и алертинг.
Пример: кластер Nginx из трёх узлов, 10 000 RPS, p99 = 150 мс. СУБД с репликацией, 20 000 TPS, запас по дисковому вводу-выводу 40%. Хранилище TrueNAS на ZFS с кэшем отдаёт 2 ГБ/с при запасе 40%. Здесь появляется возможность вывести узел на обслуживание без простоя.
Высокопроизводительный уровень: экстремальные метрики и жёсткие SLA
Признаки: запас больше 50%, p99 ниже 50 мс, автоматическое масштабирование, отказоустойчивость на всех уровнях стека, включая сеть и хранилище.
Пример: CDN с 100 000 RPS и p99 = 20 мс. СУБД с шардированием, 100 000 TPS. Хранилище на NVMe с пропускной способностью 10 ГБ/с. Такой уровень требует существенных вложений в железо, лицензии и инженерное время, поэтому его выбирают для сервисов, где простой напрямую стоит денег.
Границы между уровнями сдвигаются от типа системы. Для пакетной обработки p95 в 2 секунды может быть нормой продвинутого уровня, а для биллинга это уже деградация. Классификация остаётся инструментом сравнения, а не догмой.
Критерии оценки производительности: RPS, время отклика, пропускная способность, запас ресурсов
Метрики снимают на профиле, близком к рабочему: на боевом трафике или в нагрузочном тесте с реалистичным сценарием. Базовый набор замеров и порядок действий при диагностике описаны в руководстве о ключевых метриках производительности.
RPS: как правильно измерить и не обмануться
Для замеров используют ab, wrk, k6, locust или hey. Инструмент вторичен, важны четыре условия корректности теста.
- Прогрев. Первые сотни запросов всегда медленнее: поднимаются пулы соединений, заполняется page cache, прогревается JIT. Результаты считают после прогрева.
- Реалистичный сценарий. Набор GET / по статике и смесь чтения с записью в базу дают цифры, которые различаются в разы.
- Учёт кэша. Nginx отдаёт 10 000 RPS статики и только 2 000 RPS динамики через интерпретатор. Это две разные системы по нагрузке на CPU.
- Привязка к задержке. RPS измеряют при целевом времени отклика. Максимальный RPS в отрыве от задержки показывает предел очереди, а не производительность сервиса.
RPS - базовая метрика производительности, показывающая число запросов в секунду под нагрузкой; резкий рост ошибок после 600-800 RPS в конкретном сервисе служит сигналом достижения предела возможностей (разбор метрик нагрузки).
Время отклика: почему p95 и p99 важнее среднего
Среднее время отклика скрывает выбросы. Если 95% запросов обслуживаются за 100 мс, а 5% за 2 секунды, среднее окажется около 200 мс, хотя каждый двадцатый пользователь ждёт две секунды. Перцентиль p95 показывает время, быстрее которого уложились 95% запросов, p99 - тот же показатель для 99%.
Хвосты распределения нельзя игнорировать: чем дальше p95 и p99 отстают от обычных значений, тем выше риск, что пользователи заметят лаги и подвисания, а p99 формирует негативный пользовательский опыт в пиковые моменты нагрузки (о хвостах времени отклика).
Ориентиры для интерактивных систем: p95 ниже 200 мс, p99 ниже 500 мс. Для фоновых и пакетных задач пороги выше, но принцип сохраняется: смотрят на хвост распределения, а не на вершину. Приемлемые значения зависят от сценария: для внутреннего API задержка 200 мс может быть нормальной, для интерактивного поиска она уже способна ухудшить работу пользователя, а для пакетной задачи важнее общее время выполнения и throughput (оценка производительности системы). Замерять перцентили нужно на трафике с реальным профилем, иначе хвост просто не сформируется.
Пропускная способность и IOPS: для сетей и хранилищ
Пропускную способность измеряют в МБ/с или ГБ/с, производительность по операциям - в IOPS (операций ввода-вывода в секунду). Для последовательных операций, копирования больших файлов и потоковой записи логов критична полоса, для случайных операций небольшого размера, характерных для СУБД и виртуальных машин, важнее IOPS и задержка отклика диска.
Пример: массив TrueNAS на ZFS из 8 HDD выдаёт около 500 МБ/с последовательно и порядка 2000 IOPS случайно. После добавления SSD-кэша под метаданные и SLOG показатели вырастают до 2 ГБ/с и 20 000 IOPS. Формулы для расчёта IOPS, полосы и задержек под конкретную нагрузку базы данных приведены в руководстве по расчёту производительности СХД.
Запас ресурсов: как рассчитать и какой считать достаточным
Запас считается по формуле: запас = (1 - пиковое потребление / максимальная мощность) * 100%. Пик берут за период не короче суток, а лучше за неделю, чтобы захватить сезонные и отчётные всплески.
Пример: сервер с 8 vCPU, пиковая загрузка 6 vCPU, запас = (1 - 6 / 8) * 100% = 25%. Это верхняя граница стандартного уровня, дальше нужны либо дополнительные ядра, либо разгрузка по узлам.
Запас производительности виден по тому, сколько дополнительной работы система принимает без заметного ухудшения p95 и p99; признак насыщения ресурса появляется, когда дальнейший рост нагрузки увеличивает задержку, очереди или ошибки (метрики и первые шаги диагностики).
Считать запас нужно отдельно по каждому ресурсу: CPU, RAM, дисковый ввод-вывод, сеть, число соединений к базе, свободные дескрипторы. Уровень определяет самый слабый показатель, поэтому общий высокий запас по памяти ничего не значит при исчерпанном дисковом вводе-выводе.
Практические примеры классификации для веб-серверов, СУБД и систем хранения
Веб-сервер: от базового до высокопроизводительного
Для Nginx на статике и лёгкой динамике шкала выглядит так.
| Конфигурация | RPS | Задержка | Запас | Уровень |
|---|---|---|---|---|
| 1 vCPU, 2 ГБ RAM | 500 | p95 = 800 мс | менее 10% | базовый |
| 2 vCPU, 4 ГБ RAM | 1500 | p95 = 300 мс | 15% | стандартный |
| 4 vCPU, 8 ГБ RAM | 5000 | p95 = 120 мс | 30% | продвинутый |
| кластер из 3 и более узлов | 50 000 | p99 = 50 мс | более 50% | высокопроизводительный |
Уровень меняется от профиля: те же 4 vCPU на динамических страницах с обращениями к базе вытянут не 5000 RPS, а 1500-2000 RPS. Замер делают на целевом сценарии.
Отдельно стоит учитывать среду запуска. В тестах NGINX производительность на bare metal растёт линейно до восьми доступных CPU, а виртуализация ухудшает результат на небольшую, но измеримую величину: RPS в гипервизоре составляет около 80% от значения на bare metal (сравнение производительности NGINX). Запуск NGINX Ingress Controller в Kubernetes заметно ухудшает network-bound операции из-за контейнерного сетевого стека, тогда как для CPU-интенсивных операций вроде SSL/TLS handshakes разницы между традиционной и Kubernetes-средой нет, а TPS немного выше в Kubernetes (тесты NGINX в разных средах).
СУБД: как оценить производительность базы данных
Для PostgreSQL и аналогов ключевые метрики - TPS (транзакций в секунду), время отклика запроса, IOPS и задержка диска, а также запас по числу соединений.
| Конфигурация | TPS | Задержка | Запас | Уровень |
|---|---|---|---|---|
| 2 vCPU, 8 ГБ RAM, SATA SSD | 1000 | p95 = 50 мс | менее 10% | базовый |
| 4 vCPU, 16 ГБ RAM | 5000 | p95 = 20 мс | 15% | стандартный |
| 8 vCPU, 32 ГБ RAM, NVMe | 15 000 | p95 = 8 мс | 40% | продвинутый |
| шардирование, 4 и более шардов | 100 000 | p99 = 5 мс | более 50% | высокопроизводительный |
Для СУБД дисковый ввод-вывод определяет уровень чаще, чем процессор: рост TPS упирается в IOPS и задержку записи в журнал. Число соединений и объём рабочего набора в памяти проверяют отдельно от общего запаса RAM.
Системы хранения: NAS, SAN и дисковые массивы
| Конфигурация | Последовательная полоса | Случайные IOPS | Запас | Уровень |
|---|---|---|---|---|
| 4 HDD, RAIDZ1 | 200 МБ/с | 500 | менее 10% | базовый |
| 8 HDD, RAIDZ2 | 500 МБ/с | 2000 | 15% | стандартный |
| 12 HDD и 2 SSD кэша | 1,5 ГБ/с | 15 000 | 35% | продвинутый |
| массив NVMe | 10 ГБ/с | 100 000 | более 50% | высокопроизводительный |
Цифры зависят от числа дисков, уровня RAID, размера блока и профиля ввода-вывода. Массив на 4 HDD в зеркале покажет другие значения, чем тот же набор дисков в RAIDZ1, поэтому классификацию делают по замерам конкретной конфигурации.
Три типовых кейса с продвинутым уровнем выглядят так: веб-сервер Nginx 4 vCPU, 8 ГБ RAM, 5000 RPS, p95 = 120 мс, запас 30%; PostgreSQL 8 vCPU, 32 ГБ RAM, 15 000 TPS, p95 = 8 мс, запас 40%; TrueNAS на ZFS, 12 HDD и 2 SSD кэша, 1,5 ГБ/с, 15 000 IOPS, запас 35%. В каждом случае уровень определён по самому слабому ресурсу, а не по среднему запасу.
Типичные ошибки при измерении и интерпретации производительности
Почему среднее время отклика вводит в заблуждение
Среднее арифметическое сглаживает хвост. Показательный расчёт: 95% запросов по 100 мс и 5% по 2 секунды дают среднее около 200 мс, что выглядит приемлемо для отчёта, но каждый двадцатый запрос обслуживается в 20 раз дольше нормы. В SLA фиксируют перцентили: p95, p99, иногда p99,9. Среднее оставляют как вспомогательную величину для тренда.
Влияние прогрева и кэша на результаты замеров
Первый запрос всегда медленнее последующих: открываются соединения, читаются файлы конфигурации, прогревается кэш страниц. Обратный эффект даёт кэширование. Nginx с включённым кэшем отдаёт 10 000 RPS, без кэша - 2 000 RPS, и обе цифры получены на одном железе. Если не указать режим кэша, результат теряет смысл для классификации.
Семь ошибок, которые чаще всего приводят к неверной классификации:
- Замер на пустой системе без прогрева и без реалистичного профиля.
- Ориентация на среднее время отклика вместо p95 и p99.
- Отсутствие постоянного мониторинга: классификация строится по одному разовому тесту.
- Снятие метрик только на статике или только на лёгких запросах.
- Игнорирование кэша и его влияния на нагрузку на диск и базу данных.
- Сравнение систем с разными профилями нагрузки и разными сценариями.
- Расчёт запаса по среднему потреблению вместо пикового.
Перед любым нагрузочным тестом фиксируют сценарий, длительность прогрева, целевое время отклика и состояние кэшей. Без этого сравнивать результаты между запусками и между системами нельзя.
Алгоритм самопроверки: определяем текущий уровень и намечаем шаги
Последовательность из шести шагов занимает один рабочий цикл и даёт ответ, на каком уровне находится инфраструктура.
- Собрать метрики за период: RPS, p95 и p99, пропускную способность и IOPS, пиковое потребление CPU, RAM, диска и сети.
- Сопоставить значения с таблицей уровней по каждому типу системы.
- Определить текущий уровень по самому слабому показателю.
- Найти узкое место, то есть ресурс с минимальным запасом.
- Наметить шаги перехода: настройка, масштабирование, замена оборудования, кэширование.
- Повторить замеры после изменений и сравнить с исходными значениями.
Как выявить узкие места
Запас считается по каждому ресурсу, и ресурс с наименьшим запасом становится ограничением. Пример: запас CPU 20%, RAM 30%, дискового ввода-вывода 5%. Узкое место - диск, и добавление ядер или памяти не поднимет уровень системы.
Для сбора используют top, htop, iostat, vmstat, sar, а для долгосрочной картины - Prometheus с node_exporter и дашборды Grafana. Как настроить сбор метрик, какие пороги считать рабочими и какие ошибки оставляют инциденты незамеченными, разобрано в руководстве по мониторингу производительности серверов.
План перехода на следующий уровень
Порядок действий строят от самого дешёвого решения к самому дорогому.
- Настройка конфигурации. Параметры пулов соединений, размер рабочего набора в кэше, таймауты, размер блока ввода-вывода, алгоритм сжатия. Часто даёт 10-30% без затрат на железо.
- Кэширование. Кэш ответов на веб-сервере, кэш метаданных и SLOG в ZFS, кэш запросов в СУБД.
- Вертикальное масштабирование. Добавление vCPU, RAM, переход на NVMe.
- Горизонтальное масштабирование. Реплика чтения, второй узел приложения, балансировщик, шардирование.
- Замена оборудования и топологии. Другой уровень RAID, выделенный журнальный диск, сеть 25 Гбит/с.
Пример перехода со стандартного уровня на продвинутый для веб-сервера: добавить 2 vCPU, включить кэш ответов, вынести статику на отдельный узел и поднять запас до 30%. Шаги упорядочивают по отношению эффекта к стоимости, а после каждого этапа повторяют замеры, иначе легко потратить бюджет на ресурс, который не был узким местом. Как связать перцентили и целевые показатели с SLA и SLO, описано в материале о метриках, SLA и узких местах.
Актуальность методики в 2026 году и связь со стандартами
Методика опирается на то, что производительность входит в модель качества систем и программных продуктов ISO/IEC 25010:2023 отдельно от функциональной пригодности и надёжности (свойства качества ПО). Пороги производительности фиксируют в требованиях вместе с показателями надёжности и безопасности, а не вместо них.
Уровневый подход применяют и в регулировании. Приказ ФСТЭК №21 содержит 15 групп обязательных мер защиты, распределённых по четырём уровням защищённости ИСПДн (УЗ1-УЗ4) (обзор Приказа ФСТЭК №21). Предмет там другой, защищённость, а не производительность, и переносить эти пороги на инфраструктуру нельзя. Совпадает сам приём: система попадает в категорию по набору формальных признаков, а не по субъективной оценке.
Практический вывод для 2026 года простой: зафиксируйте целевые RPS, p95 и p99 и запас ресурсов в согласованном SLA или SLO, проверьте систему нагрузочным тестом на рабочем профиле и только после этого выбирайте уровень. Дальше остаётся следить за запасом по каждому ресурсу и планировать переход заранее, пока узкое место не проявилось в инциденте.