CodeFest 2013. Власов П. — Мониторинг API Ostrovok.ru
description
Transcript of CodeFest 2013. Власов П. — Мониторинг API Ostrovok.ru
Мониторинг API Ostrovok.ru
Павел Власов, разработчикмарт 2013
ostrovok.ru
Содержание
1. Ostrovok.ru
2. Информация про API
3. Проблематика
4. Почему мы мониторим API?
5. Реализация
6. Преимущества
7. Мониторинг это просто
2
ostrovok.ru
1. Ostrovok.ru
• Удобный сервис бронирования отелей• Дружная команда из 200+ человек
• Быстро растём и движемся вперёд
3
ostrovok.ru
2. Что такое API ostrovok.ru
• Веб-сервис с основными методами продукта (бронирование и поиск отелей)
• Ответ в формате XML/JSON
4
ostrovok.ru
2. Способы использования API
• Без хранения данных у клиента (вся обработка запросов идет на лету)
• Храним некоторые данные у партнёра (обновляем отели ежедневно)
5
ostrovok.ru
2. Кто использует API
• Сайты сравнивающие цены
• Партнеры продающие наши отели, через свои веб-сервисы
• Мобильное приложение (Iphone, Android)
6
ostrovok.ru
2. Какие требования к API
• ~ 100 запросов в секунду в пике
• Партнёры накладывают ограниченияна максимальное время (Yandex - 200 мс)
• Нагрузка на API выросла в 4 раза за полгода
ostrovok.ru
3. С чем мы столкнулись?
8
• Большое количество клиентов• Неизвестная эффективность обработки запросов
• Нет оповещения о серьезных проблемах
ostrovok.ru
3. Эксперименты партнёров
• Возникают глупые ошибки
• Разработчикам приходится заниматься их поддержкой
9
ostrovok.ru
3. Активность партнёров
• Новые• Активные• Неактивные (N дней)
• Внутренние (для тестов)
Текущие статусы:
10
ostrovok.ru
3. Реверс–инжиниринг
• Полная картина использования API
• Помощь партнёру, если он что-тоделает не так (и мы видим это)
11
ostrovok.ru
• Дашборд с ключевыми метриками• Анализ запросов в реальном времени
• Понимание как партнёры работают с нами
12
3. Необходим мониторинг API
ostrovok.ru
• Бизнеса• Разработки
13
4. C помощью мониторинга мы решаем задачи:
ostrovok.ru
• Отслеживание эффективности партнёров• Выполнение требований партнёров
14
4. Задачи бизнеса
ostrovok.ru
• Снижение количества некоректных запросов• Какие ошибки возникают на определенной версии мобильного приложения
• Уменьшение времени ответа на запрос
15
4. Задачи разработки
ostrovok.ru
• Отладка алгоритма ограничения числа запросов в секунду
• Прогнозирование нагрузки на сервер
16
4. Задачи разработки
ostrovok.ru
• Пытаются закэшировать данные за 40 лет :)
• Забывают выключить нагрузочные тесты• И просто неправильно используют API
17
4. Примеры любознательности
ostrovok.ru
4. Мы стараемся не нервничать
18
ostrovok.ru19
График количества запросов в минуту
Запросы с HTTP-статусом 200Запросы с HTTP-статусом != 200
ostrovok.ru20
График времени ответа
Среднее время ответаПороговое значениеМаксимальное время ответа
ostrovok.ru
5. Выбор из готовых решений
• Готовые решения (Zabbix, Munin)
• Разработка и изменение графиков – не быстрый процесс
• Не такие гибкие как требуют наши задачи
21
ostrovok.ru
5. Munin
• аггрегация по дням/неделям/месяцам
22
ostrovok.ru
5. Zabbix
• Выстрел из пушки по воробьям
23
ostrovok.ru
5. Cвой мониторинг API
• Perl
• PSGI/Plack (аналог WSGI в Python, Rack в Ruby)
• MySQL
• Bootstrap
24
ostrovok.ru
5. Реализация
25
Logs server
API Мониторинг
rsyncPerl scripts
MySQLPerl App
Plack Браузер
ostrovok.ru
5. Как парсим логи?
• Собираем все логи на одном сервере
• С помощью rsync забираем их
• Perl скрипты парсят логи и заполняют БД
26
ostrovok.ru
5. Какие логи используем?
• access.log от Nginx (не требуют изменения в существующем API)
• timings.log (код замеряет время потраченное на определённые уровни работы API)
27
ostrovok.ru
5. Как всё хранится в MySQL?
• Детальная информация за 3 месяца
• Аггрегируем данные в прошлом до часа
• Поэтому БД работает нормально
28
ostrovok.ru
5. А как узнаем партнеров?
• В запросе передается специальный параметр
• id партнёра + подпись запроса
29
ostrovok.ru
5. Поддержка партнеров
• Есть удобная web-консоль
• Легкое воспроизведение запросов к API
• Службе поддержки не нужно отвлекать разработчиков
30
ostrovok.ru31
ostrovok.ru
5. Реализация
• google graph
• dygraphs.com (графики c СКО)
• highcharts.com (количество точек > 10K)
32
Графики на клиенте:
ostrovok.ru33
График времени ответа с использование dygraph
Среднее время ответаПороговое значениеМаксимальное время ответа
ostrovok.ru
5. Реализация
• jQuery Sparklines
• Информативные и удобные
Для дашборда нужны небольшие графики
34
ostrovok.ru35
jQuery Sparklines
ostrovok.ru
6. Преимущества
• Диагностика API
• Реагирование на воздействие изменений ядра продукта на API
• Улучшение производительности API
36
ostrovok.ru
• Определяем на каком уровне возникла проблема (БД и т.д.)
• Анализ любых странных действий• Получение статистических данных для других команд
37
6. Преимущества
ostrovok.ru
7. Мониторинг это просто
• Время ответа• Количество ошибок• Запросы попадающие под лимит
38
Выбраем метрики:
ostrovok.ru
7. Период детализации
• День, неделя, месяц• По дням• Прогнозирование
39
ostrovok.ru
7. Пересчет данных
• Добавление новых метрик• Важно ли вам в любой момент пересчитать все данные
40
ostrovok.ru
7. Возможные решения
• Zabbix
• Munin
• StatsD + Librato
• Написать свое
41
ostrovok.ru
7. Оповещения
• Определить лимиты• Оповещение должно быть умным• SMS / Email
42
ostrovok.ru
Выводы
• Мониторинг это важно• Несложная реализация• Необязательно использовать готовые решения
43
Cпасибо за внимание!Вопросы?
Павел Власов[email protected]