Как меряется производительность, скажем, веб-сайтов? Каждый запрос к главным страницам сайта выполняется за определенное время, которое варьируется в зависимости от множества факторов, в том числе случайных, в том числе не находящихся под нашим контролем, в том числе являющихся следствием разных ошибок. Прогрет или не прогрет кэш, не выпал ли в своп сервер БД, не стартовал ли на фоне какой-нибудь случайный процесс, который отожрал CPU и диск, и т. п. Поэтому мы делаем вот что: мы берем время выполнения скажем 100000 запросов, выстраиваем их в длинный список, потом сортируем по возрастанию (забывая про то, когда именно случился тот или иной запрос), а потом берем _одно_ значение, находящееся по номеру 99000. _Все_ остальные значения мы (пока что) выбрасываем и игнорируем — нас интересует только одно значение, которое находится на т. н. 99-квантили (потому что 99%). Именно полученное значение служит базовой метрикой учета производительности. [Это вводное описание базовой метафоры для телеги из https://mokum.place/squadette/165117]
Работа с квантилями чудовищно контр-интуитивна. Во-первых, вызывает негодование тот факт, что мы выбрасываем все данные и оставляем только одно значение. Во-вторых, мы (почти всегда) игнорируем максимальные значения, потому что в сложных системах крайне сложно добиться какого бы то ни было контроля над максимальными значениями (они влияют, по определению, только меньше чем на 1% запросов). В-третьих, квантили не складываются. Например, если мы посчитаем 99-квантиль за каждый день недели, то мы _не можем_ выяснить на их основании 99-квантиль за всю неделю. Мы обязаны взять все 700000 отсчетов, отсортировать их, и взять отсчет номер 693000 и выбросить все остальные. Этот отсчет в общем случае может быть сколь угодно далеким в любую сторону от 99-квантилей по каждому конкретному дню. ‎- псы в рапиде
Если мы очень крутые, например мы Google или Amazon, то мы можем выбрать еще более амбициозную квантиль, например 99.5% или 99.9%. Так как форма короткого хвоста может задираться вверх как угодно быстро, то чтобы обеспечить контролируемость времени ответа на этой новой квантили, от нас может потребоваться совершенно любое количество усилий. Продвижение на эти несчастные половину процентных пункта может занять, например, год переписывания всей системы и установки десятков тысяч новых серверов в разных точках земного шара. ‎- псы в рапиде
В принципе для простоты можно представить себе, что мы хотим сделать так, чтобы автобусами в некотором городе было удобно пользоваться. Например, мы хотим, чтобы 99% пользователей автобусов тратили на поездку не более 30 минут (ну, в зависимости от размера города). Мы начинаем собирать информацию, записывая время прохода в салон и время выхода из салона. Очень большое количество пользователей просто едут на пару остановок, и поэтому они всегда едут очень быстро. Где-то возникает пробка (постоянная или временная, потому что грузовик сломался и перегородил дорогу). Иногда автобус ломается по дороге и 50 человек находятся в нем полтора часа (потому что заблокировало двери), и их user experience ммм страдает. Иногда человек вообще умирает от сердечного приступа. У нас есть ограничение сверху — например, мы при всем желании не можем поставить на автобус реактивный двигатель и гонять по городу на скорости 300 км/час. У нас есть финансовые, организационные и легальные ограничения. ‎- псы в рапиде
Теперь мы можем начать рассматривать собственно все эти поездки и анализировать их — особенно те, что выходят за рамки 99-квантили. Например, мы можем завести выделенные линии для автобусов. Мы можем снизить количество автомобилей административными мерами. Мы можем отремонтировать моторы и сделать их мощнее и эффективнее. При все более тщательном рассматривании ситуации мы будем находить множество совершенно неочевидных проблем, которые влияют только на одну десятую процента поездок, но если мы исправим скажем 20 таких проблем, то получим вполне интересные два процентных пункта прироста количества поездок, укладывающихся в норму. Произойти может все, что угодно — например, водители тратят несколько минут на то, чтобы найти ключ от автобуса и не могут войти в салон — можно дать им специальный удобный брелок на резинке, пристегивающийся к поясу, чтобы его невозможно было оставить где-то и чтобы он всегда был под рукой. Такие решения могут быть совершенно не очевидны, если просто думать про "город, дороги и автобусы". ‎- псы в рапиде
ну как-то так ‎- псы в рапиде
Разве только одно значение? Я был уверен, что 99-квантиль это не одно значение, а усреднение ряда значений вокруг 99000. ‎- BUG: user_id=<7>
Я вижу в твоих рассуждениях и выводах несколько неточностей, но абсолютно не в состоянии сейчас вести разумные дискуссии: валяюсь с отитом, обколотый и обожранный всяким неприятным. Давай я чуть поправлюсь и мы с тобой чуть подробней про это поговорим, хорошо? ‎- eth0
я хочу добавить к вводной части про девятки две очевидных вещи, которые тут не проговорены явно, но часто помогают мне объяснить их другим людям: 1. каждая следующая девятка уменьшает возможную частоту плохого user experience в десять раз, то есть, если при 99% довольных пассажиров каждый сотый может остаться недоволен, то при 99.9% - каждый тысячный; 2. это работает не только на разных пассажирах, но и на поездках одного пассажира (или юзера вебсайта), то есть, каждая сотая поездка (запрос) против каждой тысячной. ваш К.О. ‎- Сад расходящихся фидиков
эээ, а зачем их усреднять? 99-квантиль - величина, отделяющая 99% наименьших значений от 1% наибольших. ‎- work/work balance
.99-квантиль случайной величины r — это такое x, что P(r < x) = 0.99. Когда мы берём и кидаем эту случайную величину 10000 раз со значениями r_i, мы получаем другую, дискретизированную величину r' со свойством P(r' = r_i) = 1/10000 для любого i. .99-квантиль этой величины и есть то r_i, меньше которого 99% процентов остальных, то есть 99000-е значение (или, если придираться, 90001-е, 90000-е было бы, если в определении было P(r <= x)). Усреднение ряда значений смысла не имеет, и ничего, кроме добавления в информацию шума, не делает. ‎- middle out-of-sight
Да, извините, отдых негативно влияет на когнитивные функции ‎- BUG: user_id=<7>
@metashurick: бгггг, а ты с нуля начинаешь считать индексы или с единицы? ‎- псы в рапиде
Хуиндексы. Это вопрос статистики, а не инжиниринга. В статистике различие между “P(r < x)” и “<=” обычно несущественно, поскольку рассматриваемые распределения обычно абсолютно непрерывны и P(r = x) = 0 всегда, а в прикладной обычно берут размер выборки такой, чтобы отличие было в пределах шума в данных. :) ‎- middle out-of-sight
@metashurick: Я про 99000 vs 99001. ‎- псы в рапиде
А, ты про real-life word choice? Я обычно говорю "первый" про элемент, имеющий индекс ноль. Извини, если чо, я выпил some strong Belgian ale и подтупливаю. ‎- middle out-of-sight