Применение статистических методов и инструментов для анализа производительности систем, Алексей Лавренюк (Яндекс)
1. Анализ данных о
производительности
систем
Алексей Лавренюк, Яндекс
2. Предмет изучения
• Система анализирует поток
событий и ищет в нем важные
• Данные поступают пачками по
несколько миллионов событий
• Пачки поступают регулярно,
размеры пачек варьируются
• Нужно успевать обработать
пачку, пока не пришла новая
изображение куплено на http://ru.fotolia.com
3. Что мы хотим знать
• Запас производительности
• Уметь сравнивать стенды и
релизы
• Следить за трендами и замечать
нештатные ситуации
Нам нужен градусник. Но не
средняя температура по больнице!
изображение куплено на http://ru.fotolia.com
4. Стрельбы
• Готовим тестовый стенд: танк и мишень
• Собираем патронную ленту
• Стреляем линейно возрастающей нагрузкой и смотрим, что происходит с
системой
5. Почему это может не работать
• Пакетная обработка логов событий: несколько миллионов событий в
каждом
• История важна: нельзя сгенерировать синтетическую нагрузку заданного
уровня. Можно только хитро умножить входную нагрузку на
коэффициент.
6. Что внутри
• Три мастера, которые ставят задачки
шестнадцати машинкам
• Лог — это табличка MySQL с
событиями. Одна строка — одно
событие
• Над каждым логом колдуют
множество фильтров на разных
машинках
• Фильтры зависят друг от друга и
должны синхронизироваться
Знать про архитектуру — очень важно!
Лог
событий
Размеченный
лог
Накапливается
история
7. Огонь, вода и люди работают
Смотрим на приборы
изображение куплено на http://ru.fotolia.com
8. Бизнес-метрики
• Число событий в каждом логе
• Время обработки каждого лога
• Время работы каждого фильтра
• Время отставания и размер очереди
изображение куплено на http://ru.fotolia.com
9. Системные метрики
• Загруженность процессора по ядрам
• Процессор для важных процессов
• Память: общие метрики и для
важных процессов
• Диск, сеть и т.д.
• Метрики MySQL
изображение куплено на http://ru.fotolia.com
10. Что можно увидеть
• Резкие изменения метрик,
например, изменение утилизации
ресурсов и времен обработки
логов во время экспериментов
• Следить за важными для бизнеса
метриками, например, за
отставанием или размером
очереди
11. Как докопаться до сути
Выбор метрик и поиск зависимостей
изображение куплено на http://ru.fotolia.com
12. Графиков много. Очень много
• Можно увидеть, что происходит прямо
сейчас или что происходило в прошлом
• Но аномалии не видны сразу, а иногда
не видны вообще
13. Независимые и зависимые
• Размер входных логов, их число и
характер содержимого — независимые
метрики
• Утилизация процессора, памяти, время
обработки одного лога — зависимые
метрики
• Уменьшить число измерений!
изображение куплено на http://ru.fotolia.com
14. Ищем корреляции в метриках
• Множество методов мультивариативного
анализа
• Но у нас сработала интуиция и метод проб и
ошибок: нам вообще важно только время
обработки лога. От чего оно зависит?
15. Эврика!
• Scatter plot
• Время обработки зависит (только) от общего числа событий в логе
• Линейность на основном участке и коэффициент пропорциональности
16. Большие логи
• На больших логах наблюдается нелинейный рост времен обработки
17. Маленькие логи
• Даже пустые логи обрабатываются за ненулевое время
21. Временное измерение
• Добавляем точки в
реалтайме
• Прозрачность показывает
«старение» точки
• Можно узнать, какая точка
для какого лога
Интерактивные инструменты
для работы с данными
качественно изменяют
процесс
22. Зачем нам это
• Back-to-back тесты
• Сравнение теста и
продакшна
Хотим кликнуть в
выбросы и увидеть
детали
23. Зависимости фильтров
• Автоматическое
построение и визуализация
графа зависимостей
• Взвешивание графа на
реальных данных и поиск
критического пути
• Сбор статистики о частых
критических путях
• Отображение критического
пути для любой точки на
графике
24. Критические пути
• Критические пути зависят от
входных данных
• Оптимизировать то, что лежит на
критическом пути: паузы, времена
ожидания и фильтры
• Чтобы оптимизировать, надо
увидеть
25. Следим за трендами
Автоматический анализ изменений
изображение куплено на http://ru.fotolia.com
26. Линейная регрессия
• Метод наименьших квадратов
• Шум влияет на результат
• Сложно найти выбросы
27. Кластеризация
• Много методов, мы выбрали
DBSCAN (density-based spatial
clustering of applications with
noise)
• Позволяет отсеять шум
• И заодно выявляет выбросы
• Наблюдаем за долгосрочными
трендами
28. Как исследовать
производительность
• Нарисовать архитектурную схему
• Научиться снимать метрики и
смотреть на них
• Найти входные и выходные метрики
• Найти корреляции между ними
• Научиться анализировать конкретные
точки
• Автоматизировать наблюдения изображение куплено на http://ru.fotolia.com
29. Гвозди и микроскопы
Что мы использовали в работе
изображение куплено на http://ru.fotolia.com
30. Метрики и графики
• Diamond — инструмент для сбора системных метрик.
https://github.com/BrightcoveOS/Diamond
• Graphite — сервер хранения и обработки временных рядов.
http://graphite.wikidot.com/
31. Анализ данных
• SciPy — научный фреймворк для Python.
http://www.scipy.org/
• ipython notebook — интерактивный web-shell, в котором можно
экспериментировать с вашими данными
• numpy, pandas — библиотеки для работы с данными
• scikit-learn — библиотека машинного обучения (регрессия,
кластеризация)
• networkX — библиотека для работы с графами
https://networkx.github.io/
32. Визуализация
• Highcharts — хорошие графики из коробки. Бесплатно для
некоммерческих проектов.
http://www.highcharts.com/
• d3.js — библиотека для создания интерактивной визуализации.
http://d3js.org/
• Rickshaw — библиотека для работы с графиками, поверх d3.js
http://code.shutterstock.com/rickshaw/
• yEd — удобный редактор графов
http://www.yworks.com/en/products/yfiles/yed/
33. Почитать
• Data Analysis with Open Source Tools (By Philipp K. Janert)
34. Алексей Лавренюк
twitter: @direvius
community: https://clubs.ya.ru/yandex-‐tank
чатик: https://gitter.im/yandex/yandex-‐tank
И да пребудет с вами Сила