Post on 16-Apr-2017
Контекст108 запросов в секунду1106 потоков1102 рабочих станций1
1
Доклад о том, как адекватно мониторить такую систему
Проблемы измеренияАдекватность самих измерений1Импульс в квантовой механике1Масса отдельных частей здорового человека
Проблемы измеренияАдекватность самих измерений1Импульс в квантовой механике1Масса отдельных частей здорового человека1
Адекватность обработки1Средняя температура по больнице
Измерение времениВремя реакции системы на действие пользователя или запрос другой системы1Среднее1Минимум и максимум
Измерение времениВремя реакции системы на действие пользователя или запрос другой системы1Среднее1Минимум и максимум1Перцентили и квантили
Распределение
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
147
26
6257
27
10424
секунды
количество событий
Folsom (библиотека)Базируется на ETS1Поддерживает счётчики, одиночные значения, гистограммы и “истории”
Folsom (библиотека)Базируется на ETS1Поддерживает счётчики, одиночные значения, гистограммы и “истории”1Прост в использовании
Folsom (библиотека)Базируется на ETS1Поддерживает счётчики, одиночные значения, гистограммы и “истории”1Прост в использовании1Не поддерживает экспорт метрик1https://github.com/boundary/folsom
Folsom проблемыОграничения на количество (по умолчанию 1400 ETS таблиц)1Потокоопасность1Блокирующая запись
Exometer (библиотека)Больше видов гистограмм1Включает folsom1Кастомизация представления метрики1Отправка в графит/statsd или вывод на экран1https://github.com/Feuerlabs/exometer
HDR HistogramСпециализируется на временных задержках1Реализована на Си1Нет потоковой безопасности1https://github.com/HdrHistogram/hdr_histogram_erl
Экспериментскладывание чисел “в гистограмму”11 и 300 потоков1ec2 c4.8xlarge node (36 ядер) и laptop (4 ядра)
Экспериментскладывание чисел “в гистограмму”11 и 300 потоков1ec2 c4.8xlarge node (36 ядер) и laptop (4 ядра)120 запусков с последующим усреднением
Экспериментскладывание чисел “в гистограмму”11 и 300 потоков1ec2 c4.8xlarge node (36 ядер) и laptop (4 ядра)120 запусков с последующим усреднением1скрипты доступны по адресу1https://github.com/parsifal-47/erlperf
Folsom default
Folsom exdec
Folsom slide 1024
Folsom slide uniform
Exometer default
HDR histogram
0 2 4 6 8
0,34
5,5
4,9
7,3
6,2
4,6
0,4
6,2
5,2
6,5
6,4
5,1
Результаты 1 потокВремя в секундах на 3*106 операций, больше=хуже
Laptop 4 ядра синий цвет с4.8xlarge 36 ядер зелёный
Folsom default
Folsom exdec
Folsom slide 1024
Folsom slide uniform
Exometer default
HDR histogram
0 17,5 35 52,5 70
0,26
58
65
0,96
0,92
45
0,09
1,2
16,8
1,5
1,8
29
Результаты 300Время в секундах на 3*106 операций, больше=хуже
Laptop 4 ядра синий цвет
с4.8xlarge 36 ядер зелёный
Hdr_histogramВремя в секундах на 3*106 операций, больше=хуже
количество потоков
0
0,1
0,2
0,3
0,4
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
4 ядра
36 ядер
Быстрые счётчикиgen_server:call — плохо1gen_server:cast — очень плохо1ets counter1Сэмплированные счётчики
Результаты laptopВремя в секундах на 3*106 операций, больше=хуже
Inc tailrec
Folsom
Exometer
HDR histogram
0 1 2 3 4
0,4
1,3
3,2
0,02
0,1
0,4
0,8
0,007 1 поток зелёный
300 потоков синий цвет
Результаты c4.8xlargeВремя в секундах на 3*106 операций, больше=хуже
Inc tailrec
Folsom
Exometer
HDR histogram
0 1 2 3 4
0,34
1,1
2,9
0,015
0,26
0,09
0,25
0,003 1 поток зелёный
300 потоков синий цвет
Случайные числаЧасто используются при тестировании1Можно использовать для сэмплирования1Иногда используют время как случайное число
Скорость генерацииRandom
Timestamp
SSL random
Erlang now
0,01 1 1000,3
2
0,2
0,7
8
38
0,04
0,2
Random
Timestamp
SSL random
Erlang now
0,01 0,1 1 10 1000,5
2
0,4
0,7
3
79
0,2
0,04
Время в секундах на 3*106 операций больше=хуже
laptop 4 ядра
с4.8xlarge 36 ядер
1 поток зелёный
300 потоков синий цвет
Синхронизация времёнDocker!1ntpdate -q pool.ntp.org1разные сервера1отказ от обслуживания
Синхронизация времёнDocker!1ntpdate -q pool.ntp.org1разные сервера1отказ от обслуживания1Выход: собственные сервера,1а ещё лучше измерять на одном
50 перцентиль1, 1, 2, 2 -> 1.516, 6, 7, 7 -> 6.511, 1, 2, 2, 6, 6, 7, 7 -> 415, 6, 7, 8 -> 6.511, 1, 2, 2, 5, 6, 7, 8 -> 3.51информация теряется