CodeFest 2013. Власов П. — Мониторинг API Ostrovok.ru

1,503 views

Published on

CodeFest 2013. Власов П. — Мониторинг API Ostrovok.ru

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

×