SlideShare una empresa de Scribd logo
1 de 27
Descargar para leer sin conexión
Опыт перехода на
service oriented architecture
Зачем?

               Контролируемая деградация

•  Лучше не показать часть информации на странице, чем 500ка
•  Лучше показать пользователю самое важное за 100ms, чем всё за 10s
Зачем?

             Разные требования к компонентам
•  Не все сервисы нужно писать под под большую нагрузку
•  Некоторые сервисы могут и “полежать” какое-то время
•  Усложняем и оптимизируем только там, где это требуется
Зачем?

             Разработка на разных языках
                 программирования
•  Выбираем N языков программирования – упрощаем поиск разработчиков
•  Под какие то задачи подходит один ЯП, под другие другой
•  На разных ЯП разная скорость разработки
Как?
Как?

                         Виртуализация
•  Чтобы приложения не мешали друг другу, используем виртуализацию (kvm)
•  Легко деплоить – на одной машине только одно приложение
•  Из-за виртуализации получили сетевые задержки между виртуальными
   машиными, вылечили использованием SR-IOV
Реальность!


•  Много разных конфигов
•  Усложнение деплоя
•  Усложнение мониторинга
•  Усложнение разработки
•  Усложнение поиска проблем: был лог приложения, стало много логов разных
   сервисов
•  Усложнение поддержки тестовых стендов и рабочих станций разработчиков
Про логи

      request_id – уникальный идентификатор
                      запроса.
•  Генерируется на фронтендах: nginx + ngx_http_requestid_module
•  Пробрасывается на все сервисы http заголовком
•  Все записи в логах содержат request_id
Про логи

started GET /page/index/
got 200 http://192.168.1.172:8009/hh-session?args in 6.49ms
got 200 http://192.168.1.172:8021/xml/article/?args in 4.81ms
finish group: 10 requests pending
got from memcache: KEYS, blocking time: 1.07 ms
applied XSL ambient/index.xsl in 24.78ms
applied postprocessor '<Fuchakubutsu>' in 12.94ms
Stages for /page/index/ : session:9.47ms page:81.23ms xsl:24.78ms postprocess:13.27ms
200 GET /page/index/ (192.168.1.188) 174.31ms



Уже можно понять, как обрабатывался запрос, но логи размазаны
по разным серверам.
Про логи

     Сливаем логи через syslog на один сервер
•  искать по request_id долго

•  проблемы с большими сообщениями
Про логи

                 Пробуем logstash, graylog2
•  не справляются с нашей нагрузкой (20k messages/second), по крайней мере
   за вменяемое время не удалось победить

•  сложно доделать под наши задачи

•  у graylog2 есть отличный протокол: GELF
Про логи

                                      GELF
•    UDP
•    JSON + GZIP
•    Поддержка больших сообщений (chunks)
•    Есть готовые библиотеки для java, python, php, perl, ruby итд
•    Очень простой – ничего лишнего
Про логи

                         Написали сервер
•    2 дня разработки на python
•    Держит нашу нагрузку
•    Сообщения пробовали хранить в cassandra и mongodb: выбрали mongodb
•    Хранилище фиксированного размера (перезапись по кругу)
•    Шардинг по request_id
•    Быстрый поиск по request_id, можно добавить индексируемых полей
•    Интерфейс поиска от консольных скриптов до web
•    Легко расширять
Про логи

 Научились собирать и искать по логам, учимся
                писать логи
•  В логи надо писать всё, что может пригодиться
•  Если идём куда-то по сети: пишем зачем, куда, что ответили (статус), сколько
   ждали ответа
•  Если делаем вычислительную задачу: пишем что делали, сколько заняло
   времени, ошибки
•  Если ошибка: пишем во время какого запроса произошло, что в итоге (отдали
   500 итд).
Про логи

       Идеальное приложение с точки зрения
                  эксплуатации
•  По логу можно понять, чем сейчас занято приложение и чем оно было
   занято в момент времени X
•  Если приложение тормозит или “плюется” ошибками:
     можно понять – это внешние проблемы или проблемы самого приложения
     разработчик по логу может понять причину такого поведения
Про мониторинг



•  Мониторить параметры серверов нужно, но это не главное

•  Ключевые метрики – про сервис, а не железо

•  CPU Usage = 100% проблема? Нет! Зачастую это просто вспомогательная
   информация
Самый информативный мониторинг –
   мониторинг на основе логов
Про мониторинг



•  Мониторим каждый экземпляр сервиса отдельно

•  Сервис в целом на основе логов балансировщика

•  Отдельные страницы сайта на основе логов фронтендов (ключевые
   метрики)
Про мониторинг


•  Нужно определить, что значит “сайт работает”, ”сайт не работает”

•  Реальные проблемы:
    95 персентиль времени ответа > N ms
    процент ошибок > M
    количество запросов резко упало / выросло

•  Алерты должны быть только по делу

•  Отчеты о доступности должны быть на основе метрик сервиса
Про деплой


        Что должна уметь система выкладки
•  Выложить сервис N, а только после этого сервис М
•  При выкладке сервиса N применить изменения в конфигах
•  Сервис N выкладывать параллельно по 2 экземпляра, идти дальше если оба
   ответят по /status 200м статусом
•  Помнить предыдущие версии каждого сервиса
•  Откатиться на предыдущую версию
•  Знать конфигурацию всего кластера: где живую экземпляры сервиса N,
   сколько их итд
Про деплой


                              Как сейчас

•    Скрипты на shell
•    Простой шаблонизатор конфигов
•    Деплой через ssh + scp + apt-get
•    Описание конфигурации кластера в текстовых файлах
•    Все достаточно громоздко
Про деплой


                              Куда идём

•  Puppet для конфигов в роли репозитория (отключен autosync)
•  Скрипты на python + fabric (не пишем логику параллельного исполнения, не
   пишем обвязку для ssh, более умная проверка статусов сервисов)
•  Выкладка только установкой deb пакетов
•  Описание конфигурации кластера берем из мониторинга (базы) – она там
   уже есть в самом актуальном виде
Итоги



•    Разделение монолитного приложения на сервисы может принести пользу
•    Отдельные подсистемы можно сохранить простыми
•    Система в целом усложняется, особенно в эксплуатации
•    Придется совершенствовать инфраструктурные инструменты для
     сохранения контроля над системой:
      - деплой
      - логи
      - мониторинг
Некоторые наши наработки на
                   http://github.com/hhru

•  Frontik
•  Logserver – очень грязный прототип (as is), лучше так чем никак =)
•  nginx_requestid – модуль nginx для генерации request_id
СПАСИБО!
           Николай Сивко
Директор по эксплуатации, HeadHunter
            sivko@hh.ru

Más contenido relacionado

La actualidad más candente

2020.10.13 HA Redis is simple. FWDays Highload
2020.10.13 HA Redis is simple. FWDays Highload2020.10.13 HA Redis is simple. FWDays Highload
2020.10.13 HA Redis is simple. FWDays HighloadYehor Herasymchuk
 
Как не положить тысячи серверов с помощью системы централизованного управлени...
Как не положить тысячи серверов с помощью системы централизованного управлени...Как не положить тысячи серверов с помощью системы централизованного управлени...
Как не положить тысячи серверов с помощью системы централизованного управлени...Ontico
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Ontico
 
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)Ontico
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Ontico
 
Javascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только одинJavascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только одинSergey Xek
 
Автоматизация тестирования клиентской производительности / Николай Лавлинский...
Автоматизация тестирования клиентской производительности / Николай Лавлинский...Автоматизация тестирования клиентской производительности / Николай Лавлинский...
Автоматизация тестирования клиентской производительности / Николай Лавлинский...Ontico
 
Why we did not choose Hadoop
Why we did not choose HadoopWhy we did not choose Hadoop
Why we did not choose HadoopSerguei Gitinsky
 
Путь к Go на конкретном примере
Путь к Go на конкретном примереПуть к Go на конкретном примере
Путь к Go на конкретном примереSergey Xek
 
Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...
Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...
Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...Ontico
 
Salt and Ansible - Python-based CM systems
Salt and Ansible - Python-based CM systemsSalt and Ansible - Python-based CM systems
Salt and Ansible - Python-based CM systemsAlex Chistyakov
 
NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)
NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)
NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)Ontico
 
Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)
Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)
Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)Ontico
 
My talk on LeoFS, Highload++ 2014
My talk on LeoFS, Highload++ 2014My talk on LeoFS, Highload++ 2014
My talk on LeoFS, Highload++ 2014Alex Chistyakov
 
Анатомия веб сервиса (HighLoad-2014)
Анатомия веб сервиса (HighLoad-2014)Анатомия веб сервиса (HighLoad-2014)
Анатомия веб сервиса (HighLoad-2014)Andrey Smirnov
 
Денис Иванов
Денис ИвановДенис Иванов
Денис ИвановCodeFest
 
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...Ontico
 
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...Ontico
 
OpenResty: превращаем NGINX в полноценный сервер приложений / Владимир Прота...
OpenResty: превращаем NGINX в полноценный сервер приложений  / Владимир Прота...OpenResty: превращаем NGINX в полноценный сервер приложений  / Владимир Прота...
OpenResty: превращаем NGINX в полноценный сервер приложений / Владимир Прота...Ontico
 
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...Ontico
 

La actualidad más candente (20)

2020.10.13 HA Redis is simple. FWDays Highload
2020.10.13 HA Redis is simple. FWDays Highload2020.10.13 HA Redis is simple. FWDays Highload
2020.10.13 HA Redis is simple. FWDays Highload
 
Как не положить тысячи серверов с помощью системы централизованного управлени...
Как не положить тысячи серверов с помощью системы централизованного управлени...Как не положить тысячи серверов с помощью системы централизованного управлени...
Как не положить тысячи серверов с помощью системы централизованного управлени...
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
 
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
 
Javascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только одинJavascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только один
 
Автоматизация тестирования клиентской производительности / Николай Лавлинский...
Автоматизация тестирования клиентской производительности / Николай Лавлинский...Автоматизация тестирования клиентской производительности / Николай Лавлинский...
Автоматизация тестирования клиентской производительности / Николай Лавлинский...
 
Why we did not choose Hadoop
Why we did not choose HadoopWhy we did not choose Hadoop
Why we did not choose Hadoop
 
Путь к Go на конкретном примере
Путь к Go на конкретном примереПуть к Go на конкретном примере
Путь к Go на конкретном примере
 
Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...
Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...
Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...
 
Salt and Ansible - Python-based CM systems
Salt and Ansible - Python-based CM systemsSalt and Ansible - Python-based CM systems
Salt and Ansible - Python-based CM systems
 
NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)
NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)
NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)
 
Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)
Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)
Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)
 
My talk on LeoFS, Highload++ 2014
My talk on LeoFS, Highload++ 2014My talk on LeoFS, Highload++ 2014
My talk on LeoFS, Highload++ 2014
 
Анатомия веб сервиса (HighLoad-2014)
Анатомия веб сервиса (HighLoad-2014)Анатомия веб сервиса (HighLoad-2014)
Анатомия веб сервиса (HighLoad-2014)
 
Денис Иванов
Денис ИвановДенис Иванов
Денис Иванов
 
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...
 
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
 
OpenResty: превращаем NGINX в полноценный сервер приложений / Владимир Прота...
OpenResty: превращаем NGINX в полноценный сервер приложений  / Владимир Прота...OpenResty: превращаем NGINX в полноценный сервер приложений  / Владимир Прота...
OpenResty: превращаем NGINX в полноценный сервер приложений / Владимир Прота...
 
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
 

Similar a Sivko

Оптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaОптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaAlex Chistyakov
 
Опыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на RubyОпыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на RubyAlex Chistyakov
 
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...rit2011
 
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...rit2011
 
Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...
Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...
Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...Sergey Xek
 
Павел Брылов, Skype
Павел Брылов, SkypeПавел Брылов, Skype
Павел Брылов, SkypeOntico
 
Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)
Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)
Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)Ontico
 
Путь мониторинга, DevOps club в Grammarly
Путь мониторинга, DevOps club в GrammarlyПуть мониторинга, DevOps club в Grammarly
Путь мониторинга, DevOps club в GrammarlyVsevolod Polyakov
 
"Девопс - это не только для программистов. Практические примеры из жизни одно...
"Девопс - это не только для программистов. Практические примеры из жизни одно..."Девопс - это не только для программистов. Практические примеры из жизни одно...
"Девопс - это не только для программистов. Практические примеры из жизни одно...it-people
 
SECON'2016. Парамонов Сергей, Автоматизируй это! Как не погрязнуть в рутине п...
SECON'2016. Парамонов Сергей, Автоматизируй это! Как не погрязнуть в рутине п...SECON'2016. Парамонов Сергей, Автоматизируй это! Как не погрязнуть в рутине п...
SECON'2016. Парамонов Сергей, Автоматизируй это! Как не погрязнуть в рутине п...SECON
 
Управление облачной инфраструктурой
Управление облачной инфраструктуройУправление облачной инфраструктурой
Управление облачной инфраструктуройdddpaul
 
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)Pavel Tsukanov
 
Monitoring driven эксплуатация / Николай Сивко (HeadHunter)
Monitoring driven эксплуатация / Николай Сивко (HeadHunter)Monitoring driven эксплуатация / Николай Сивко (HeadHunter)
Monitoring driven эксплуатация / Николай Сивко (HeadHunter)Ontico
 
Monitoring-driven эксплуатация (rootconf2015)
Monitoring-driven эксплуатация (rootconf2015)Monitoring-driven эксплуатация (rootconf2015)
Monitoring-driven эксплуатация (rootconf2015)Nikolay Sivko
 
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...IT-Portfolio
 
Страх и ненависть в мире релиз-инжиниринга
Страх и ненависть в мире релиз-инжинирингаСтрах и ненависть в мире релиз-инжиниринга
Страх и ненависть в мире релиз-инжинирингаMikhail Chinkov
 
Badoo Desktop: оптимизация приложения на миллион юзеров онлайн
Badoo Desktop: оптимизация приложения на миллион юзеров онлайнBadoo Desktop: оптимизация приложения на миллион юзеров онлайн
Badoo Desktop: оптимизация приложения на миллион юзеров онлайнSergey Xek
 
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)Ontico
 

Similar a Sivko (20)

Оптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaОптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на Java
 
Опыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на RubyОпыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на Ruby
 
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
 
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
 
Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...
Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...
Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...
 
Errors Tracker
Errors TrackerErrors Tracker
Errors Tracker
 
Павел Брылов, Skype
Павел Брылов, SkypeПавел Брылов, Skype
Павел Брылов, Skype
 
Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)
Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)
Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)
 
Путь мониторинга, DevOps club в Grammarly
Путь мониторинга, DevOps club в GrammarlyПуть мониторинга, DevOps club в Grammarly
Путь мониторинга, DevOps club в Grammarly
 
"Девопс - это не только для программистов. Практические примеры из жизни одно...
"Девопс - это не только для программистов. Практические примеры из жизни одно..."Девопс - это не только для программистов. Практические примеры из жизни одно...
"Девопс - это не только для программистов. Практические примеры из жизни одно...
 
SECON'2016. Парамонов Сергей, Автоматизируй это! Как не погрязнуть в рутине п...
SECON'2016. Парамонов Сергей, Автоматизируй это! Как не погрязнуть в рутине п...SECON'2016. Парамонов Сергей, Автоматизируй это! Как не погрязнуть в рутине п...
SECON'2016. Парамонов Сергей, Автоматизируй это! Как не погрязнуть в рутине п...
 
Управление облачной инфраструктурой
Управление облачной инфраструктуройУправление облачной инфраструктурой
Управление облачной инфраструктурой
 
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
 
Monitoring driven эксплуатация / Николай Сивко (HeadHunter)
Monitoring driven эксплуатация / Николай Сивко (HeadHunter)Monitoring driven эксплуатация / Николай Сивко (HeadHunter)
Monitoring driven эксплуатация / Николай Сивко (HeadHunter)
 
Monitoring-driven эксплуатация (rootconf2015)
Monitoring-driven эксплуатация (rootconf2015)Monitoring-driven эксплуатация (rootconf2015)
Monitoring-driven эксплуатация (rootconf2015)
 
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...
 
Страх и ненависть в мире релиз-инжиниринга
Страх и ненависть в мире релиз-инжинирингаСтрах и ненависть в мире релиз-инжиниринга
Страх и ненависть в мире релиз-инжиниринга
 
Chef @DevWeb
Chef @DevWebChef @DevWeb
Chef @DevWeb
 
Badoo Desktop: оптимизация приложения на миллион юзеров онлайн
Badoo Desktop: оптимизация приложения на миллион юзеров онлайнBadoo Desktop: оптимизация приложения на миллион юзеров онлайн
Badoo Desktop: оптимизация приложения на миллион юзеров онлайн
 
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
 

Más de kuchinskaya (20)

Kharkov
KharkovKharkov
Kharkov
 
Balashov
BalashovBalashov
Balashov
 
Zamyakin
ZamyakinZamyakin
Zamyakin
 
Panfilov
PanfilovPanfilov
Panfilov
 
Platov
PlatovPlatov
Platov
 
Rabovoluk
RabovolukRabovoluk
Rabovoluk
 
Smirnov dependency-injection-techforum(1)
Smirnov dependency-injection-techforum(1)Smirnov dependency-injection-techforum(1)
Smirnov dependency-injection-techforum(1)
 
Smirnov reverse-engineering-techforum
Smirnov reverse-engineering-techforumSmirnov reverse-engineering-techforum
Smirnov reverse-engineering-techforum
 
Zacepin
ZacepinZacepin
Zacepin
 
Zagursky
ZagurskyZagursky
Zagursky
 
Haritonov
HaritonovHaritonov
Haritonov
 
Chudov
ChudovChudov
Chudov
 
Bubnov
BubnovBubnov
Bubnov
 
A.pleshkov
A.pleshkovA.pleshkov
A.pleshkov
 
Zenovich
ZenovichZenovich
Zenovich
 
Romanenko
RomanenkoRomanenko
Romanenko
 
Perepelitsa
PerepelitsaPerepelitsa
Perepelitsa
 
Osipov
OsipovOsipov
Osipov
 
Kubasov
KubasovKubasov
Kubasov
 
Kalugin balashov
Kalugin balashovKalugin balashov
Kalugin balashov
 

Sivko

  • 1.
  • 3. Зачем? Контролируемая деградация •  Лучше не показать часть информации на странице, чем 500ка •  Лучше показать пользователю самое важное за 100ms, чем всё за 10s
  • 4. Зачем? Разные требования к компонентам •  Не все сервисы нужно писать под под большую нагрузку •  Некоторые сервисы могут и “полежать” какое-то время •  Усложняем и оптимизируем только там, где это требуется
  • 5. Зачем? Разработка на разных языках программирования •  Выбираем N языков программирования – упрощаем поиск разработчиков •  Под какие то задачи подходит один ЯП, под другие другой •  На разных ЯП разная скорость разработки
  • 7. Как? Виртуализация •  Чтобы приложения не мешали друг другу, используем виртуализацию (kvm) •  Легко деплоить – на одной машине только одно приложение •  Из-за виртуализации получили сетевые задержки между виртуальными машиными, вылечили использованием SR-IOV
  • 8. Реальность! •  Много разных конфигов •  Усложнение деплоя •  Усложнение мониторинга •  Усложнение разработки •  Усложнение поиска проблем: был лог приложения, стало много логов разных сервисов •  Усложнение поддержки тестовых стендов и рабочих станций разработчиков
  • 9. Про логи request_id – уникальный идентификатор запроса. •  Генерируется на фронтендах: nginx + ngx_http_requestid_module •  Пробрасывается на все сервисы http заголовком •  Все записи в логах содержат request_id
  • 10. Про логи started GET /page/index/ got 200 http://192.168.1.172:8009/hh-session?args in 6.49ms got 200 http://192.168.1.172:8021/xml/article/?args in 4.81ms finish group: 10 requests pending got from memcache: KEYS, blocking time: 1.07 ms applied XSL ambient/index.xsl in 24.78ms applied postprocessor '<Fuchakubutsu>' in 12.94ms Stages for /page/index/ : session:9.47ms page:81.23ms xsl:24.78ms postprocess:13.27ms 200 GET /page/index/ (192.168.1.188) 174.31ms Уже можно понять, как обрабатывался запрос, но логи размазаны по разным серверам.
  • 11. Про логи Сливаем логи через syslog на один сервер •  искать по request_id долго •  проблемы с большими сообщениями
  • 12. Про логи Пробуем logstash, graylog2 •  не справляются с нашей нагрузкой (20k messages/second), по крайней мере за вменяемое время не удалось победить •  сложно доделать под наши задачи •  у graylog2 есть отличный протокол: GELF
  • 13. Про логи GELF •  UDP •  JSON + GZIP •  Поддержка больших сообщений (chunks) •  Есть готовые библиотеки для java, python, php, perl, ruby итд •  Очень простой – ничего лишнего
  • 14. Про логи Написали сервер •  2 дня разработки на python •  Держит нашу нагрузку •  Сообщения пробовали хранить в cassandra и mongodb: выбрали mongodb •  Хранилище фиксированного размера (перезапись по кругу) •  Шардинг по request_id •  Быстрый поиск по request_id, можно добавить индексируемых полей •  Интерфейс поиска от консольных скриптов до web •  Легко расширять
  • 15. Про логи Научились собирать и искать по логам, учимся писать логи •  В логи надо писать всё, что может пригодиться •  Если идём куда-то по сети: пишем зачем, куда, что ответили (статус), сколько ждали ответа •  Если делаем вычислительную задачу: пишем что делали, сколько заняло времени, ошибки •  Если ошибка: пишем во время какого запроса произошло, что в итоге (отдали 500 итд).
  • 16. Про логи Идеальное приложение с точки зрения эксплуатации •  По логу можно понять, чем сейчас занято приложение и чем оно было занято в момент времени X •  Если приложение тормозит или “плюется” ошибками: можно понять – это внешние проблемы или проблемы самого приложения разработчик по логу может понять причину такого поведения
  • 17. Про мониторинг •  Мониторить параметры серверов нужно, но это не главное •  Ключевые метрики – про сервис, а не железо •  CPU Usage = 100% проблема? Нет! Зачастую это просто вспомогательная информация
  • 18. Самый информативный мониторинг – мониторинг на основе логов
  • 19.
  • 20. Про мониторинг •  Мониторим каждый экземпляр сервиса отдельно •  Сервис в целом на основе логов балансировщика •  Отдельные страницы сайта на основе логов фронтендов (ключевые метрики)
  • 21. Про мониторинг •  Нужно определить, что значит “сайт работает”, ”сайт не работает” •  Реальные проблемы: 95 персентиль времени ответа > N ms процент ошибок > M количество запросов резко упало / выросло •  Алерты должны быть только по делу •  Отчеты о доступности должны быть на основе метрик сервиса
  • 22. Про деплой Что должна уметь система выкладки •  Выложить сервис N, а только после этого сервис М •  При выкладке сервиса N применить изменения в конфигах •  Сервис N выкладывать параллельно по 2 экземпляра, идти дальше если оба ответят по /status 200м статусом •  Помнить предыдущие версии каждого сервиса •  Откатиться на предыдущую версию •  Знать конфигурацию всего кластера: где живую экземпляры сервиса N, сколько их итд
  • 23. Про деплой Как сейчас •  Скрипты на shell •  Простой шаблонизатор конфигов •  Деплой через ssh + scp + apt-get •  Описание конфигурации кластера в текстовых файлах •  Все достаточно громоздко
  • 24. Про деплой Куда идём •  Puppet для конфигов в роли репозитория (отключен autosync) •  Скрипты на python + fabric (не пишем логику параллельного исполнения, не пишем обвязку для ssh, более умная проверка статусов сервисов) •  Выкладка только установкой deb пакетов •  Описание конфигурации кластера берем из мониторинга (базы) – она там уже есть в самом актуальном виде
  • 25. Итоги •  Разделение монолитного приложения на сервисы может принести пользу •  Отдельные подсистемы можно сохранить простыми •  Система в целом усложняется, особенно в эксплуатации •  Придется совершенствовать инфраструктурные инструменты для сохранения контроля над системой: - деплой - логи - мониторинг
  • 26. Некоторые наши наработки на http://github.com/hhru •  Frontik •  Logserver – очень грязный прототип (as is), лучше так чем никак =) •  nginx_requestid – модуль nginx для генерации request_id
  • 27. СПАСИБО! Николай Сивко Директор по эксплуатации, HeadHunter sivko@hh.ru