Наша интуиция про статистику в performance и availability задачах к сожалению нас часто подводит.
В докладе я вас буду пытаться обмануть, а вы будете обманываться!
4. События — время и статус ответа
Что мы делаем с этими событиями
Мониторим — контроль по порогам, что всё хорошо
Графики — для наглядности операторам
67. А как же пользователи?
• Сессии длятся долго
• Общее впечатление об отзывчивости сервиса
• Один плохой response time сильно влияет
• Важные ajax’ы и прочие ресурсы
68. Вероятность одной страницы быть лучше чем p99 = 99% =)
Вероятность N страницам быть не хуже p99 = (0.99 ^ N) * 100%
% пользователей которые наткнутся на что-то хуже p99
= (1 - (0.99 ^ N)) * 100%
Для N = 10 это 10%
Для p99.9 это 1%
Привет, Паша и я тоже усредняю перцентили
Почему я могу говорить на эту тему — по должности приходится много про это думать и читать и думать
Мы делаем мониторинг, чтобы тысячи инженеров
Набралось
Наболело
Хочется поделиться и снять
StatsD — такая штука в которую вы легко оплёвываете свои измерения и она их агрегирует, считает от них статистику, дает удобно мониторить
Появилась и набирает популярность идея “мониторь (измеряй) всё”
Но, в statsD не без проблем — а популярность это раздувает.
Сервис - запросы - очереди
Service times
Response times
Мониторинг важен! Чтобы пользователи были довольны.
Но “давай добавим мониторинг” — неочевидные грабли, и интуиция вас и нас подводит!
Одна из задач моего (доклада) — показать вам, что вы может быть кое-что не так понимали, и чтобы вы перестали доверять своей интуиции в области мат статистики.
Бывают тормоза и отказы в обслуживании
Отказы - фейл или таймаут (клиентский или внутренний)
Сохраняем инфо — event.log
Для веб — access.log, задержки — response time, отказы — http status
Бывают тормоза и отказы в обслуживании
Отказы - фейл или таймаут (клиентский или внутренний)
Сохраняем инфо — event.log
Для веб — access.log, задержки — response time, отказы — http status
Хорошо = нормально, как обычно
Мониторинг бывает только по порогам, д(п)оказать это — одна из целей моего доклада
В конце концов всё сводится к if (branch / jump) инструкции
Нас в okmeter часто спрашивают — «Что хочется от порога - не статика, а сложная модель которая может быть преобразована в формулу базовыми данными для которой являются значения измерений в прошлых интервалах»
Графики
Наглядность важна — операторы принимают решения
Показывают историю, импакт, динамику!
Из этих двух пунктов следует какую и как использовать математику в мониторинге !
Тайм лайн — чтобы показать историю динамику
Бывают Stacked, линии, точки и тп.
Каждый момент времени — вертикальная полоска
Тайм лайн — чтобы показать историю динамику
Бывают Stacked, линии, точки и тп.
Каждый момент времени — вертикальная полоска
Почему такой!
А у нас есть только одна вертикальная полоска (ну 800, ну даже 1600 точек на вашем retina экране)
Реально у каждого типа свои тайминги
Свои частоты по результатам и тп
Ну то есть можно смотреть и обобщенно
Но если разделять, то можно лучше влавствовать
То есть все равно даже с одним “типом” запросов будут проблемы — ну поиск l=20 а ктото l=100
Или тот же самый branch (mis)prediction в проце
А у нас есть только одна вертикальная полоска (ну 800, ну даже 1600 точек на вашем retina экране)
Реально у каждого типа свои тайминги
Свои частоты по результатам и тп
Ну то есть можно смотреть и обобщенно
Но если разделять, то можно лучше влавствовать
То есть все равно даже с одним “типом” запросов будут проблемы — ну поиск l=20 а ктото l=100
Или тот же самый branch (mis)prediction в проце
Плотность распределения — откладываем по горизонтали значение, а вверх количество
Сначала еще раз — что такое тайминг?
Область определения для таймингов [0, inf) — иногда реально [0, max timeout]
Из непонимания этого оч частая ошибка — неправильное применение идей для Нормального распределения
Сначала еще раз — что такое тайминг?
Область определения для таймингов [0, inf) — иногда реально [0, max timeout]
Из непонимания этого оч частая ошибка — неправильное применение идей для Нормального распределения
На самом деле скорее что то такое, нижняя граница (тайминг меньше нуля!)
Люди говорят “о, у нас log normal” — нет! Это модель. Реальность может быть сильно или несильно похожа на модель
Хотя на самом деле может быть вообще-то довольно разнообразным.
Мы тут видим т.наз Би модальное ! От слова “мода, т.е. Пик, максимум. Их два.
(Page)Кеш HIT и MISS или length=20 а кто-то length=1000
Реально же вот как-то так — у каждого типа свои тайминги, свои частоты по результатам и тп
Вот мы допустим, поняли как устроено ваше распределение — как сделать график?
Вот мы допустим, поняли как устроено ваше распределение
Все равно надо его на график отразить - pdf можно только так себе нарисовать
Что делаем? Берем статистику!
Вот мы допустим, поняли как устроено ваше распределение
Все равно надо его на график отразить - pdf можно только так себе нарисовать
Что делаем? Берем статистику!
Вот мы допустим, поняли как устроено ваше распределение
Все равно надо его на график отразить - pdf можно только так себе нарисовать
Что делаем? Берем статистику!
Вот мы допустим, поняли как устроено ваше распределение
Все равно надо его на график отразить - pdf можно только так себе нарисовать
Что делаем? Берем статистику!
Вот мы допустим, поняли как устроено ваше распределение
Все равно надо его на график отразить - pdf можно только так себе нарисовать
Что делаем? Берем среднее и получаем time series chart
Сре́днее арифмети́ческое — сумма всех чисел, делённая на их количество.
Самое известно.
Не так плохо. В смысле что есть причины для которых оно придумано было. — Мат ожидание
Что такое мат ожидание?
Статическое / квази-статическое — днем / ночью и т.п.
Недостатки: не соответствует интуитивному пониманию «среднего»
Мода!
Медиана! — для дискретных нечетко определена.
OKAY
а усечённое, геометрическое, гармоническое, степенное?
Любая статистика, т.е. (условно) одно число от N наблюдений — это lossy сжатие с потерей данных.
Фанаты перцентилей — нет!
Как не бери от сложного распределения одно число, оно всё равно на разные вопросы не будет давать ответы.
Ну то есть мы вот эти все распределения в каждую минуту превратили просто в число
И уже можем сделать график
По нему можно увидеть, что ситуация квази-статическая =)
Ну то есть среднее болтается в полтора раза, но не так что прям на порядок меняется.
А что же это на самом деле нарисовали такое? “СРЕДНЕЕ”?
Игра
Сеанс черной магии с разоблачением
Ну вот это то что называется log normal распределение — если от него взять логорифм то получится нормальное.
Т.е. Буквально это экспонента от нормального — примерно такое действительно можно часто наблюдать во всяких веб-сервисах
Ну точнее наблюдать, что-то похожее.
Игра
Сеанс черной магии с разоблачением
Игра
Сеанс черной магии с разоблачением
Игра
Сеанс черной магии с разоблачением
Игра
Сеанс черной магии с разоблачением
1
Физ смысл — цент тяжести. Поэтому одно “далекое” измерение перевешивает, так получается по правилу рычага
2
меньшинство с аномальными значениями серьёзно смещают.
next
Колокол!
2
меньшинство с аномальными значениями серьёзно смещают.
Выбросы могут быть и частью распределения — так, в нормальном распределении каждое 22-е измерение будет выходить из «двух сигм», и каждое 370-е — из трёх.
Почему мы вообще хотим что-то “устойчивое к выбросам” ?
Какую на самом деле задачу решаем?
Исследовательская — подходит. От туда и взялось. Для него и хотим робастность. Ну там вася который измерял заснул и получился выброс
Берем МНК или Макс правдоподобие — т.е. исследование основной части закономерности. Понятно что мы детали или шумы хотим отбросить.
Тут по среднему мы узнаем / поймем только лишь какую-то среднюю, центральную закономерность.
Мониторинг.
УЖе знаем “как должно” “как хотим”
Что-то робастное к выбросам не подходит
Т.к. Мы хотим иначе мы просто ХУДШЕЕ отбрасываем — такие взяли и закрыли глазки или отвернулись и надели розовые очки.
Понимания нет — хотим исследовать.
Чтобы что?
Потом мониторить
Ставить цель улучшить
Ограничения / свободы
Высокоточный результат важен? Нет.
Нужно ли делать систему аналитики? Может достаточно “на коленке” один раз посчитать?
Есть ли чужое/априорное знание? Используем как отправную точку
На примере. Что за система у нас? Интернет сервис для людей =)
Для веб
Google говорит надо 400ms время ответа
Shopzilla / aws — задержки = снижение конверсии
Основные или важные страницы
Ведут себя по разному! Товар vs поиск
Надо понимать для каждого типа
Остальные — много разных, хорошо бы понимать хотя бы в целом
Это мы уже видели
Это распределение вероятности — ну или частот в данном случае, т.к. это просто наблюдения снятые с реальной системы.
Теперь мы хотим как-то охарактеризовать эту штуку, чтобы следить за ней.
Одним числом характеризовать, как мы видели, что это не очень хорошая идея.
Ну давайте несколькими числами!
Тут вот и выходят на сцену перцентили!
Тут вот и выходят на сцену перцентили!
Медиану мы уже видели — это ...
Больше перцентилей
Игра
Сеанс черной магии с разоблачением
Еще одна
Почему ?
Там же уже нет ничего?
Почему ?
Там же уже нет ничего?
Почему ?
Там же уже нет ничего?
Последний (ну так)
А, вас уже не обманешь — обрезано, значит там спрятано, где-то примерно где root conf, да?
~20 мс типа
Смотрим...
Нет, нету
Ок, значит 25
Или 30 Кто за 30?
Кто за 35
35 это только p90!
А p95 же где?
Сожмём еще !
Блиииин, ну всё давайте остановимся.
Смотрите — мои глаза мне говорят:
почти все запросы наших пользователей лежат вот тут — до 50 ms
Но p95 каким-то образом вон там.
Почему так?
Потому что Log - мозгу это сильно непривычно.
Ок, теперь когда мы исследовательскую задачу решили, поняли как у нас устроено распределение.
Теперь хотим контроль, т.е. Задать пороги и по ним отслеживать.
Ну ОК — раз p95 такая далёкая, давайте по ней всё смотреть и будет счастье
т.к. Всё остальное заведомо лучше
ТАк?
Нет
Ок, теперь когда мы исследовательскую задачу решили
Теперь хотим контроль, т.е. Задать пороги и по ним отслеживать.
Ну ОК — раз p95 такая далёкая, давайте по ней всё смотреть и будет счастье
т.к. Всё остальное заведомо лучше
ТАк?
Нет
Обычно все говорят SLA, хотя там есть различия. но для нас и так норм.
Ну вот зафиксировали типа себе такую планку — ОК? Ну там триггер завели на это. ОК?
Ок, теперь когда мы исследовательскую задачу решили
Теперь хотим контроль, т.е. Задать пороги и по ним отслеживать.
Ну ОК — раз p95 такая далёкая, давайте по ней всё смотреть и будет счастье
т.к. Всё остальное заведомо лучше
ТАк?
Нет
Обычно все говорят SLA, хотя там есть различия. но для нас и так норм.
Ну вот зафиксировали типа себе такую планку — ОК? Ну там триггер завели на это. ОК?
Ок, теперь когда мы исследовательскую задачу решили
Теперь хотим контроль, т.е. Задать пороги и по ним отслеживать.
Ну ОК — раз p95 такая далёкая, давайте по ней всё смотреть и будет счастье
т.к. Всё остальное заведомо лучше
ТАк?
Нет
Обычно все говорят SLA, хотя там есть различия. но для нас и так норм.
Ну вот зафиксировали типа себе такую планку — ОК? Ну там триггер завели на это. ОК?
То есть я хочу еще раз это обсудить
Что мы тут упускаем из виду.
Часто я вижу в системах мониторинга вот эти вот p95
Во-первых 95 из 100 это значит есть еще 5%
Во-первых 95 из 100 это значит есть еще 5%
Так вот где они?
Давайте сожмем график — мы уже делали, там ничего не видно просто становится.
ВОТ ОНИ
Ну это условность некая — они конечно не там, мы просто их собрали в этот последний столбец, чтобы их размазанными не смотреть
И сразу все стало на свои места.
5% это вообще-то не мало.
каждый двадцатый
Так прям сразу понятно, что 95 видимо мало.
Что у нас больше 95? Ну 99 это красиво.
Ну бывает конечно у кое-кого и p99 мониторится, я видел пару раз, но не часто.
Ну бывает и 99.9
но сейчас я попробую показать что и 99 это вообще-то не достаточно.
Что у нас больше 95? Ну 99 это красиво.
Ну бывает конечно у кое-кого и p99 мониторится, я видел пару раз, но не часто.
Ну бывает и 99.9
но сейчас я попробую показать что и 3 - 999 это вообще-то не то, чтобы много,
Мы говорим про мониторинг конечно. 999 для мониторинга, это мало!
Что у нас больше 95? Ну 99 это красиво.
Ну бывает конечно у кое-кого и p99 мониторится, я видел пару раз, но не часто.
Ну бывает и 99.9
но сейчас я попробую показать что и 3 - 999 это вообще-то не то, чтобы много,
Мы говорим про мониторинг конечно. 999 для мониторинга, это мало!
Ну всем сейчас доступны легко всякие графики.
Ну и очень просто — давайте измерим с реальной системы p95 или 99 и нарисуем
Ну и очень просто — давайте измерим с реальной системы p95 или 99 и нарисуем
Ну среднее мы уже рисовали, давайте для начала посмотрим на медиану p50
Выглядит стабильно и хорошо в течение дня.
Ну вот прям хоть заводи триггер что она не больше там 2.1мс
Ну давайте все таки p90
Ну давайте все таки p90
Ну ок, она по-шумнее - где казалось бы Робастность пресловутая, да?
Ну давайте на p95 и p99 посмотрим
Ну давайте все таки p90
Ну ок, она по-шумнее - где казалось бы Робастность пресловутая, да?
Ну давайте на p95 и p99 посмотрим
Ну вот 99
Ну ок, что мы видим?
она по-шумнее - где казалось бы Робастность пресловутая, да?
Ну разброс гиганский между p50 и p99 — но это мы уже видели. Ожидаемо.
Ну то есть вот я хочу спросить — КАКОЙ ПОРОГ для p99 мы тут выберем.
Ну вот видно что она где-то от 0.5с до 5 с , значит можно порог в 5 поставить
НЕТ нет нет
Ваш мозг усреднил картинку и выбрал порог — ну допустим даже по верхней границе
Но на самом деле так нельзя
Опять статистика и интуиция разошлись
А что на самом деле?
В десять раз больше чем нас обманул наш мозг своей интуицией.
Как это получается?
Это если мы посмотрим с все наблюдения за 24 часа
А у нас какое-то распределение с длинным хвостом, и он перетягивает
и несмотря на всю робастность перцентилей
Реально вот так
Как это получается?
Ну во первых уж так мозг устроен =)
Во вторых у вашего мониторинга в день 1440 минутных замеров
В данном случае перцентилей
Если у вас чаще чем раз в минуту — ну значит еще хуше.
Старшие перцентили как мы выше заметили — более шумные.
Вот и получается, что мы замеряем каждую минуту и это к реальным перцентилям сервиса не относится никак.
Ну то есть часто (из 1500 раз то!!) нам просто везёт и мы не видим этих реальных p99
А их при условии 100rps (ну средненький проект не highload) это 1 запрос в минуту хуже чем этот минутный p99, 60 в час или 1.4 тысячи в день.
ДА ПОФИГ, нормально!
И этот эффект тем хуже чем чаще вы мониторите перцентиль и чем больше у вас пользователей/RPS.
Во вторых у вас реально система работает не статически а квази — ночью запросов меньше, но зато кеши холоднее и т.п.
Ну и тут мы на распутье — нам шашечки или ехать.
Если вы хотите математически корректное решение, то нам нужно придумать модель сервиса и искать например максимальным правдоподобием это p99
Потому что просто измерять — не выйдет — мы видели что оно просто растет с ростом времени измерения.
Если же вы хотите инженерную задачу решать — то что то приближенное можно получить
Просто ссылаясь на смотря на более высокую перцентиль.
На какую конкретно — не понятно, опять таки зависит от модели.
Вот тут пример что 99 всреднем (ха-ха) похожа на “настроящую” 97
Ну или вот 100-тая (т.е. максимум) как приближение “настоящей” 99ой
Метод конечно нематематичный и не то чтобы я его рекомендовал, просто как наблюдение привожу.
Про что мы забыли?
Все это подходит, если мы мониторим какие-то обобщенные запросы
Ну например в базу данных или что-то такое.
Но в конечном счете мы тут на РИТе говорим в основном про интерент сервисы
И там пользователи
И у пользователей сессия и глубина просмотра. И получается вот что
И у пользователей сессия и глубина просмотра. И получается вот что
При глубине 10 — 10% ваших пользователей получат “p99”
И это НАПОМИНАЮ про настоящуюю p99 и p999 соответственно, а не минутную