SlideShare ist ein Scribd-Unternehmen logo
1 von 44
Downloaden Sie, um offline zu lesen
Мониторинг API
 Ostrovok.ru
Павел Власов, разработчик
       март 2013
Содержание
   1.   Ostrovok.ru
   2.   Информация про API
   3.   Проблематика
   4.   Почему мы мониторим API?
   5.   Реализация
   6.   Преимущества
   7.   Мониторинг это просто
ostrovok.ru
                       2
1. Ostrovok.ru

   • Удобный сервис бронирования отелей
   • Дружная команда из 200+ человек
   • Быстро растём и движемся вперёд


ostrovok.ru
                    3
2. Что такое API ostrovok.ru


  • Веб-сервис с основными методами
     продукта (бронирование и поиск отелей)
  • Ответ в формате XML/JSON

ostrovok.ru
                      4
2. Способы использования API


 • Без хранения данных у клиента
    (вся обработка запросов идет на лету)
 • Храним некоторые данные у партнёра
    (обновляем отели ежедневно)


ostrovok.ru
                       5
2. Кто использует API

   • Сайты сравнивающие цены
   • Партнеры продающие наши отели, через
     свои веб-сервисы
   • Мобильное приложение (Iphone, Android)

ostrovok.ru
                        6
2. Какие требования к API


   • ~ 100 запросов в секунду в пике
   • Партнёры накладывают ограничения
     на максимальное время (Yandex - 200 мс)
   • Нагрузка на API выросла в 4 раза за
     полгода


ostrovok.ru
3. С чем мы столкнулись?

 • Большое количество клиентов
 • Неизвестная эффективность обработки
   запросов
 • Нет оповещения о серьезных проблемах

ostrovok.ru
                     8
3. Эксперименты партнёров


   • Возникают глупые ошибки
   • Разработчикам приходится
     заниматься их поддержкой



ostrovok.ru
                      9
3. Активность партнёров
  Текущие статусы:

   • Новые
   • Активные
   • Неактивные (N дней)
   • Внутренние (для тестов)
ostrovok.ru
                      10
3. Реверс–инжиниринг


   • Полная картина использования API
   • Помощь партнёру, если он что-то
     делает не так (и мы видим это)



ostrovok.ru
                      11
3. Необходим мониторинг API


  • Дашборд с ключевыми метриками
  • Анализ запросов в реальном времени
  • Понимание как партнёры работают с нами


ostrovok.ru
                     12
4. C помощью мониторинга
  мы решаем задачи:


  • Бизнеса
  • Разработки

ostrovok.ru
                 13
4. Задачи бизнеса


  • Отслеживание эффективности партнёров
  • Выполнение требований партнёров


ostrovok.ru
                     14
4. Задачи разработки


  • Снижение количества некоректных запросов
  • Какие ошибки возникают на определенной
    версии мобильного приложения
  • Уменьшение времени ответа на запрос

ostrovok.ru
                     15
4. Задачи разработки


  • Отладка алгоритма ограничения числа
    запросов в секунду
  • Прогнозирование нагрузки на сервер

ostrovok.ru
                         16
4. Примеры любознательности


   • Пытаются закэшировать данные за 40 лет :)
   • Забывают выключить нагрузочные тесты
   • И просто неправильно используют API

ostrovok.ru
                      17
4. Мы стараемся не нервничать




ostrovok.ru
               18
График количества запросов в минуту




          Запросы с HTTP-статусом 200
          Запросы с HTTP-статусом != 200
ostrovok.ru
                      19
График времени ответа




              Среднее время ответа
              Пороговое значение
              Максимальное время ответа
ostrovok.ru
                        20
5. Выбор из готовых решений


  • Готовые решения (Zabbix, Munin)
  • Разработка и изменение графиков – не
    быстрый процесс
  • Не такие гибкие как требуют наши задачи

ostrovok.ru
                      21
5. Munin
   • аггрегация по дням/неделям/месяцам




ostrovok.ru
                     22
5. Zabbix
   • Выстрел из пушки по воробьям




ostrovok.ru
                     23
5. Cвой мониторинг API

 • Perl
 • PSGI/Plack (аналог WSGI в Python, Rack в Ruby)
 • MySQL
 • Bootstrap

ostrovok.ru
                        24
5. Реализация

  Logs           API
                                   Plack     Браузер
 server       Мониторинг



                 rsync
              Perl scripts        Perl App
                MySQL

ostrovok.ru
                             25
5. Как парсим логи?


   • Собираем все логи на одном сервере
   • С помощью rsync забираем их
   • Perl скрипты парсят логи и заполняют БД

ostrovok.ru
                      26
5. Какие логи используем?


 • access.log от Nginx (не требуют изменения в
    существующем API)
 • timings.log (код замеряет время потраченное
    на определённые уровни работы API)



ostrovok.ru
                        27
5. Как всё хранится в MySQL?


 • Детальная информация за 3 месяца
 • Аггрегируем данные в прошлом до часа
 • Поэтому БД работает нормально

ostrovok.ru
                     28
5. А как узнаем партнеров?


   • В запросе передается специальный
     параметр
   • id партнёра + подпись запроса


ostrovok.ru
                      29
5. Поддержка партнеров


   • Есть удобная web-консоль
   • Легкое воспроизведение запросов к API
   • Службе поддержки не нужно отвлекать
     разработчиков


ostrovok.ru
                      30
ostrovok.ru
              31
5. Реализация

  Графики на клиенте:
   • google graph
   • dygraphs.com (графики c СКО)
   • highcharts.com (количество точек > 10K)

ostrovok.ru
                        32
График времени ответа с использование dygraph




              Среднее время ответа
              Пороговое значение
              Максимальное время ответа
ostrovok.ru
                       33
5. Реализация
  Для дашборда нужны небольшие графики


   • jQuery Sparklines
   • Информативные и удобные

ostrovok.ru
                    34
jQuery Sparklines




ostrovok.ru
                     35
6. Преимущества


   • Диагностика API
   • Реагирование на воздействие
     изменений ядра продукта на API
   • Улучшение производительности API

ostrovok.ru
                      36
6. Преимущества

   • Определяем на каком уровне возникла
     проблема (БД и т.д.)
   • Анализ любых странных действий
   • Получение статистических данных для
     других команд


ostrovok.ru
                      37
7. Мониторинг это просто

  Выбраем метрики:

   • Время ответа
   • Количество ошибок
   • Запросы попадающие под лимит

ostrovok.ru
                     38
7. Период детализации


   • День, неделя, месяц
   • По дням
   • Прогнозирование

ostrovok.ru
                      39
7. Пересчет данных



   • Добавление новых метрик
   • Важно ли вам в любой момент
     пересчитать все данные



ostrovok.ru
                     40
7. Возможные решения


   • Zabbix
   • Munin
   • StatsD + Librato
   • Написать свое
ostrovok.ru
                        41
7. Оповещения


   • Определить лимиты
   • Оповещение должно быть умным
   • SMS / Email

ostrovok.ru
                    42
Выводы


   • Мониторинг это важно
   • Несложная реализация
   • Необязательно использовать готовые
     решения


ostrovok.ru
                     43
Cпасибо за внимание!
     Вопросы?

          Павел Власов
    pavel.vlasov@ostrovok.ru

Weitere ähnliche Inhalte

Mehr von CodeFest

Mehr von CodeFest (20)

Александр Зимин
Александр ЗиминАлександр Зимин
Александр Зимин
 
Сергей Крапивенский
Сергей КрапивенскийСергей Крапивенский
Сергей Крапивенский
 
Сергей Игнатов
Сергей ИгнатовСергей Игнатов
Сергей Игнатов
 
Николай Крапивный
Николай КрапивныйНиколай Крапивный
Николай Крапивный
 
Alexander Graebe
Alexander GraebeAlexander Graebe
Alexander Graebe
 
Вадим Смирнов
Вадим СмирновВадим Смирнов
Вадим Смирнов
 
Константин Осипов
Константин ОсиповКонстантин Осипов
Константин Осипов
 
Raffaele Rialdi
Raffaele RialdiRaffaele Rialdi
Raffaele Rialdi
 
Максим Пугачев
Максим ПугачевМаксим Пугачев
Максим Пугачев
 
Rene Groeschke
Rene GroeschkeRene Groeschke
Rene Groeschke
 
Иван Бондаренко
Иван БондаренкоИван Бондаренко
Иван Бондаренко
 
Mete Atamel
Mete AtamelMete Atamel
Mete Atamel
 
Алексей Акулович
Алексей АкуловичАлексей Акулович
Алексей Акулович
 
Артем Титаренко
Артем ТитаренкоАртем Титаренко
Артем Титаренко
 
Олег Савкин
Олег СавкинОлег Савкин
Олег Савкин
 
Levon Ter-Isahakyan
Levon Ter-IsahakyanLevon Ter-Isahakyan
Levon Ter-Isahakyan
 
Jeffrey Richter
Jeffrey RichterJeffrey Richter
Jeffrey Richter
 
Raffaele Rialdi
Raffaele RialdiRaffaele Rialdi
Raffaele Rialdi
 
Сергей Орлов
Сергей ОрловСергей Орлов
Сергей Орлов
 
Андрей Лузин
Андрей ЛузинАндрей Лузин
Андрей Лузин
 

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

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