Инфраструктурные паттерны микросервисной архитектуры

Содержание

Слайд 2

Меня хорошо слышно && видно?

Меня хорошо слышно && видно?

Слайд 3

Карта вебинара

Системы оркестрации
App server vs virtual machine vs container
Service discovery
Стратегии деплоя
Конфигурирование приложений
Логирование
Мониторинг

Карта вебинара Системы оркестрации App server vs virtual machine vs container Service
и алертинга на примере прометеуса
Распределенные транзакции
Service mesh

Слайд 4

Инфраструктурные паттерны микросервисной архитектуры

Инфраструктурные паттерны микросервисной архитектуры

Слайд 5

Как разместить несколько сервисов на одной машине?

Cервер приложений jvm tomcat/jboss, python uwsgi
Виртуальные

Как разместить несколько сервисов на одной машине? Cервер приложений jvm tomcat/jboss, python
машины Vagrant, vmware
Контейнеры Docker, rkt

Слайд 6

Сервер приложений

Быстрый деплой
Хорошая утилизация ресурсов
Отсутствие изоляции по ресурсам между разными сервисами –

Сервер приложений Быстрый деплой Хорошая утилизация ресурсов Отсутствие изоляции по ресурсам между
CPU, memory
Фиксированный язык программирования или фреймворк

Слайд 7

Виртуальная машина

Technology agnostic
Изоляция ресурсов между сервисами
Большая утилизация ресурсов
Долгий деплой

Виртуальная машина Technology agnostic Изоляция ресурсов между сервисами Большая утилизация ресурсов Долгий деплой

Слайд 8

Контейнеры

Technology agnostic
Изоляция и ограничение сервисов друг от друга
Эффективная утилизация ресурсов

Контейнеры Technology agnostic Изоляция и ограничение сервисов друг от друга Эффективная утилизация ресурсов

Слайд 9

Service discovery

Как клиенту понять, где находится инстанс сервиса?

Service discovery Как клиенту понять, где находится инстанс сервиса?

Слайд 10

Client-side discovery

Клиент сам ходит в реест сервисов, получает оттуда данные
Сервисы сами себя

Client-side discovery Клиент сам ходит в реест сервисов, получает оттуда данные Сервисы
регистрируют в этом реестре

Слайд 11

Eureka

https://github.com/Netflix/eureka

Eureka https://github.com/Netflix/eureka

Слайд 12

Client-side discovery

Работает с несколькими системами оркестрации одновременно: k8s, standalone-сервисы, nomad и т.д.

Client-side discovery Работает с несколькими системами оркестрации одновременно: k8s, standalone-сервисы, nomad и

Зависит от поддержки языка программирования и фреймворка сервисов

Слайд 13

Server-side discovery

Оркестратор регистрирует сервис в реестре
При обращении клиент использует service name или

Server-side discovery Оркестратор регистрирует сервис в реестре При обращении клиент использует service
ip
При обращении на этот ip роутер заглядывает в реест и перенаправляет запрос (осуществляет LoadBalancing)

Слайд 14

Стратегии деплоя

Recreate
Rolling update
Blue/green
Canary

Стратегии деплоя Recreate Rolling update Blue/green Canary

Слайд 15

Recreate

Убить существующий деплой
Поднять новый
Даунтайм

Recreate Убить существующий деплой Поднять новый Даунтайм

Слайд 16

Rolling update

Снимаем трафик с пода
Обновляем версию
Переключаем трафик в поду
Плюсы и минусы:
+ нет

Rolling update Снимаем трафик с пода Обновляем версию Переключаем трафик в поду
даунтайма
- долгое время раскатки
- API без обратной совместимости не раскатать

Слайд 17

Blue/green deployment

Поднимаем новую версию
Проверяем ее
Переключаем трафик в новую версию
Плюсы и минусы:
+ нет

Blue/green deployment Поднимаем новую версию Проверяем ее Переключаем трафик в новую версию
даунтайма
+ API без обратной совместимости можно раскатить
- требуется в 2 раза больше ресурсов

Слайд 18

Канареечные деплои

Поднимаем новую версию одновременно со старой
Переключаем на нее часть трафика
Если все

Канареечные деплои Поднимаем новую версию одновременно со старой Переключаем на нее часть
хорошо, переключаем остальной трафик
Плюсы и минусы:
- API без обратной совместимости нельзя раскатить
+ нет даунтайма
+ быстро откатить
+ уменьшаем риски плохого релиза

Слайд 19

Observability

Observability

Слайд 20

Конфигурирование приложений

Конфигурация приложения – это все, что может меняться, между развертываниями

Конфигурирование приложений Конфигурация приложения – это все, что может меняться, между развертываниями
приложений.
Например,
Идентификаторы подключения к ресурсам типа базы данных, кэш-памяти и другим сторонним службам

Слайд 21

Pull модель конфигурирования

В момент старта приложение читает свой конфиг из внешнего сервиса.

Pull модель конфигурирования В момент старта приложение читает свой конфиг из внешнего

Конфиг может хранится в:
SQL
NoSQL
Git
Vault
И т.д

Слайд 22

Конфигурирование приложений

Конфигурация должна быть отделена от кода
Кодовая база приложения может быть

Конфигурирование приложений Конфигурация должна быть отделена от кода Кодовая база приложения может
в любой момент открыта в свободный доступ без компрометации каких-либо приватных данных

https://12factor.net/ru/config

Слайд 23

Push модель конфигурирования

После деплоя оркестратор передает приложению конфиг
Конфиг может передаваться через
Переменные окружения

Push модель конфигурирования После деплоя оркестратор передает приложению конфиг Конфиг может передаваться
(ENV)
Конфигурационный файл
Параметры командной строки

Слайд 24

Health check

Чтобы проверять, умер под или нет заводится специальный метод (endpoint), по

Health check Чтобы проверять, умер под или нет заводится специальный метод (endpoint),
которому проверяется общая живость приложения.
Health probe – приложение живо
Readiness probe – приложение готов принимать трафик
За жизнью под смотрит система мониторинга и алертинга, service registry, оркестратор, чтобы снимать трафик с больных под

Слайд 25

Логирование

Отправить логи из приложения
Принять для доставки
Доставить для анализа и хранения
Проаналазировать
Хранить

Логирование Отправить логи из приложения Принять для доставки Доставить для анализа и хранения Проаналазировать Хранить

Слайд 26

ELK

ELK
Elastic Search
Logstash
Kibana

ELK ELK Elastic Search Logstash Kibana

Слайд 27

Мониторинг и алертинг

Как собирать метрики
cpu/memory
Продуктовые метрики
Технические

Мониторинг и алертинг Как собирать метрики cpu/memory Продуктовые метрики Технические

Слайд 28

Pull vs Push модель сбора метрик

Push модель: приложение само ходит в сервис

Pull vs Push модель сбора метрик Push модель: приложение само ходит в
метрик и пушит туда все метрики
Pull модель: приложение выставляет урл (обычно /metrics), в котором все метрики, а сервис метрик забирает, и потом отображает.

Слайд 29

Prometheus

Прометеус ходит по сервисам, забирает агрегированную статистику и складывает в базу.

Prometheus Прометеус ходит по сервисам, забирает агрегированную статистику и складывает в базу.

Слайд 30

Prometheus

Прометеус может мониторить инфраструктуру с помощью экспортеров

Prometheus Прометеус может мониторить инфраструктуру с помощью экспортеров

Слайд 31

Prometheus + grafana

Grafana – это интерфейс для визуацилизации графиков, метриков, в целом

Prometheus + grafana Grafana – это интерфейс для визуацилизации графиков, метриков, в целом инструмент построения дашбордов
инструмент построения дашбордов

Слайд 32

Distrubuted tracing

Распределенная транзакция – это путь прохождения запроса по разным сервисам.
При

Distrubuted tracing Распределенная транзакция – это путь прохождения запроса по разным сервисам.
трассировке, к каждому запросу добавляются метаданные о контексте этого запроса и эти метаданные сохраняются и передаются между компонентами, участвующими в обработке запроса
В различных точках трассировки происходит сбор и запись событий вместе с дополнительной информацией (URL-запроса, идентификатор клиента, код запроса к БД)
Информация о событиях сохраняется со всеми метаданными и контекстом и явным указанием причинно-следственных связей между событиями

Слайд 33

Для чего используется tracing?

Упрощенное взаимодействие между командами - при регрессах можно скинуть

Для чего используется tracing? Упрощенное взаимодействие между командами - при регрессах можно
TraceID, связать систему трэкинга ошибок с трейсами
Оценка критического пути выполнения запроса и влияния разных факторов на время выполнения (сетевые проблемы, медленные запросы к БД)
Графы зависимостей - с кем взаимодействует мой сервис, кого затронут изменения в нем?

Слайд 34

Основая терминология

Span - запись об одной логической операции по обработке запроса (тайминги

Основая терминология Span - запись об одной логической операции по обработке запроса
и метаданные).
Каждый спан обязательно содержит ссылку на Trace-ID
Каждый спан содержит свой уникальный идентификатор Span-ID
Trace - коллекция связанных записей (Spans), описывающая обработку одного запроса (end-to-end)
каждый трейс имеет свой уникальный идентификатор - Trace ID

Слайд 35

Основая терминология

Root Span - это спан, у которого нет ссылки на родительский

Основая терминология Root Span - это спан, у которого нет ссылки на
спан (только Trace ID), он показывает общую длительность выполнения запроса

Слайд 36

Какие есть проблемы

Не видны проблемы общей инфраструктуры (состояние очередей, IOPS и т.п.),

Какие есть проблемы Не видны проблемы общей инфраструктуры (состояние очередей, IOPS и
"серые ошибки" в облаках
В трассировках нет "низкоуровневых" данных - состояние ОС, ядра и т.п., то что добывается strace, ss и прочим
Для протоколов, где нет метаданных (Kafka), надо писать свои обвязки и прокидывать
Надо выбирать нагрузку и частоту сэмплирования

Слайд 37

Инструментарий distibuted-tracing

2 основных протокола:
Opentracing (X-OT-* заголовки)
B3 (Zipkin) (X-B3-* заголовки)
Клиентские библиотеки и сервера

Инструментарий distibuted-tracing 2 основных протокола: Opentracing (X-OT-* заголовки) B3 (Zipkin) (X-B3-* заголовки)
для хранения и визуализации трассировок
OpenTelemetry
Jaeger, OpenZipkin, LightStep
APM
Elastic APM
Сами трейсы и индексы хранятся обычно в ElasticSearch

Слайд 38

Elastic APM

Elastic APM – средства для анализа производительности приложений с tracing-ом и

Elastic APM Elastic APM – средства для анализа производительности приложений с tracing-ом и метриками
метриками

Слайд 39

Microservice chassis

Microservice chassis – это паттерн, при котором есть фреймворк, помогающий встраивать

Microservice chassis Microservice chassis – это паттерн, при котором есть фреймворк, помогающий
сервисы в микросервисную архитектуру
Примеры: SpringBoot/SpringCloud, Go-kit

Слайд 40

Service mesh

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

Service mesh Почему бы не вынести часть логики из кода приложения в отдельный «слой» взаимодействия сервисов?
«слой» взаимодействия сервисов?

Слайд 41

Service mesh

Давайте с каждым подом поставим  side-прокси сервис, в котором будет вся

Service mesh Давайте с каждым подом поставим side-прокси сервис, в котором будет
логика по работе с другими сервисами:
Проверка прав доступа
Отправка метрик и телеметрии
Distributed tracing
Circuit breaker
И т.д.

Слайд 42

Service mesh

Неважно, что делают сервисы, но трафик между ними является идеальной точкой

Service mesh Неважно, что делают сервисы, но трафик между ними является идеальной
для добавления новой функциональности.
Service mesh выглядит так: вы разворачиваете кучу прокси, которые «что-то делают» с внутренним, межсервисным трафиком, и используете control plane для мониторинга и управления ими.

Слайд 43

Service mesh на примере istio

Service mesh на примере istio

Слайд 44

Балансировка запросов

Балансировка запросов

Слайд 45

Граф сервисов

Граф сервисов

Слайд 46

Распределенная трассировка

Распределенная трассировка

Слайд 47

Service mesh на примере istio

Service mesh на примере istio

Слайд 48

Service mesh плюсы и минусы

Минусы:
Увеличение latency
Дополнительные ресурсы (mem, cpu) на работу прокси
Сложность

Service mesh плюсы и минусы Минусы: Увеличение latency Дополнительные ресурсы (mem, cpu)
поддержки
Плюсы:
Возможность централизованно и без внесения правок в код приложений и независимо от их стека добавлять функциональность.

Слайд 49

Опрос

https://otus.ru/polls/6408/

Опрос https://otus.ru/polls/6408/
Имя файла: Инфраструктурные-паттерны-микросервисной-архитектуры.pptx
Количество просмотров: 33
Количество скачиваний: 0