Вадим Мадисон "Опыт разработки через...
TRANSCRIPT
![Page 1: Вадим Мадисон "Опыт разработки через микросервисы"](https://reader034.vdocuments.mx/reader034/viewer/2022042706/5872dd791a28ab74188b785f/html5/thumbnails/1.jpg)
«Опыт разработки через микросервисы»
![Page 2: Вадим Мадисон "Опыт разработки через микросервисы"](https://reader034.vdocuments.mx/reader034/viewer/2022042706/5872dd791a28ab74188b785f/html5/thumbnails/2.jpg)
• Услуги системной интеграции, начиная от разработки технологических решений и заканчивая доставкой видео-сигнала до конечного пользователя
• Интернет-видеоплатформа для каналов МатчТВ и НТВ-ПЛЮС
• 300 000 одновременных пользователей
• > 1 000 000 уникальных посетителей в сутки
• Отдаем контента до 300 Тб/час
![Page 3: Вадим Мадисон "Опыт разработки через микросервисы"](https://reader034.vdocuments.mx/reader034/viewer/2022042706/5872dd791a28ab74188b785f/html5/thumbnails/3.jpg)
Кривая Гартнера
Появление технологии
![Page 4: Вадим Мадисон "Опыт разработки через микросервисы"](https://reader034.vdocuments.mx/reader034/viewer/2022042706/5872dd791a28ab74188b785f/html5/thumbnails/4.jpg)
Кривая Гартнера
Появление технологии
Ажиотаж (завышенные ожидания)
![Page 5: Вадим Мадисон "Опыт разработки через микросервисы"](https://reader034.vdocuments.mx/reader034/viewer/2022042706/5872dd791a28ab74188b785f/html5/thumbnails/5.jpg)
Кривая Гартнера
Появление технологии
Ажиотаж (завышенные ожидания)
Разочарование
![Page 6: Вадим Мадисон "Опыт разработки через микросервисы"](https://reader034.vdocuments.mx/reader034/viewer/2022042706/5872dd791a28ab74188b785f/html5/thumbnails/6.jpg)
Кривая Гартнера
Появление технологии
Ажиотаж (завышенные ожидания)
Разочарование
Осмысление
![Page 7: Вадим Мадисон "Опыт разработки через микросервисы"](https://reader034.vdocuments.mx/reader034/viewer/2022042706/5872dd791a28ab74188b785f/html5/thumbnails/7.jpg)
Кривая Гартнера
Появление технологии
Ажиотаж (завышенные ожидания)
Разочарование
ОсмыслениеРазвитие
![Page 8: Вадим Мадисон "Опыт разработки через микросервисы"](https://reader034.vdocuments.mx/reader034/viewer/2022042706/5872dd791a28ab74188b785f/html5/thumbnails/8.jpg)
Минусы микросервисов• Распределенные коммуникации, дополнительное API, больше точек отказа и логики их обработки
• Оверхед: сетевой, сериализация/десериализация
• Обнаружение сервисов
• Инструментарий!
![Page 9: Вадим Мадисон "Опыт разработки через микросервисы"](https://reader034.vdocuments.mx/reader034/viewer/2022042706/5872dd791a28ab74188b785f/html5/thumbnails/9.jpg)
А чем они тогда
привлекают?
![Page 10: Вадим Мадисон "Опыт разработки через микросервисы"](https://reader034.vdocuments.mx/reader034/viewer/2022042706/5872dd791a28ab74188b785f/html5/thumbnails/10.jpg)
Плюсы микросервисов• Независимая разработка
• Лучший контроль технического и технологического долга
• Скорость тестирования, доставки, запуска
• Упрощение масштабирования
![Page 11: Вадим Мадисон "Опыт разработки через микросервисы"](https://reader034.vdocuments.mx/reader034/viewer/2022042706/5872dd791a28ab74188b785f/html5/thumbnails/11.jpg)
Когда микросервисы не нужны / вредны?• Небольшой проект
• Сжатые сроки разработки
• Короткий цикл поддержки
• Отсутствие CI / CD
• Нет команды, отвечающей за инфраструктуру
• Высокие требования к эффективности
![Page 12: Вадим Мадисон "Опыт разработки через микросервисы"](https://reader034.vdocuments.mx/reader034/viewer/2022042706/5872dd791a28ab74188b785f/html5/thumbnails/12.jpg)
Когда микросервисы “must have”?• Большой проект
• Высокие нагрузки
• Долгий цикл разработки
• Длительный период жизни и поддержки
• Высокие требования к использованию оптимальных технологий
• Готовы к исследованиям, оптимизациям и новым технологиям
![Page 13: Вадим Мадисон "Опыт разработки через микросервисы"](https://reader034.vdocuments.mx/reader034/viewer/2022042706/5872dd791a28ab74188b785f/html5/thumbnails/13.jpg)
Когда размер имеет значение…
![Page 14: Вадим Мадисон "Опыт разработки через микросервисы"](https://reader034.vdocuments.mx/reader034/viewer/2022042706/5872dd791a28ab74188b785f/html5/thumbnails/14.jpg)
Сервис должен быть независимым!
![Page 15: Вадим Мадисон "Опыт разработки через микросервисы"](https://reader034.vdocuments.mx/reader034/viewer/2022042706/5872dd791a28ab74188b785f/html5/thumbnails/15.jpg)
Сервис независим если…• Возможно описать бизнес-задачу сервиса одним простым предложением
• У сервиса больше одного потребителя
• Деплой сервиса не приводит к деплою других сервисов
![Page 16: Вадим Мадисон "Опыт разработки через микросервисы"](https://reader034.vdocuments.mx/reader034/viewer/2022042706/5872dd791a28ab74188b785f/html5/thumbnails/16.jpg)
Сервис независим если…• Возможно описать бизнес-задачу сервиса одним простым предложением
• У сервиса больше одного потребителя
• Деплой сервиса не приводит к деплою других сервисов
![Page 17: Вадим Мадисон "Опыт разработки через микросервисы"](https://reader034.vdocuments.mx/reader034/viewer/2022042706/5872dd791a28ab74188b785f/html5/thumbnails/17.jpg)
Сервис независим если…• Возможно описать бизнес-задачу сервиса одним простым предложением
• У сервиса больше одного потребителя
• Деплой сервиса не приводит к деплою других сервисов
![Page 18: Вадим Мадисон "Опыт разработки через микросервисы"](https://reader034.vdocuments.mx/reader034/viewer/2022042706/5872dd791a28ab74188b785f/html5/thumbnails/18.jpg)
Общие рекомендации
![Page 19: Вадим Мадисон "Опыт разработки через микросервисы"](https://reader034.vdocuments.mx/reader034/viewer/2022042706/5872dd791a28ab74188b785f/html5/thumbnails/19.jpg)
Общие рекомендации• Не использовать фреймворки
• Собирать проект из шаблона
• Не бояться “copy-paste”
• Обратить внимание на манифест “12-факторное приложение”
![Page 20: Вадим Мадисон "Опыт разработки через микросервисы"](https://reader034.vdocuments.mx/reader034/viewer/2022042706/5872dd791a28ab74188b785f/html5/thumbnails/20.jpg)
Общие рекомендации• Не использовать фреймворки
• Собирать проект из шаблона
• Не бояться “copy-paste”
• Обратить внимание на манифест “12-факторное приложение”
![Page 21: Вадим Мадисон "Опыт разработки через микросервисы"](https://reader034.vdocuments.mx/reader034/viewer/2022042706/5872dd791a28ab74188b785f/html5/thumbnails/21.jpg)
Общие рекомендации• Не использовать фреймворки
• Собирать проект из шаблона
• Не бояться “copy-paste”
• Обратить внимание на манифест “12-факторное приложение”
![Page 22: Вадим Мадисон "Опыт разработки через микросервисы"](https://reader034.vdocuments.mx/reader034/viewer/2022042706/5872dd791a28ab74188b785f/html5/thumbnails/22.jpg)
Общие рекомендации• Не использовать фреймворки
• Собирать проект из шаблона
• Не бояться “copy-paste”
• Обратить внимание на манифест “12-факторное приложение”
https://12factor.net/ru/
![Page 23: Вадим Мадисон "Опыт разработки через микросервисы"](https://reader034.vdocuments.mx/reader034/viewer/2022042706/5872dd791a28ab74188b785f/html5/thumbnails/23.jpg)
Конфигурация
![Page 24: Вадим Мадисон "Опыт разработки через микросервисы"](https://reader034.vdocuments.mx/reader034/viewer/2022042706/5872dd791a28ab74188b785f/html5/thumbnails/24.jpg)
КонфигурацияЧто пробовали?
• файлы конфигурации при деплое разливать по всем целевым машинам
• файлы конфигурации класть в контейнер
• выставлять переменные окружения
• при сборке контейнера (ENV DB=…)
• при запуске контейнера
![Page 25: Вадим Мадисон "Опыт разработки через микросервисы"](https://reader034.vdocuments.mx/reader034/viewer/2022042706/5872dd791a28ab74188b785f/html5/thumbnails/25.jpg)
КонфигурацияЧто пробовали?
• файлы конфигурации при деплое разливать по всем целевым машинам
• файлы конфигурации класть в контейнер
• выставлять переменные окружения
• при сборке контейнера (ENV DB=…)
• при запуске контейнера
![Page 26: Вадим Мадисон "Опыт разработки через микросервисы"](https://reader034.vdocuments.mx/reader034/viewer/2022042706/5872dd791a28ab74188b785f/html5/thumbnails/26.jpg)
КонфигурацияЧто пробовали?
• файлы конфигурации при деплое разливать по всем целевым машинам
• файлы конфигурации класть в контейнер
• выставлять переменные окружения
• при сборке контейнера (ENV DB=…)
• при запуске контейнера
![Page 27: Вадим Мадисон "Опыт разработки через микросервисы"](https://reader034.vdocuments.mx/reader034/viewer/2022042706/5872dd791a28ab74188b785f/html5/thumbnails/27.jpg)
Конфигурация! Единая точка конфигурирования
" Но не единая точка отказа!
! Проверенные решения…
![Page 28: Вадим Мадисон "Опыт разработки через микросервисы"](https://reader034.vdocuments.mx/reader034/viewer/2022042706/5872dd791a28ab74188b785f/html5/thumbnails/28.jpg)
Конфигурация
https://www.consul.io/ https://coreos.com/etcd/
![Page 29: Вадим Мадисон "Опыт разработки через микросервисы"](https://reader034.vdocuments.mx/reader034/viewer/2022042706/5872dd791a28ab74188b785f/html5/thumbnails/29.jpg)
<СЕРВИС>/ (/conf/ms/recorder/)
<СЕРВИС>/<ВЕРСИЯ>/ (/conf/ms/recorder/0.12)
<СЕРВИС>/<СРЕДА>/ (dev, stage, production)
Кофигурация к KV
![Page 30: Вадим Мадисон "Опыт разработки через микросервисы"](https://reader034.vdocuments.mx/reader034/viewer/2022042706/5872dd791a28ab74188b785f/html5/thumbnails/30.jpg)
<СЕРВИС>/ (/conf/ms/recorder/)
<СЕРВИС>/<ВЕРСИЯ>/ (/conf/ms/recorder/0.12)
<СЕРВИС>/<СРЕДА>/ (dev, stage, production)
/conf/ms/recorder/production/db : "recorder"
/conf/ms/recorder/production/server : "10.0.102.2"
Кофигурация к KV
![Page 31: Вадим Мадисон "Опыт разработки через микросервисы"](https://reader034.vdocuments.mx/reader034/viewer/2022042706/5872dd791a28ab74188b785f/html5/thumbnails/31.jpg)
<СЕРВИС>/ (/conf/ms/recorder/)
<СЕРВИС>/<ВЕРСИЯ>/ (/conf/ms/recorder/0.12)
<СЕРВИС>/<СРЕДА>/ (dev, stage, production)
/conf/ms/recorder/0.12/production/db : "recorder"
/conf/ms/recorder/0.12/production/server : "10.0.0.12"
Кофигурация к KV
![Page 32: Вадим Мадисон "Опыт разработки через микросервисы"](https://reader034.vdocuments.mx/reader034/viewer/2022042706/5872dd791a28ab74188b785f/html5/thumbnails/32.jpg)
Конфигурация1. git2consul
• не используем отдельные проекты/бранчи в git для основных параметров
• загружаем конфигурацию при деплое
• стартовый путь: /conf/ms/<ИМЯ СЕРВИСА>/<BUILD NO>/
2. Vaultвсе секретное храним в отдельных проектах
![Page 33: Вадим Мадисон "Опыт разработки через микросервисы"](https://reader034.vdocuments.mx/reader034/viewer/2022042706/5872dd791a28ab74188b785f/html5/thumbnails/33.jpg)
Журналирование• Единый формат логов, сведение в общее хранилище
![Page 34: Вадим Мадисон "Опыт разработки через микросервисы"](https://reader034.vdocuments.mx/reader034/viewer/2022042706/5872dd791a28ab74188b785f/html5/thumbnails/34.jpg)
Журналирование
![Page 35: Вадим Мадисон "Опыт разработки через микросервисы"](https://reader034.vdocuments.mx/reader034/viewer/2022042706/5872dd791a28ab74188b785f/html5/thumbnails/35.jpg)
Health-check! HTTP / HTTPS
! 2 основных метода/ready/health
! 1 опциональный/info
![Page 36: Вадим Мадисон "Опыт разработки через микросервисы"](https://reader034.vdocuments.mx/reader034/viewer/2022042706/5872dd791a28ab74188b785f/html5/thumbnails/36.jpg)
Health-check
![Page 37: Вадим Мадисон "Опыт разработки через микросервисы"](https://reader034.vdocuments.mx/reader034/viewer/2022042706/5872dd791a28ab74188b785f/html5/thumbnails/37.jpg)
Тестирование
![Page 38: Вадим Мадисон "Опыт разработки через микросервисы"](https://reader034.vdocuments.mx/reader034/viewer/2022042706/5872dd791a28ab74188b785f/html5/thumbnails/38.jpg)
В чем сложность?• Корректность взаимодействия с другими сервисами
• Сервис назначения доступен, но:
• Отвечает очень медленно
• Отвечает эпизодически
• Отвечает некорректно
![Page 39: Вадим Мадисон "Опыт разработки через микросервисы"](https://reader034.vdocuments.mx/reader034/viewer/2022042706/5872dd791a28ab74188b785f/html5/thumbnails/39.jpg)
В чем сложность?• Корректность взаимодействия с другими сервисами
• Сервис назначения доступен, но:
• Отвечает очень медленно
• Отвечает эпизодически
• Отвечает некорректно
![Page 40: Вадим Мадисон "Опыт разработки через микросервисы"](https://reader034.vdocuments.mx/reader034/viewer/2022042706/5872dd791a28ab74188b785f/html5/thumbnails/40.jpg)
В чем сложность?• Корректность взаимодействия с другими сервисами
• Сервис назначения доступен, но:
• Отвечает очень медленно
• Отвечает эпизодически
• Отвечает некорректно
Circuit Breaker![Hystrix, Netflix]
![Page 41: Вадим Мадисон "Опыт разработки через микросервисы"](https://reader034.vdocuments.mx/reader034/viewer/2022042706/5872dd791a28ab74188b785f/html5/thumbnails/41.jpg)
В чем сложность?• Корректность взаимодействия с другими сервисами
• Сервис назначения доступен, но:
• Отвечает очень медленно
• Отвечает эпизодически
• Отвечает некорректно
Circuit Breaker![Hystrix, Netflix]
![Page 42: Вадим Мадисон "Опыт разработки через микросервисы"](https://reader034.vdocuments.mx/reader034/viewer/2022042706/5872dd791a28ab74188b785f/html5/thumbnails/42.jpg)
Тестовыйкластер
Raspberry Pi 3 - 6шт
![Page 43: Вадим Мадисон "Опыт разработки через микросервисы"](https://reader034.vdocuments.mx/reader034/viewer/2022042706/5872dd791a28ab74188b785f/html5/thumbnails/43.jpg)
Хранение
![Page 44: Вадим Мадисон "Опыт разработки через микросервисы"](https://reader034.vdocuments.mx/reader034/viewer/2022042706/5872dd791a28ab74188b785f/html5/thumbnails/44.jpg)
Что пробовали?• Проброс файловой системы в контейнер
![Page 45: Вадим Мадисон "Опыт разработки через микросервисы"](https://reader034.vdocuments.mx/reader034/viewer/2022042706/5872dd791a28ab74188b785f/html5/thumbnails/45.jpg)
Что пробовали?• Проброс файловой системы в контейнер
• «Собирающие контейнеры»
![Page 46: Вадим Мадисон "Опыт разработки через микросервисы"](https://reader034.vdocuments.mx/reader034/viewer/2022042706/5872dd791a28ab74188b785f/html5/thumbnails/46.jpg)
Что пробовали?• Проброс файловой системы в контейнер
• «Собирающие контейнеры»
• Shared data volume
![Page 47: Вадим Мадисон "Опыт разработки через микросервисы"](https://reader034.vdocuments.mx/reader034/viewer/2022042706/5872dd791a28ab74188b785f/html5/thumbnails/47.jpg)
Что пробовали?• Проброс файловой системы в контейнер
• «Собирающие контейнеры»
• Shared data volume
• Flocker
![Page 48: Вадим Мадисон "Опыт разработки через микросервисы"](https://reader034.vdocuments.mx/reader034/viewer/2022042706/5872dd791a28ab74188b785f/html5/thumbnails/48.jpg)
Для файлового храненияРаспределенная файловая система: CEPH (http://ceph.com/)
![Page 49: Вадим Мадисон "Опыт разработки через микросервисы"](https://reader034.vdocuments.mx/reader034/viewer/2022042706/5872dd791a28ab74188b785f/html5/thumbnails/49.jpg)
Для БД• Выделенные сервера
• Особая конфигурация машин
• Расширенная сеть
![Page 50: Вадим Мадисон "Опыт разработки через микросервисы"](https://reader034.vdocuments.mx/reader034/viewer/2022042706/5872dd791a28ab74188b785f/html5/thumbnails/50.jpg)
Оркестрация
![Page 51: Вадим Мадисон "Опыт разработки через микросервисы"](https://reader034.vdocuments.mx/reader034/viewer/2022042706/5872dd791a28ab74188b785f/html5/thumbnails/51.jpg)
Оркестрация
![Page 52: Вадим Мадисон "Опыт разработки через микросервисы"](https://reader034.vdocuments.mx/reader034/viewer/2022042706/5872dd791a28ab74188b785f/html5/thumbnails/52.jpg)
Оркестрация
![Page 53: Вадим Мадисон "Опыт разработки через микросервисы"](https://reader034.vdocuments.mx/reader034/viewer/2022042706/5872dd791a28ab74188b785f/html5/thumbnails/53.jpg)
Оркестрация
![Page 54: Вадим Мадисон "Опыт разработки через микросервисы"](https://reader034.vdocuments.mx/reader034/viewer/2022042706/5872dd791a28ab74188b785f/html5/thumbnails/54.jpg)
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}}
}
![Page 55: Вадим Мадисон "Опыт разработки через микросервисы"](https://reader034.vdocuments.mx/reader034/viewer/2022042706/5872dd791a28ab74188b785f/html5/thumbnails/55.jpg)
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!
![Page 56: Вадим Мадисон "Опыт разработки через микросервисы"](https://reader034.vdocuments.mx/reader034/viewer/2022042706/5872dd791a28ab74188b785f/html5/thumbnails/56.jpg)
Consul Template{{range services}}
{{ if in .Tags "demo" }}{{if .Tags | join "," | regexMatch "urlprefix-"}}
{{range .Tags}}{{ if . | contains "urlprefix-" }}# Tag: urlprefix-/playlistlocation {{. | replaceAll "urlprefix-" ""}} { {{end}}{{end}}proxy_pass http://{{.Name}}/;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;
}{{end}}{{end}}{{end}}
![Page 57: Вадим Мадисон "Опыт разработки через микросервисы"](https://reader034.vdocuments.mx/reader034/viewer/2022042706/5872dd791a28ab74188b785f/html5/thumbnails/57.jpg)
Consul Templateupstream 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;
}
![Page 58: Вадим Мадисон "Опыт разработки через микросервисы"](https://reader034.vdocuments.mx/reader034/viewer/2022042706/5872dd791a28ab74188b785f/html5/thumbnails/58.jpg)
http://bit.ly/1TE1KdMИсходные коды примера
![Page 59: Вадим Мадисон "Опыт разработки через микросервисы"](https://reader034.vdocuments.mx/reader034/viewer/2022042706/5872dd791a28ab74188b785f/html5/thumbnails/59.jpg)
Чек-листКак конфигурировать?
Как мониторить и считать метрики?
Как сервисы будут находить друг друга?
Как сервис будет взаимодействовать с остальными частями проекта?
Как тестировать сервис и систему целиком?
Как обрабатывать сбои связанных сервисов?
Как переезжать на новую версию?
Как масштабировать под нагрузкой?