Метрики: latency, throughput и «девятки» доступности

Нельзя улучшить то, что не измеряешь: разберём язык, на котором говорят о качестве систем.

Перцентиль p99 — значение, которое не превышено в 99% запросов. p99 латентности = 300 мс означает: 99% запросов быстрее 300 мс, а 1% — медленнее.

Latency и перцентили

Средняя задержка обманчива. Если 99 запросов по 10 мс и один по 5 секунд, среднее ≈ 60 мс выглядит прекрасно, но один пользователь ждал 5 секунд. Поэтому смотрят на перцентили, а не на среднее.

МетрикаСмыслЗачем
p50 (медиана)половина запросов быстрее этоготипичный опыт пользователя
p95 / p99хвост распределенияопыт «неудачников», самых медленных запросов
p999самые редкие медленныекритично при огромном трафике

Почему хвост важен: если страница делает 100 внутренних запросов, и каждый имеет p99 = 1%, то вероятность, что хотя бы один попадёт в медленный хвост, близка к 63%. Хвостовая латентность бьёт по системе сильнее, чем кажется.

Throughput

Throughput — сколько запросов система обрабатывает в секунду. Latency и throughput связаны, но это разные вещи: можно иметь низкую задержку и низкую пропускную способность (быстрый, но слабый сервер) и наоборот. Цель — высокий throughput при приемлемой latency.

Доступность и «девятки»

Доступность измеряют в процентах аптайма, которые называют «девятками». Каждая девятка на порядок сокращает допустимый простой.

ДоступностьПростой в годПростой в сутки
99% (две девятки)~3,65 дня~14,4 минуты
99,9% (три девятки)~8,8 часа~1,4 минуты
99,99% (четыре девятки)~52 минуты~8,6 секунды
99,999% (пять девяток)~5,3 минуты~0,9 секунды

Каждая дополнительная девятка стоит дорого: резервирование, мультирегиональность, автоматический failover. Не обещайте пять девяток там, где бизнесу хватит трёх. Это прямой компромисс «надёжность против стоимости».

Доступность последовательных компонентов

Если запрос проходит через несколько компонентов подряд, их доступности перемножаются. Три сервиса по 99,9% дают:

0,999 * 0,999 * 0,999 ≈ 0,997 = 99,7%

Цепочка всегда менее надёжна, чем слабейшее звено. Поэтому для надёжности компоненты дублируют параллельно (резервирование), а не выстраивают в длинную цепь.

SLA, SLO, SLI

SLIIndicator — что измеряем (например, доля успешных ответов).
SLOObjective — внутренняя цель (например, 99,95% успешных).
SLAAgreement — обещание клиенту с санкциями за нарушение.

Итог

  • Смотрите на перцентили (p99), а не на среднее: хвост определяет реальный опыт.
  • Каждая «девятка» сокращает допустимый простой в ~10 раз и резко повышает цену.
  • Доступности последовательных компонентов перемножаются — цепочка слабее звена.
Проверьте себя
1. Что означает p99 латентности = 250 мс?
AСредняя задержка равна 250 мс
B99% запросов быстрее 250 мс, а 1% — медленнее
CВсе запросы быстрее 250 мс
D1% запросов быстрее 250 мс
2. Сколько примерно простоя в год допускает доступность 99,99%?
Aоколо 8,8 часа
Bоколо 3,65 дня
Cоколо 52 минут
Dоколо 5 минут
3. Три сервиса по 99,9% включены последовательно. Какова доступность цепочки?
Aвыше 99,9%
Bровно 99,9%
Cоколо 99,99%
Dоколо 99,7% — ниже, чем у каждого звена
4. Почему среднюю задержку считают обманчивой метрикой?
AРедкие очень медленные запросы (хвост) теряются в среднем, хотя бьют по пользователям
BЕё сложно вычислить
CСреднее всегда больше p99
DСреднее нельзя измерить в продакшене