SlideShare una empresa de Scribd logo
1 de 68
Чему мы научились,
разрабатывая
микросервисы?
Мадисон Вадим, М-Тех
2016
• Услуги системной интеграции, начиная от разработки технологических
решений и заканчивая доставкой видео-сигнала до конечного пользователя
• Интернет-видеоплатформа для каналов МатчТВ и НТВ-ПЛЮС
• 300 000 одновременных пользователей
• > 1 000 000 уникальных посетителей в сутки
• Отдаем контента до 300 Тб/час
— Достучаться до небес (фильм)
«Пойми, на небесах только и говорят, что

о море. Как оно бесконечно прекрасно…»
Кто не знает, что
такое микросервис?
Проблемы
микросервисов
Проблемы
• Pipeline: для каждого свой проект в git, CI, …
• Сложность системы: распределенные коммуникации, дополнительное API,
больше точек отказа и логики их обработки
• Контроль целостности данных, сложность распределенных транзакций
17 (1/20)→340→1120
Проблемы
• Оверхед: сетевой, сериализация/десериализация
• Обнаружение сервисов
• Постоянный контроль независимости сервисов
• Инструментарий!
А чем они
тогда
привлекают?


В чем бонусы?
• Независимая разработка
В чем бонусы?
• Независимая разработка
• Отсутствие завязки на технологии
В чем бонусы?
• Независимая разработка
• Отсутствие завязки на технологии
• Скорость тестирования (независимость при тестировании)
В чем бонусы?
• Независимая разработка
• Отсутствие завязки на технологии
• Скорость тестирования (независимость при тестировании)
• Легкость масштабирования (если она вообще есть)
В чем бонусы?
• Независимая разработка
• Отсутствие завязки на технологии
• Скорость тестирования (независимость при тестировании)
• Легкость масштабирования (если она вообще есть)
• Минимизация ущерба при отказе сервиса (при корректной реализации
остальных)
Насколько микро-
должен быть -сервис?
Насколько микро- должен быть
микросервис?
• По длительности разработки
Насколько микро- должен быть
микросервис?
• По длительности разработки
• По количеству строк кода
Насколько микро- должен быть
микросервис?
• По длительности разработки
• По количеству строк кода
• По количеству разработчиков за N спринтов
Сервис должен быть независимым!
Как проверить
независимость?
Как проверить независимость?
1. Опишите бизнес-задачу сервиса одним простым предложением
Как проверить независимость?
1. Опишите бизнес-задачу сервиса одним простым предложением
2. Какое количество потребителей у сервиса?
Как проверить независимость?
1. Опишите бизнес-задачу сервиса одним простым предложением
2. Какое количество потребителей у сервиса?
3. Приводит ли деплой одного сервиса к деплою других сервисов?
Требования к микросервису
• Скрывает внутренние детали реализации
• Деплоится независимо
• Падая, не роняет все остальное
• Легко мониторится
• Реализует бизнес-модель
• Полностью децентрализован
Как готовить?
Конфигурация
Конфигурация
Что пробовали?
• файлы конфигурации при деплое разливать по всем целевым машинам
Конфигурация
Что пробовали?
• файлы конфигурации при деплое разливать по всем целевым машинам
• файлы конфигурации класть в контейнер
Конфигурация
Что пробовали?
• файлы конфигурации при деплое разливать по всем целевым машинам
• файлы конфигурации класть в контейнер
• выставлять переменные окружения
• при сборке контейнера (ENV DB=…)
• при запуске контейнера
Конфигурация
• Общее K/V хранилище
• Сервис должен быть заточен под смену конфигурации
• Микс вариаций с приоритетами:
<СЕРВИС>/ (/conf/ms/recorder/)
<СЕРВИС>/<ВЕРСИЯ>/ (/conf/ms/recorder/0.12)
<СЕРВИС>/<СРЕДА>/
<СЕРВИС>/<ВЕРСИЯ>/<СРЕДА>/
<СЕРВИС>/<ВЕРСИЯ>/<НОДА>/
Конфигурация
1. git2consul
• не используем отдельные проекты/бранчи в git для основных параметров
• загружаем конфигурацию при деплое
• стартовый путь: 

/conf/ms/<ИМЯ СЕРВИСА>/<BUILD NO>/
2. Vault

все секретное храним в отдельных проектах
Мониторинг
736
Как решать?
Как решать?
• Помнить, что микросервисы — они как PHP, только микросервисы
Как решать?
• Помнить, что микросервисы — они как PHP, только микросервисы
• Вместо полноценного мониторинга — строим dashboard
Как решать?
• Помнить, что микросервисы — они как PHP, только микросервисы
• Вместо полноценного мониторинга — строим dashboard
• Алерты по статистическим и пороговым значениям вместо бинарных
Как решать?
• Помнить, что микросервисы — они как PHP, только микросервисы
• Вместо полноценного мониторинга — строим dashboard
• Алерты по статистическим и пороговым значениям вместо бинарных
• На одном dashboard сводить графики хост-машин и статистики 

по docker-демону
Наш стек
1. Сбор метрик - это важно, но еще важнее постоянный анализ полученных
данных
2. Система мониторинга должна быть более надежной и масштабируемой,
чем то, что она контролирует
3. Система должна быть оптимизирована для распределенных,
недолговечных, облачных, контейнеризованных микросервисов
4. Собирайте метрики часто … очень часто … 

Стремитесь к интервалам < 10 сек
Общие рекомендации
Тестирование
В чем сложность?
1. Корректность взаимодействия с другими сервисами
В чем сложность?
1. Корректность взаимодействия с другими сервисами
2. Сервис назначения доступен, но:
• Отвечает очень медленно
• Отвечает эпизодически
• Отвечает некорректно
В чем сложность?
1. Корректность взаимодействия с другими сервисами
2. Сервис назначения доступен, но:
• Отвечает очень медленно
• Отвечает эпизодически
• Отвечает некорректно
Circuit Breaker!
В чем сложность?
1. Корректность взаимодействия с другими сервисами
2. Сервис назначения доступен, но:
• Отвечает очень медленно
• Отвечает эпизодически
• Отвечает некорректно
Circuit Breaker!
[Hystrix, Netflix]
Этапы тестирования
Тестовый

кластер
Raspberry
Pi 3 - 6шт


Фото: pocketcluster.wordpress.com
Хранение
Что пробовали?
• Проброс файловой системы в контейнер
Что пробовали?
• Проброс файловой системы в контейнер
• «Собирающие контейнеры»
Что пробовали?
• Проброс файловой системы в контейнер
• «Собирающие контейнеры»
• Shared data volume
Что пробовали?
• Проброс файловой системы в контейнер
• «Собирающие контейнеры»
• Shared data volume
• Flocker
Для файлового
хранения
Распределенная файловая система: 

CEPH (http://ceph.com/)
Для БД
• Выделенные сервера
• Особая конфигурация машин
• Расширенная сеть
Обнаружение
сервисов
Реестр сервисов
• consul — key/value хранилище, DNS, Health-Check, работа с несколькими ДЦ из коробки
• etcd — key/value хранилище
• skydock — Health-Check, регистрация docker-контейнеров
• skydns — DNS
• Apache Zookeeper — вариация key/value хранилища, сервис блокировок, вариация на тему DNS
• !redis — запись только в мастер, нет механизма достижения консенсуса при определении
актуального состояния данных после выхода из строя отдельных узлов хранилища
Оркестрация
• docker swarm [1.2.2] — доставка, регистрация, масштабирование (consul)
• nomad [0.3.2] — доставка, регистрация, масштабирование (consul)
• kubernetes [1.2.4] — доставка, регистрация, масштабирование, LB (etcd)
• mesos [0.28.1] (marathon [1.1.1]) — доставка, регистрация,
масштабирование, LB (zookeeper, HAProxy)
Consul Template
{{range services}}{{ if in .Tags "demo" }}{{if .Tags | join "," | regexMatch "urlprefix-"}}
upstream {{.Name}} {
least_conn;
{{range service .Name}}server {{.Address}}:{{.Port}} max_fails=3 fail_timeout=30 weight=1;{{end}}
}
{{end}}{{end}}{{end}}
server {
listen 80 default_server;
location /health {
add_header Content-Type text/plain;
return 200 'OK';
}
{{range services}}{{ if in .Tags "demo" }}{{if .Tags | join "," | regexMatch "urlprefix-"}}
{{range .Tags}}{{ if . | contains "urlprefix-" }}location {{. | replaceAll "urlprefix-" ""}} { {{end}}{{end}}
proxy_pass http://{{.Name}}/; # / в конце означает обрезку проксируемого пути
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
{{end}}{{end}}{{end}}
}
Consul Template
{{range services}}

{{ if in .Tags "demo" }}

{{if .Tags | join "," | regexMatch “urlprefix-“}} #urlprefix-/playlist
upstream {{.Name}} {
least_conn;
{{range service .Name}}server {{.Address}}:{{.Port}} max_fails=3
fail_timeout=30 weight=1;{{end}}
}
{{end}}

{{end}}

{{end}}
в списке только
прошедшие

health-check!
Consul Template
{{range services}}
{{ if in .Tags "demo" }}
{{if .Tags | join "," | regexMatch "urlprefix-"}}
{{range .Tags}}{{ if . | contains "urlprefix-" }}
# Tag: urlprefix-/playlist
location {{. | replaceAll "urlprefix-" ""}} {
{{end}}{{end}}
proxy_pass http://{{.Name}}/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
{{end}}{{end}}{{end}}
Consul Template
upstream playlistapi {
least_conn;
server 10.1.1.2:5100 max_fails=3 fail_timeout=30 weight=1;
}


... 

location /playlist {
proxy_pass http://playlistapi/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
http://bit.ly/1TE1KdM
Исходные коды примера
Чек-лист
Как конфигурировать?
Как мониторить и считать метрики?
Как сервисы будут находить друг друга?
Как сервис будет взаимодействовать с остальными частями проекта?
Как тестировать сервис и систему целиком?
Как обрабатывать сбои связанных сервисов?
Как переезжать на новую версию?
Как масштабировать под нагрузкой?
Спасибо!
Вадим Мадисон
М-Тех
vmadison@rutube.ru

Más contenido relacionado

La actualidad más candente

Конкурентные преимущества продуктов и технологий Microsoft. Сценарии применен...
Конкурентные преимущества продуктов и технологий Microsoft. Сценарии применен...Конкурентные преимущества продуктов и технологий Microsoft. Сценарии применен...
Конкурентные преимущества продуктов и технологий Microsoft. Сценарии применен...MUK
 
HighLoad Junior '16 Как сравнить и выбрать хостинг-провайдера
HighLoad Junior '16 Как сравнить и выбрать хостинг-провайдераHighLoad Junior '16 Как сравнить и выбрать хостинг-провайдера
HighLoad Junior '16 Как сравнить и выбрать хостинг-провайдераИгорь Мызгин
 
Как построить кластер для расчета сотен тысяч high-CPU/high-MEM-задач и не ра...
Как построить кластер для расчета сотен тысяч high-CPU/high-MEM-задач и не ра...Как построить кластер для расчета сотен тысяч high-CPU/high-MEM-задач и не ра...
Как построить кластер для расчета сотен тысяч high-CPU/high-MEM-задач и не ра...Ontico
 
Дорога к микросервисной архитектуре
Дорога к микросервисной архитектуреДорога к микросервисной архитектуре
Дорога к микросервисной архитектуреCodeFest
 
Микросервисные архитектуры и немного жизненного опыта
Микросервисные архитектуры и немного жизненного опытаМикросервисные архитектуры и немного жизненного опыта
Микросервисные архитектуры и немного жизненного опытаElena Grahovac
 
Программные интерфейсы управления серверной платформой и вычислительными стек...
Программные интерфейсы управления серверной платформой и вычислительными стек...Программные интерфейсы управления серверной платформой и вычислительными стек...
Программные интерфейсы управления серверной платформой и вычислительными стек...Cisco Russia
 
Распределенные системы в Одноклассниках
Распределенные системы в ОдноклассникахРаспределенные системы в Одноклассниках
Распределенные системы в Одноклассникахodnoklassniki.ru
 
Что нового в SQL Server 2014
Что нового в SQL Server 2014Что нового в SQL Server 2014
Что нового в SQL Server 2014Andrey Korshikov
 
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...Ontico
 
Совместные решения Citrix и Dell для правильной организации рабочих мест
Совместные решения Citrix и Dell для правильной организации рабочих местСовместные решения Citrix и Dell для правильной организации рабочих мест
Совместные решения Citrix и Dell для правильной организации рабочих местDell_Russia
 
Дизайн небольшого ЦОД часть 2
Дизайн небольшого ЦОД часть 2Дизайн небольшого ЦОД часть 2
Дизайн небольшого ЦОД часть 2Cisco Russia
 
Алексей Рагозин "Java и linux борьба за микросекунды"
Алексей Рагозин "Java и linux борьба за микросекунды"Алексей Рагозин "Java и linux борьба за микросекунды"
Алексей Рагозин "Java и linux борьба за микросекунды"IT Event
 
Cеминар: Работа с технологиями - Основы хостинга сайтов
Cеминар: Работа с технологиями - Основы хостинга сайтовCеминар: Работа с технологиями - Основы хостинга сайтов
Cеминар: Работа с технологиями - Основы хостинга сайтовMDIF
 
Игнат Корчагин "Как Cloudflare помогает справиться с крупнейшими атаками в Сети"
Игнат Корчагин "Как Cloudflare помогает справиться с крупнейшими атаками в Сети"Игнат Корчагин "Как Cloudflare помогает справиться с крупнейшими атаками в Сети"
Игнат Корчагин "Как Cloudflare помогает справиться с крупнейшими атаками в Сети"Fwdays
 
Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)
Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)
Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)Ontico
 
Длинная транзакция или когда размер имеет значение / Михаил Балаян (Odin — In...
Длинная транзакция или когда размер имеет значение / Михаил Балаян (Odin — In...Длинная транзакция или когда размер имеет значение / Михаил Балаян (Odin — In...
Длинная транзакция или когда размер имеет значение / Михаил Балаян (Odin — In...Ontico
 
Как и зачем создавать NginX-модуль — теория, практика, профит. Часть 2 / Васи...
Как и зачем создавать NginX-модуль — теория, практика, профит. Часть 2 / Васи...Как и зачем создавать NginX-модуль — теория, практика, профит. Часть 2 / Васи...
Как и зачем создавать NginX-модуль — теория, практика, профит. Часть 2 / Васи...Ontico
 
Docker в виртуальной среде VMware
Docker в виртуальной среде VMwareDocker в виртуальной среде VMware
Docker в виртуальной среде VMwareAndrey Konovalov
 

La actualidad más candente (20)

Конкурентные преимущества продуктов и технологий Microsoft. Сценарии применен...
Конкурентные преимущества продуктов и технологий Microsoft. Сценарии применен...Конкурентные преимущества продуктов и технологий Microsoft. Сценарии применен...
Конкурентные преимущества продуктов и технологий Microsoft. Сценарии применен...
 
HighLoad Junior '16 Как сравнить и выбрать хостинг-провайдера
HighLoad Junior '16 Как сравнить и выбрать хостинг-провайдераHighLoad Junior '16 Как сравнить и выбрать хостинг-провайдера
HighLoad Junior '16 Как сравнить и выбрать хостинг-провайдера
 
Как построить кластер для расчета сотен тысяч high-CPU/high-MEM-задач и не ра...
Как построить кластер для расчета сотен тысяч high-CPU/high-MEM-задач и не ра...Как построить кластер для расчета сотен тысяч high-CPU/high-MEM-задач и не ра...
Как построить кластер для расчета сотен тысяч high-CPU/high-MEM-задач и не ра...
 
Дорога к микросервисной архитектуре
Дорога к микросервисной архитектуреДорога к микросервисной архитектуре
Дорога к микросервисной архитектуре
 
Микросервисные архитектуры и немного жизненного опыта
Микросервисные архитектуры и немного жизненного опытаМикросервисные архитектуры и немного жизненного опыта
Микросервисные архитектуры и немного жизненного опыта
 
Программные интерфейсы управления серверной платформой и вычислительными стек...
Программные интерфейсы управления серверной платформой и вычислительными стек...Программные интерфейсы управления серверной платформой и вычислительными стек...
Программные интерфейсы управления серверной платформой и вычислительными стек...
 
Windows Azure Internals
Windows Azure InternalsWindows Azure Internals
Windows Azure Internals
 
Распределенные системы в Одноклассниках
Распределенные системы в ОдноклассникахРаспределенные системы в Одноклассниках
Распределенные системы в Одноклассниках
 
Что нового в SQL Server 2014
Что нового в SQL Server 2014Что нового в SQL Server 2014
Что нового в SQL Server 2014
 
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
 
Совместные решения Citrix и Dell для правильной организации рабочих мест
Совместные решения Citrix и Dell для правильной организации рабочих местСовместные решения Citrix и Dell для правильной организации рабочих мест
Совместные решения Citrix и Dell для правильной организации рабочих мест
 
Дизайн небольшого ЦОД часть 2
Дизайн небольшого ЦОД часть 2Дизайн небольшого ЦОД часть 2
Дизайн небольшого ЦОД часть 2
 
Алексей Рагозин "Java и linux борьба за микросекунды"
Алексей Рагозин "Java и linux борьба за микросекунды"Алексей Рагозин "Java и linux борьба за микросекунды"
Алексей Рагозин "Java и linux борьба за микросекунды"
 
Cеминар: Работа с технологиями - Основы хостинга сайтов
Cеминар: Работа с технологиями - Основы хостинга сайтовCеминар: Работа с технологиями - Основы хостинга сайтов
Cеминар: Работа с технологиями - Основы хостинга сайтов
 
Citrix on VMware
Citrix on VMwareCitrix on VMware
Citrix on VMware
 
Игнат Корчагин "Как Cloudflare помогает справиться с крупнейшими атаками в Сети"
Игнат Корчагин "Как Cloudflare помогает справиться с крупнейшими атаками в Сети"Игнат Корчагин "Как Cloudflare помогает справиться с крупнейшими атаками в Сети"
Игнат Корчагин "Как Cloudflare помогает справиться с крупнейшими атаками в Сети"
 
Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)
Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)
Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)
 
Длинная транзакция или когда размер имеет значение / Михаил Балаян (Odin — In...
Длинная транзакция или когда размер имеет значение / Михаил Балаян (Odin — In...Длинная транзакция или когда размер имеет значение / Михаил Балаян (Odin — In...
Длинная транзакция или когда размер имеет значение / Михаил Балаян (Odin — In...
 
Как и зачем создавать NginX-модуль — теория, практика, профит. Часть 2 / Васи...
Как и зачем создавать NginX-модуль — теория, практика, профит. Часть 2 / Васи...Как и зачем создавать NginX-модуль — теория, практика, профит. Часть 2 / Васи...
Как и зачем создавать NginX-модуль — теория, практика, профит. Часть 2 / Васи...
 
Docker в виртуальной среде VMware
Docker в виртуальной среде VMwareDocker в виртуальной среде VMware
Docker в виртуальной среде VMware
 

Destacado

معرفی رشته مهندسی کامپیوتر و فناوری اطلاعات
معرفی رشته مهندسی کامپیوتر و فناوری اطلاعاتمعرفی رشته مهندسی کامپیوتر و فناوری اطلاعات
معرفی رشته مهندسی کامپیوتر و فناوری اطلاعاتMorteza Javan
 
Bontrager 7 Edição
Bontrager 7 Edição Bontrager 7 Edição
Bontrager 7 Edição Dan Mehler
 
S.T.A.L.K.E.R. Палачи
S.T.A.L.K.E.R. ПалачиS.T.A.L.K.E.R. Палачи
S.T.A.L.K.E.R. ПалачиProjectRus Group
 
Mengenal allah lewat akal. indonesian. bahasa indonesia
Mengenal allah lewat akal. indonesian. bahasa indonesiaMengenal allah lewat akal. indonesian. bahasa indonesia
Mengenal allah lewat akal. indonesian. bahasa indonesiaHarunyahyaBahasaIndonesia
 
Eco Psicologia: Como ser Interessante e Interessado sem ser Egocêntrico?
Eco Psicologia: Como ser Interessante e Interessado sem ser Egocêntrico?Eco Psicologia: Como ser Interessante e Interessado sem ser Egocêntrico?
Eco Psicologia: Como ser Interessante e Interessado sem ser Egocêntrico?Isa Gama
 
#NoEndState : Plataformas, Produtores e Interfaces no Product tank meetup
#NoEndState : Plataformas, Produtores e Interfaces no Product tank meetup#NoEndState : Plataformas, Produtores e Interfaces no Product tank meetup
#NoEndState : Plataformas, Produtores e Interfaces no Product tank meetupPedro Donati
 
뉴스룸의 변화와 전망 - hackable newsroom
뉴스룸의 변화와 전망 - hackable newsroom뉴스룸의 변화와 전망 - hackable newsroom
뉴스룸의 변화와 전망 - hackable newsroomSungkyu Lee
 
Понятийные системы в цифровом мире: что может знать компьютер?
Понятийные системы в цифровом мире: что может знать компьютер?Понятийные системы в цифровом мире: что может знать компьютер?
Понятийные системы в цифровом мире: что может знать компьютер?Dmitry Kudryavtsev
 
Personality-targeted Gamification
Personality-targeted GamificationPersonality-targeted Gamification
Personality-targeted GamificationGustavo Tondello
 
GWT: Our Experiences
GWT: Our ExperiencesGWT: Our Experiences
GWT: Our ExperiencesYenwen Feng
 
Informal economy of india at a glance
Informal economy of india at a glanceInformal economy of india at a glance
Informal economy of india at a glanceJust.Jobs
 
Medical 2015 Mid Year Report NEW 090115
Medical 2015 Mid Year Report NEW 090115Medical 2015 Mid Year Report NEW 090115
Medical 2015 Mid Year Report NEW 090115BRIAN FLEMING, MBA
 

Destacado (20)

معرفی رشته مهندسی کامپیوتر و فناوری اطلاعات
معرفی رشته مهندسی کامپیوتر و فناوری اطلاعاتمعرفی رشته مهندسی کامپیوتر و فناوری اطلاعات
معرفی رشته مهندسی کامپیوتر و فناوری اطلاعات
 
Bontrager 7 Edição
Bontrager 7 Edição Bontrager 7 Edição
Bontrager 7 Edição
 
S.T.A.L.K.E.R. Палачи
S.T.A.L.K.E.R. ПалачиS.T.A.L.K.E.R. Палачи
S.T.A.L.K.E.R. Палачи
 
Mengenal allah lewat akal. indonesian. bahasa indonesia
Mengenal allah lewat akal. indonesian. bahasa indonesiaMengenal allah lewat akal. indonesian. bahasa indonesia
Mengenal allah lewat akal. indonesian. bahasa indonesia
 
Eco Psicologia: Como ser Interessante e Interessado sem ser Egocêntrico?
Eco Psicologia: Como ser Interessante e Interessado sem ser Egocêntrico?Eco Psicologia: Como ser Interessante e Interessado sem ser Egocêntrico?
Eco Psicologia: Como ser Interessante e Interessado sem ser Egocêntrico?
 
#NoEndState : Plataformas, Produtores e Interfaces no Product tank meetup
#NoEndState : Plataformas, Produtores e Interfaces no Product tank meetup#NoEndState : Plataformas, Produtores e Interfaces no Product tank meetup
#NoEndState : Plataformas, Produtores e Interfaces no Product tank meetup
 
뉴스룸의 변화와 전망 - hackable newsroom
뉴스룸의 변화와 전망 - hackable newsroom뉴스룸의 변화와 전망 - hackable newsroom
뉴스룸의 변화와 전망 - hackable newsroom
 
Понятийные системы в цифровом мире: что может знать компьютер?
Понятийные системы в цифровом мире: что может знать компьютер?Понятийные системы в цифровом мире: что может знать компьютер?
Понятийные системы в цифровом мире: что может знать компьютер?
 
Personality-targeted Gamification
Personality-targeted GamificationPersonality-targeted Gamification
Personality-targeted Gamification
 
Case Evaluation-Garin
Case Evaluation-GarinCase Evaluation-Garin
Case Evaluation-Garin
 
Sensibilizacao autismo alunos
Sensibilizacao autismo alunosSensibilizacao autismo alunos
Sensibilizacao autismo alunos
 
ZDG_PMF_folder_web
ZDG_PMF_folder_webZDG_PMF_folder_web
ZDG_PMF_folder_web
 
DNA-APBio Ch 9
DNA-APBio Ch 9DNA-APBio Ch 9
DNA-APBio Ch 9
 
Ensteam proposal
Ensteam proposalEnsteam proposal
Ensteam proposal
 
Cómo equilibrar tu vida
Cómo equilibrar tu vidaCómo equilibrar tu vida
Cómo equilibrar tu vida
 
GWT: Our Experiences
GWT: Our ExperiencesGWT: Our Experiences
GWT: Our Experiences
 
الموقع الإلكترونى للغرفة التجارية للقاهرة
الموقع الإلكترونى للغرفة التجارية للقاهرةالموقع الإلكترونى للغرفة التجارية للقاهرة
الموقع الإلكترونى للغرفة التجارية للقاهرة
 
Darah
DarahDarah
Darah
 
Informal economy of india at a glance
Informal economy of india at a glanceInformal economy of india at a glance
Informal economy of india at a glance
 
Medical 2015 Mid Year Report NEW 090115
Medical 2015 Mid Year Report NEW 090115Medical 2015 Mid Year Report NEW 090115
Medical 2015 Mid Year Report NEW 090115
 

Similar a Чему мы научились разрабатывая микросервисы?

Эксплуатация container-based-инфраструктур / Николай Сивко (okmeter.io)
Эксплуатация container-based-инфраструктур / Николай Сивко (okmeter.io)Эксплуатация container-based-инфраструктур / Николай Сивко (okmeter.io)
Эксплуатация container-based-инфраструктур / Николай Сивко (okmeter.io)Ontico
 
Вадим Мадисон "Опыт разработки через микросервисы"
Вадим Мадисон "Опыт разработки через микросервисы"Вадим Мадисон "Опыт разработки через микросервисы"
Вадим Мадисон "Опыт разработки через микросервисы"Tanya Denisyuk
 
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)Ontico
 
Микросервисная архитектура на базе CoreOS и Kubernetes
Микросервисная архитектура на базе CoreOS и KubernetesМикросервисная архитектура на базе CoreOS и Kubernetes
Микросервисная архитектура на базе CoreOS и KubernetesDenis Izmaylov
 
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)Ontico
 
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Coit-people
 
Eduard Dautov (Provectus): СКОРИНГ ML МОДЕЛЕЙ В МИКРОСЕРВИСНОЙ АРХИТЕКТУРЕ
Eduard Dautov (Provectus): СКОРИНГ ML МОДЕЛЕЙ В МИКРОСЕРВИСНОЙ АРХИТЕКТУРЕ Eduard Dautov (Provectus): СКОРИНГ ML МОДЕЛЕЙ В МИКРОСЕРВИСНОЙ АРХИТЕКТУРЕ
Eduard Dautov (Provectus): СКОРИНГ ML МОДЕЛЕЙ В МИКРОСЕРВИСНОЙ АРХИТЕКТУРЕ Provectus
 
Service Discovery. More that it seems
Service Discovery. More that it seemsService Discovery. More that it seems
Service Discovery. More that it seemsAleksandr Tarasov
 
Обзор MUK Microsoft VAD
Обзор MUK Microsoft VAD Обзор MUK Microsoft VAD
Обзор MUK Microsoft VAD MUK
 
Репликация базы данных CUCM
Репликация базы данных CUCMРепликация базы данных CUCM
Репликация базы данных CUCMCisco Russia
 
Микросервисы, чистый PaaS и конкурс Мисс Россия
Микросервисы, чистый PaaS и конкурс Мисс РоссияМикросервисы, чистый PaaS и конкурс Мисс Россия
Микросервисы, чистый PaaS и конкурс Мисс РоссияAlexander Byndyu
 
Передовой опыт создания Инфраструктуры SharePoint
Передовой опыт создания  Инфраструктуры SharePointПередовой опыт создания  Инфраструктуры SharePoint
Передовой опыт создания Инфраструктуры SharePointMichael Noel
 
IT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчикаIT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчикаMikhail Chinkov
 
«Microservices. Как правильно делать и когда применять?»
«Microservices. Как правильно делать и когда применять?»«Microservices. Как правильно делать и когда применять?»
«Microservices. Как правильно делать и когда применять?»DataArt
 
Надежность World of Tanks Server
Надежность World of Tanks ServerНадежность World of Tanks Server
Надежность World of Tanks ServerLevon Avakyan
 
Docker Containers orchestrators: Kubernetes vs. Swarm
Docker Containers orchestrators: Kubernetes vs. SwarmDocker Containers orchestrators: Kubernetes vs. Swarm
Docker Containers orchestrators: Kubernetes vs. SwarmDmitry Lazarenko
 
Дмитрий Меньшиков "Топ-10 фейлов на реальном highload проекте"
Дмитрий Меньшиков "Топ-10 фейлов на реальном highload проекте"Дмитрий Меньшиков "Топ-10 фейлов на реальном highload проекте"
Дмитрий Меньшиков "Топ-10 фейлов на реальном highload проекте"Fwdays
 
Новые возможности решений на базе Cisco Unified Contact Center в версии 9.0.
Новые возможности решений на базе Cisco Unified Contact Center в версии 9.0. Новые возможности решений на базе Cisco Unified Contact Center в версии 9.0.
Новые возможности решений на базе Cisco Unified Contact Center в версии 9.0. Cisco Russia
 

Similar a Чему мы научились разрабатывая микросервисы? (20)

Эксплуатация container-based-инфраструктур / Николай Сивко (okmeter.io)
Эксплуатация container-based-инфраструктур / Николай Сивко (okmeter.io)Эксплуатация container-based-инфраструктур / Николай Сивко (okmeter.io)
Эксплуатация container-based-инфраструктур / Николай Сивко (okmeter.io)
 
Sivko
SivkoSivko
Sivko
 
Вадим Мадисон "Опыт разработки через микросервисы"
Вадим Мадисон "Опыт разработки через микросервисы"Вадим Мадисон "Опыт разработки через микросервисы"
Вадим Мадисон "Опыт разработки через микросервисы"
 
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
 
Микросервисная архитектура на базе CoreOS и Kubernetes
Микросервисная архитектура на базе CoreOS и KubernetesМикросервисная архитектура на базе CoreOS и Kubernetes
Микросервисная архитектура на базе CoreOS и Kubernetes
 
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
 
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
 
Eduard Dautov (Provectus): СКОРИНГ ML МОДЕЛЕЙ В МИКРОСЕРВИСНОЙ АРХИТЕКТУРЕ
Eduard Dautov (Provectus): СКОРИНГ ML МОДЕЛЕЙ В МИКРОСЕРВИСНОЙ АРХИТЕКТУРЕ Eduard Dautov (Provectus): СКОРИНГ ML МОДЕЛЕЙ В МИКРОСЕРВИСНОЙ АРХИТЕКТУРЕ
Eduard Dautov (Provectus): СКОРИНГ ML МОДЕЛЕЙ В МИКРОСЕРВИСНОЙ АРХИТЕКТУРЕ
 
Service Discovery. More that it seems
Service Discovery. More that it seemsService Discovery. More that it seems
Service Discovery. More that it seems
 
Обзор MUK Microsoft VAD
Обзор MUK Microsoft VAD Обзор MUK Microsoft VAD
Обзор MUK Microsoft VAD
 
Репликация базы данных CUCM
Репликация базы данных CUCMРепликация базы данных CUCM
Репликация базы данных CUCM
 
Микросервисы, чистый PaaS и конкурс Мисс Россия
Микросервисы, чистый PaaS и конкурс Мисс РоссияМикросервисы, чистый PaaS и конкурс Мисс Россия
Микросервисы, чистый PaaS и конкурс Мисс Россия
 
Передовой опыт создания Инфраструктуры SharePoint
Передовой опыт создания  Инфраструктуры SharePointПередовой опыт создания  Инфраструктуры SharePoint
Передовой опыт создания Инфраструктуры SharePoint
 
MS Swit 2012 - SQL Server 2012
MS Swit 2012 - SQL Server 2012MS Swit 2012 - SQL Server 2012
MS Swit 2012 - SQL Server 2012
 
IT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчикаIT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчика
 
«Microservices. Как правильно делать и когда применять?»
«Microservices. Как правильно делать и когда применять?»«Microservices. Как правильно делать и когда применять?»
«Microservices. Как правильно делать и когда применять?»
 
Надежность World of Tanks Server
Надежность World of Tanks ServerНадежность World of Tanks Server
Надежность World of Tanks Server
 
Docker Containers orchestrators: Kubernetes vs. Swarm
Docker Containers orchestrators: Kubernetes vs. SwarmDocker Containers orchestrators: Kubernetes vs. Swarm
Docker Containers orchestrators: Kubernetes vs. Swarm
 
Дмитрий Меньшиков "Топ-10 фейлов на реальном highload проекте"
Дмитрий Меньшиков "Топ-10 фейлов на реальном highload проекте"Дмитрий Меньшиков "Топ-10 фейлов на реальном highload проекте"
Дмитрий Меньшиков "Топ-10 фейлов на реальном highload проекте"
 
Новые возможности решений на базе Cisco Unified Contact Center в версии 9.0.
Новые возможности решений на базе Cisco Unified Contact Center в версии 9.0. Новые возможности решений на базе Cisco Unified Contact Center в версии 9.0.
Новые возможности решений на базе Cisco Unified Contact Center в версии 9.0.
 

Чему мы научились разрабатывая микросервисы?

  • 2. • Услуги системной интеграции, начиная от разработки технологических решений и заканчивая доставкой видео-сигнала до конечного пользователя • Интернет-видеоплатформа для каналов МатчТВ и НТВ-ПЛЮС • 300 000 одновременных пользователей • > 1 000 000 уникальных посетителей в сутки • Отдаем контента до 300 Тб/час
  • 3. — Достучаться до небес (фильм) «Пойми, на небесах только и говорят, что
 о море. Как оно бесконечно прекрасно…»
  • 4. Кто не знает, что такое микросервис?
  • 6. Проблемы • Pipeline: для каждого свой проект в git, CI, … • Сложность системы: распределенные коммуникации, дополнительное API, больше точек отказа и логики их обработки • Контроль целостности данных, сложность распределенных транзакций
  • 8. Проблемы • Оверхед: сетевой, сериализация/десериализация • Обнаружение сервисов • Постоянный контроль независимости сервисов • Инструментарий!
  • 9.
  • 11. В чем бонусы? • Независимая разработка
  • 12. В чем бонусы? • Независимая разработка • Отсутствие завязки на технологии
  • 13. В чем бонусы? • Независимая разработка • Отсутствие завязки на технологии • Скорость тестирования (независимость при тестировании)
  • 14. В чем бонусы? • Независимая разработка • Отсутствие завязки на технологии • Скорость тестирования (независимость при тестировании) • Легкость масштабирования (если она вообще есть)
  • 15. В чем бонусы? • Независимая разработка • Отсутствие завязки на технологии • Скорость тестирования (независимость при тестировании) • Легкость масштабирования (если она вообще есть) • Минимизация ущерба при отказе сервиса (при корректной реализации остальных)
  • 17. Насколько микро- должен быть микросервис? • По длительности разработки
  • 18. Насколько микро- должен быть микросервис? • По длительности разработки • По количеству строк кода
  • 19. Насколько микро- должен быть микросервис? • По длительности разработки • По количеству строк кода • По количеству разработчиков за N спринтов
  • 20. Сервис должен быть независимым!
  • 22. Как проверить независимость? 1. Опишите бизнес-задачу сервиса одним простым предложением
  • 23. Как проверить независимость? 1. Опишите бизнес-задачу сервиса одним простым предложением 2. Какое количество потребителей у сервиса?
  • 24. Как проверить независимость? 1. Опишите бизнес-задачу сервиса одним простым предложением 2. Какое количество потребителей у сервиса? 3. Приводит ли деплой одного сервиса к деплою других сервисов?
  • 25. Требования к микросервису • Скрывает внутренние детали реализации • Деплоится независимо • Падая, не роняет все остальное • Легко мониторится • Реализует бизнес-модель • Полностью децентрализован
  • 28. Конфигурация Что пробовали? • файлы конфигурации при деплое разливать по всем целевым машинам
  • 29. Конфигурация Что пробовали? • файлы конфигурации при деплое разливать по всем целевым машинам • файлы конфигурации класть в контейнер
  • 30. Конфигурация Что пробовали? • файлы конфигурации при деплое разливать по всем целевым машинам • файлы конфигурации класть в контейнер • выставлять переменные окружения • при сборке контейнера (ENV DB=…) • при запуске контейнера
  • 31. Конфигурация • Общее K/V хранилище • Сервис должен быть заточен под смену конфигурации • Микс вариаций с приоритетами: <СЕРВИС>/ (/conf/ms/recorder/) <СЕРВИС>/<ВЕРСИЯ>/ (/conf/ms/recorder/0.12) <СЕРВИС>/<СРЕДА>/ <СЕРВИС>/<ВЕРСИЯ>/<СРЕДА>/ <СЕРВИС>/<ВЕРСИЯ>/<НОДА>/
  • 32. Конфигурация 1. git2consul • не используем отдельные проекты/бранчи в git для основных параметров • загружаем конфигурацию при деплое • стартовый путь: 
 /conf/ms/<ИМЯ СЕРВИСА>/<BUILD NO>/ 2. Vault
 все секретное храним в отдельных проектах
  • 34.
  • 35.
  • 36.
  • 37. 736
  • 39. Как решать? • Помнить, что микросервисы — они как PHP, только микросервисы
  • 40. Как решать? • Помнить, что микросервисы — они как PHP, только микросервисы • Вместо полноценного мониторинга — строим dashboard
  • 41. Как решать? • Помнить, что микросервисы — они как PHP, только микросервисы • Вместо полноценного мониторинга — строим dashboard • Алерты по статистическим и пороговым значениям вместо бинарных
  • 42. Как решать? • Помнить, что микросервисы — они как PHP, только микросервисы • Вместо полноценного мониторинга — строим dashboard • Алерты по статистическим и пороговым значениям вместо бинарных • На одном dashboard сводить графики хост-машин и статистики 
 по docker-демону
  • 44. 1. Сбор метрик - это важно, но еще важнее постоянный анализ полученных данных 2. Система мониторинга должна быть более надежной и масштабируемой, чем то, что она контролирует 3. Система должна быть оптимизирована для распределенных, недолговечных, облачных, контейнеризованных микросервисов 4. Собирайте метрики часто … очень часто … 
 Стремитесь к интервалам < 10 сек Общие рекомендации
  • 46. В чем сложность? 1. Корректность взаимодействия с другими сервисами
  • 47. В чем сложность? 1. Корректность взаимодействия с другими сервисами 2. Сервис назначения доступен, но: • Отвечает очень медленно • Отвечает эпизодически • Отвечает некорректно
  • 48. В чем сложность? 1. Корректность взаимодействия с другими сервисами 2. Сервис назначения доступен, но: • Отвечает очень медленно • Отвечает эпизодически • Отвечает некорректно Circuit Breaker!
  • 49. В чем сложность? 1. Корректность взаимодействия с другими сервисами 2. Сервис назначения доступен, но: • Отвечает очень медленно • Отвечает эпизодически • Отвечает некорректно Circuit Breaker! [Hystrix, Netflix]
  • 51. Тестовый
 кластер Raspberry Pi 3 - 6шт 
 Фото: pocketcluster.wordpress.com
  • 53. Что пробовали? • Проброс файловой системы в контейнер
  • 54. Что пробовали? • Проброс файловой системы в контейнер • «Собирающие контейнеры»
  • 55. Что пробовали? • Проброс файловой системы в контейнер • «Собирающие контейнеры» • Shared data volume
  • 56. Что пробовали? • Проброс файловой системы в контейнер • «Собирающие контейнеры» • Shared data volume • Flocker
  • 58. Для БД • Выделенные сервера • Особая конфигурация машин • Расширенная сеть
  • 60. Реестр сервисов • consul — key/value хранилище, DNS, Health-Check, работа с несколькими ДЦ из коробки • etcd — key/value хранилище • skydock — Health-Check, регистрация docker-контейнеров • skydns — DNS • Apache Zookeeper — вариация key/value хранилища, сервис блокировок, вариация на тему DNS • !redis — запись только в мастер, нет механизма достижения консенсуса при определении актуального состояния данных после выхода из строя отдельных узлов хранилища
  • 61. Оркестрация • docker swarm [1.2.2] — доставка, регистрация, масштабирование (consul) • nomad [0.3.2] — доставка, регистрация, масштабирование (consul) • kubernetes [1.2.4] — доставка, регистрация, масштабирование, LB (etcd) • mesos [0.28.1] (marathon [1.1.1]) — доставка, регистрация, масштабирование, LB (zookeeper, HAProxy)
  • 62. Consul Template {{range services}}{{ if in .Tags "demo" }}{{if .Tags | join "," | regexMatch "urlprefix-"}} upstream {{.Name}} { least_conn; {{range service .Name}}server {{.Address}}:{{.Port}} max_fails=3 fail_timeout=30 weight=1;{{end}} } {{end}}{{end}}{{end}} server { listen 80 default_server; location /health { add_header Content-Type text/plain; return 200 'OK'; } {{range services}}{{ if in .Tags "demo" }}{{if .Tags | join "," | regexMatch "urlprefix-"}} {{range .Tags}}{{ if . | contains "urlprefix-" }}location {{. | replaceAll "urlprefix-" ""}} { {{end}}{{end}} proxy_pass http://{{.Name}}/; # / в конце означает обрезку проксируемого пути proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } {{end}}{{end}}{{end}} }
  • 63. Consul Template {{range services}}
 {{ if in .Tags "demo" }}
 {{if .Tags | join "," | regexMatch “urlprefix-“}} #urlprefix-/playlist upstream {{.Name}} { least_conn; {{range service .Name}}server {{.Address}}:{{.Port}} max_fails=3 fail_timeout=30 weight=1;{{end}} } {{end}}
 {{end}}
 {{end}} в списке только прошедшие
 health-check!
  • 64. Consul Template {{range services}} {{ if in .Tags "demo" }} {{if .Tags | join "," | regexMatch "urlprefix-"}} {{range .Tags}}{{ if . | contains "urlprefix-" }} # Tag: urlprefix-/playlist location {{. | replaceAll "urlprefix-" ""}} { {{end}}{{end}} proxy_pass http://{{.Name}}/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } {{end}}{{end}}{{end}}
  • 65. Consul Template upstream playlistapi { least_conn; server 10.1.1.2:5100 max_fails=3 fail_timeout=30 weight=1; } 
 ... 
 location /playlist { proxy_pass http://playlistapi/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; }
  • 67. Чек-лист Как конфигурировать? Как мониторить и считать метрики? Как сервисы будут находить друг друга? Как сервис будет взаимодействовать с остальными частями проекта? Как тестировать сервис и систему целиком? Как обрабатывать сбои связанных сервисов? Как переезжать на новую версию? Как масштабировать под нагрузкой?