Пейджер

🌍 Добрай раніцы! 🇧🇾

TL;DR
  • Среднее арифметическое не показывает реальную картину системы
  • P99 — время выполнения 99% запросов, а не среднее значение
  • Пример: один медленный запрос искажает среднее до 199ms
  • Сортировка по возрастанию и формула для расчёта процентиля
🌍 Добрай раніцы! 🇧🇾

Давайте сегодня поговорим про процентили 📊, частенько их встречаю (так как люблю позалипать в графики, посмотреть метрики). Знаю, что не все слышали про них, поэтому будет очень интересно.

Кстати триггер поста, это новость из Минска🗞, средняя зарплата в ноябре 2025г. составила 3,653 рубля 💰.
Я подумал как же удобно считать просто среднюю, вот если бы показали процентили, было бы куда нагляднее.

💡 Cреднее арифметическое, не всегда является числом объективным.

🚀 Мотивация

Cидишь ты такой(ая) утром ☕️, открываешь систему мониторинга и наблюдаешь:

Average response: 250ms ✅
Error rate: 0.5% ✅

Ну песня, все зеленое. Но пока ты просыпаешься и просыпается твоя любовь к людям ❤️, начинают приходить какие-то сообщения в slack 💬, а там вопросы в потолок.

- Почему сегодня так долго крутятся спиннеры?

В этот момент осторожно открываешь метрики подробнее 🔍, и наблюдаешь, что P95 равен 20 секундам. Ужас! Хьюстон у нас проблема! 🚨

Что такое процентили

Это способ понять, как реально работает система 🖥, а не в среднем по больнице 🏥.

🟠P50 (медиана) — 50% запросов быстрее этого значения
🟠P95 — 95% запросов быстрее
🟠P99 — 99% запросов быстрее
🟠P99.9 — 99.9% запросов быстрее

Есть average, оно понятно как считается, складываем все показатели и делим на их кол-во, а с процентилями не так, сначала мы должны отсортировать по возрастанию, а дальше взять процент от всех значений и все что справа, получается больше (дольше выполнение) ⏱️

☝️ На пальцах

Представим:

➡️ 99 запросов выполнилось за 100ms
➡️ 1 запрос завис на 10 секунд

Среднее время: (99×100 + 1×10000) / 100 = 199ms

Выглядит очень неплохо? 🤔 А теперь реальность:

🟠P50: 100ms ✅
🟠P95: 100ms ✅
🟠P99: 10000ms 💥

Один процент пользователей ждёт 10 секунд 😱, но среднее показывает, что всё у нас в огнях 🔥.
И тут вы должны понять, что для вас есть 1% — это 10 пользователей или может быть 1000? Важно ли вам реагировать на такое количество? 🤷‍♂️

🛍 Как посчитать процентиль

1️⃣ Отсортируйте значения по возрастанию 📈
2️⃣ Индекс = (Процентиль / 100) × Количество элементов
3️⃣ Округлите вверх и возьмите элемент по этому индексу

Пример:
Есть 10 запросов: [100, 120, 95, 10000, 110, 105, 98, 115, 9500, 100]

🟠Сортируем: [95, 98, 100, 100, 105, 110, 115, 120, 9500, 10000]
🟠P95 = элемент на позиции (95/100) × 10 = 9.5 ≈ 10-й элемент === 10000ms

✏️ Best Practices

🟠 Смотрите P95/P99, а не только среднее — там живут ваши чудовища из под кровати 👻
🟠 Не забывайте следить за P99.9 для критичных сервисов — это ваш worst case 🔴
🟠 Алерты на процентили это топ
🟠 Логируйте slow requests — если запрос попал в top 1% по времени, пишите его в логи с деталями 📝
🟠 Используйте histogram, а не summary в Prometheus — можно агрегировать, считать любые процентили 📉
🟠 P50 + P95 + P99 — золотая тройка для дашбордов 🏆

💬 Делитесь своим мнением в комментариях👇! Если вам понравился пост, не забудьте поставить лайк! 👍

#MONITORING #BESTPRACTICES #DevOps
Медиа 1
Хотите больше таких постов?
Подпишитесь на канал и читайте продолжение в Telegram.
Подписаться на @ivanchikovitclub Открыть пост в Telegram