Метрики: 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 минут
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около 52 минут
Cоколо 3,65 дня
Dоколо 5 минут
3. Три сервиса по 99,9% включены последовательно. Какова доступность цепочки?
Aвыше 99,9%
Bоколо 99,7% — ниже, чем у каждого звена
Cровно 99,9%
Dоколо 99,99%
4. Почему среднюю задержку считают обманчивой метрикой?
AЕё сложно вычислить
BРедкие очень медленные запросы (хвост) теряются в среднем, хотя бьют по пользователям
CСреднее всегда больше p99
DСреднее нельзя измерить в продакшене
Поддержать проект