Найти в Дзене
ИнфоКомм

Этот вопрос спрашивают на IT собеседовании в Tinkoff и Яндекс. Перцентиль...

Распределение значений роста
Распределение значений роста

Привет, дорогой читатель!

Встречайте перцентиль. Почему его так любят и в чем его значение для IT отрасли расскажу в данной статье!

Так как большинству будет понятен пример из мира связи, то возьмем практическую историю про интернет-провайдеров (далее ISP).

Зачастую крупным клиентам (интернет площадки, крупные сервисы) счета выставляются не за определенную полосу пропускания (BW), а за ее фактическое потребление.

Почему так?

Если коротко, то ограничивать сервис по полосе в часы максимального спроса нельзя (вредно). Это связанно с особенностями работы TCP. Нельзя просто взять и поставить излишек клиентских запросов в очередь. А если ISP начнет шейпить скорость, то TCP за счет встроенных механизмов начнет равномерно снижать клиентские аппетиты, что приведет к увеличению latency, росту packet drops и прочим неприятным побочным эффектам. Одним словом сервис начнет деградировать, КПД канала начнет резко падать. Зачем это той же интернет площадке в дни черной пятницы? Клиенты будет не довольны! Но если не ограничивать сервис по полосе возникает 2 проблемы.
Первая: что если рост утилизации канала связан не с ростом количества клиентов сервиса, а с DDoS атакой? Вторая: как это все дело тарифицировать чтобы и ISP остался доволен и клиент не попал на большие деньги?

Начнем с первой проблемы -
DDoS.

Недоступность сервиса из-за DDoS
Недоступность сервиса из-за DDoS

Тут все просто и сложно одновременно. Разделить полезный трафик от паразитного довольно сложно. Есть разные подходы и методы защиты от DDoS. Можно защищаться на L7 уровне (web приложение), можно на уровне L3/L4. Что-то из этого обязательно должно быть!

Что-же касательно тарификации, то тут как раз и приходит на помощь
перцентиль.

В статистике есть такое понятие как "выброс". Если взглянуть на картинку в начале статьи, то вы можете заметить в начале числового ряда метрики "рост" очень маленькое значение роста, а в конце очень большое. Если учитывать в вычислении среднего значения эти показатели, то мы получим не очень точную картину относительно "средней температуры по больнице". Чтобы получить объективную картину нужно отсечь 5% значений с левого конца числового ряда и 5% с правого.

Основываясь на статистике при расчете потребления BW ISP берет в расчет 90% значений фактически потребленной полосы, реже 98%.

Среднее значение, рассчитанное таким образом называется усеченным (или урезанным) средним.

Однако ISP интересует не среднее, а перцентиль. Если с правого конца ряда метрики отсекается 5%, то в частности интересует значение 95-го перцентиля.

Как находится это значение? Да очень просто! Это значение самого большого значения метрики на границе отсечения. Опять же, если смотреть на картинку в начале статьи, то 95-й перцентиль это значение роста на этой самой границе.

Вооружившись понятийным аппаратом взглянем на график потребления BW клиентом за период тарификации:

График утилизации канала за месяц
График утилизации канала за месяц

На графики мы уже видим результат вычисления. Однако чтобы его выполнить ISP сводит в таблицу N значений измеренной BW с интервалом к примеру 5 минут. Если брать месяц (~30 дней), то количество таки измерений N=8640. Все эти значения сортируются, а последние 5% самых высоких значений отсекаются. В точке отсечения остается значения искомого перцентиля X.

M = N x 0,05, где M - количество верхних, отсекаемых значений
M = 8640 x 0,05 = 432
тогда X это 433 значение - точка отсечения.


К примеру по договору с ISP клиент арендует полосу 1Gbit/s. В течении месяца клиент несколько раз подвергался DDoS атакам. В моменты атак наблюдались кратковременные всплески утилизации до 9,5Gbit/s. Также несколько раз за месяц сервис проводил акции и утилизация каналы выходила за пределы 1Gbit/s.

Посчитав получилось, что X = 1,135 Gbit/s. Получается, что DDoS атаки и акционные всплески по утилизации остались за скобками.

Давайте теперь посчитаем, что было бы если бы ISP выставлял счета по максимальному значению потребляемой полосы. Предположим, что выделенный канал на 1Gbit/s стоит 100 т.р. При этом превышение тарифа оплачивается из расчета 100 р/(Mbit/s). При использовании 95-го перцентиля доплата будет рассчитываться так: (1135 - 1000) x 0.1 = 135 x 100р = 13,5 т.р. Т.е. переплата составит 13,5 т.р. А вот если не использовать перцентиль, то будет так: (9500 - 1000) x 100р = 850 т.р. Т.е. переплата составит 850 тысяч рублей.
Есть разница?) Конечно есть - и она была бы неадекватной если бы не 95-й перцентиль.

Данный пример показывает как используется
перцентиль. Область применения аналогичных вычислений очень широка. Особенно часто данный подход применяется при изучении больших массивов данных, в частности в системах мониторинга когда важно уловить тренды каких-либо событий.


Полезная литература и ссылки:

1. Статистика и котики, Владимир Савельев;

2. Лекторий по SRE (Тинькофф Образование), Дмитрий Масленников.
В частности про гистограммы, квантили, медианы и
перцентили: Цели мониторинга, логи и метрики (~ с 16-ой минуты ).

P.S. Если материал был полезен не забывайте отблагодарить лайком или комментарием. Ну а лучшей похвалой будет ваша регистрация в академии Инфокомм.