Microservices Flashcards

1
Q

Что такое микросервис?

A
  • Исполняется в собственном контексте
  • Имеет собственный публичный API
  • Реализует определенную бизнес-логику.
  • одна команда разработчиков владеет 1 или несколькими МС

https://mcsjournal.ru/blog/26-osnovnyh-patternov-mikroservisnoj-razrabotki

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Шаблон «Разбиение по бизнес-возможностям» (Decompose By Business Capability)

A

Паттерн декомпозиции на микросервисы

Предполагает определение бизнес-возможностей приложения и создание по одному микросервису на каждую из них. Бизнес-возможности представляют собой функции, которые будут доступны пользователям при работе с приложением.
- Управление созданием заказов -> Order Creation Service
- Управление доставкой заказов -> Order Delivery Service
- Управление платежами -> Payment Service
- Управление клиентами -> Client Service
- …

При разбиении по бизнес-возможностям могут появиться так называемые «божественные классы» (God Classes) — сущности, которые будут общими для нескольких микросервисов. Как правило, их очень сложно разделить.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Шаблон «Разбиение по поддоменам» (Decompose By Subdomain)

A

Паттерн декомпозиции на микросервисы

Чтобы избежать появления God Classes, можно использовать шаблон разбиение по поддоменам. Он основан на концепциях предметно-ориентированного проектирования (Domain-Driven Design, DDD).

DDD разбивает всю модель предметной области (домен) на поддомены. У каждого поддомена своя модель данных, область действия которой принято называть ограниченным контекстом (Bounded Context). Каждый микросервис будет разрабатываться внутри этого ограниченного контекста. Основная задача при использовании DDD-подхода — подобрать поддомены и границы между ними так, чтобы они были максимально независимы друг от друга.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Шаблон «Душитель» (Strangler)

A

Паттерны рефакторинга для перехода на микросервисы

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q
  1. Шаблон «Уровень защиты от повреждений» (Anti-Corruption Layer)
A

Паттерны рефакторинга для перехода на микросервисы

Он предназначен для изолирования различных подсистем путем размещения между ними дополнительного уровня, который может быть реализован как компонент приложения или независимая служба. Этот уровень связывает две подсистемы, позволяя им оставаться максимально независимыми друг от друга. Он содержит всю логику, необходимую для передачи данных в обе стороны: при взаимодействии с каждой из подсистем используется именно ее модель данных.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q
  1. Шаблон «База данных на сервис» (Database Per Service)
A

Шаблон Управления Данными

Основная рекомендация при переходе на микросервисы — предоставить каждому сервису собственное хранилище данных, чтобы не было сильных зависимостей на уровне данных. При этом имеется в виду именно логическое разделение данных, то есть микросервисы могут совместно использовать одну и ту же физическую базу данных, но в ней они должны взаимодействовать с отдельной схемой, коллекцией или таблицей.

Основанный на этих принципах паттерн Database Per Service повышает автономность микросервисов и уменьшает связь между командами, разрабатывающими отдельные сервисы.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Шаблон «API-композиция» (API Composition)

A

Шаблон Управления Данными

Этот шаблон является одним из возможных вариантов получения данных из нескольких сервисов после применения к ним паттерна Database Per Service. Он предлагает создать отдельное API, которое будет вызывать необходимые сервисы, владеющие данными, и выполнять соединение полученных от них результатов в памяти. Паттерн можно рассматривать как вариант использования другого шаблона — API Gateway, о котором мы поговорим ниже.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Шаблон «Разделение команд и запросов» (Command Query Responsibility Segregation, CQRS)

A

Шаблон Управления Данными

Этот паттерн предлагает отделить изменение данных (Command) от чтения данных (Query). Шаблон CQRS имеет две формы: простую и расширенную.

В простой форме для чтения и записи используются отдельные модели ORM (Object-Relational Mapping), но общее хранилище данных.

В расширенной форме используются разные хранилища данных, оптимизированные для записи и чтения данных. Данные копируются из хранилища для записи в хранилище для чтения асинхронно. В результате хранилище для чтения отстает от хранилища для записи, но в конечном итоге является согласованным. Расширенный CQRS часто используется совместно с паттерном Event Sourcing

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Шаблон «Поиск событий» (Event Sourcing)

A

Шаблон Управления Данными

В традиционных базах данных объект с текущим состоянием сохраняется напрямую. При использовании шаблона Event Sourcing вместо объектов сохраняются события, изменяющие их состояния. Итоговое состояние объекта можно получить путем повторной обработки серии событий, пришедших за определенное время. Различные службы могут воспроизводить события из хранилища событий, чтобы вычислить соответствующее состояние своих хранилищ данных. Для реализации хранилища событий обычно применяется шаблон CQRS.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Шаблон «Сага» (Saga)

A

Шаблон Управления Данными

Этот паттерн предназначен для управления распределенными транзакциями в микросервисной архитектуре, где применение традиционного протокола двухфазной фиксации транзакций (Two-phase commit protocol, 2PC) становится трудноосуществимым.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q
  1. Шаблон «API-шлюз» (API Gateway)
A

Паттерн коммуникации микросервисов

Обеспечивает единую точку входа для клиента. Общается с клиентом по REST , но с сервисами может общаться любым проотоколом.

  • Gateway Routing. Шлюз используется как обратный Proxy, перенаправляющий запросы клиента на соответствующий сервис.
  • Gateway Aggregation. Шлюз используется для разветвления клиентского запроса на несколько микросервисов и возвращения агрегированных ответов клиенту.
  • Gateway Offloading. Шлюз решает сквозные задачи, которые являются общими для сервисов: аутентификация, авторизация, SSL, ведение журналов и так далее.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

2. Шаблон «Бэкенды для фронтендов» (Backends for Frontends, BFF)

A

Паттерн коммуникации микросервисов

Расширяет шаблон API-gateway

Предполагает свой шлюз на каждый тип устройства (desktop / ois / android / …)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Зачем нужны паттерны обнаружения сервисов в микросервисной архитектуре?

A

Эта группа шаблонов описывает методы, которые могут использовать клиентские приложения для определения местонахождения нужных им сервисов. Это особенно важно в микросервисных приложениях, так как они работают в виртуализированных и контейнерных средах, где количество экземпляров сервисов и их расположение изменяются динамически.

Ключевым компонентом обнаружения микросервисов выступает реестр сервисов (Service Registry) — база данных с информа­цией о расположении сервисных экземпляров. Когда экземпляры запускаются и останавливаются, информация в реестре обновляется. Но взаимодействовать с реестром сервисов можно двумя путями, которые и легли в основу описанных ниже шаблонов.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Шаблон «Обнаружение сервисов на стороне клиента» (Client-Side Service Discovery)

A

Паттерны обнаружения сервисов

В этом случае сервисы и их клиенты напрямую взаимодействуют с реестром.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Шаблон «Обнаружение сервисов на стороне сервера» (Server-Side Service Discovery)

A

Паттерны обнаружения сервисов

В этом случае за регистрацию, обнаружение сервисов и маршрутизацию запросов отвечает инфраструктура развертывания.

ПРЕДПОЧТИТЕЛЕН.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

1. Шаблон «Автоматический выключатель» (Circuit Breaker)

A

Паттерн повышения отказоустойчивости

Микросервис будет запрашивать другой микросервис через Proxy-сервер. Он подсчитывает количество недавних сбоев и на основе него определяет, разрешать ли выполнение последующих вызовов или немедленно возвращать исключение.

Proxy-сервер может находиться в трех состояниях:

Closed. Идет передача запросов между сервисами и подсчет количества сбоев. Если число сбоев за заданный интервал времени превышает пороговое значение, выключатель Proxy-сервера переводится в состояние Open.
Open. Запросы от исходного сервиса немедленно возвращаются с ошибкой. По истечении заданного тайм-аута выключатель переводится в состояние Half-Open.
Half-Open. Выключатель пропускает ограниченное количество запросов от исходного сервиса и подсчитывает число успешных запросов. Если необходимое количество достигнуто, выключатель переходит в состояние Closed, если нет — возвращается в статус Open.

17
Q

2. Шаблон «Переборка» (Bulkhead)

A

Паттерн повышения отказоустойчивости

Шаблон позволяет разделить ресурсы, чтобы гарантировать, что ресурсы, используемые для вызова одного сервиса, не влияют на ресурсы, используемые для вызова другого сервиса. Пример — использование отдельного пула соединений для каждого из нижестоящих сервисов.

Еще один вариант использования шаблона — назначение каждому клиенту сервиса отдельного экземпляра сервиса. В таком случае, если один из клиентов сделает слишком много запросов, перегрузив свой экземпляр, другие клиенты смогут продолжить работу.

18
Q

Шаблон «Агрегация логов» (Log Aggregation)

A

Паттерны мониторинга микросервисов

Паттерн Log Aggregation предлагает использовать централизованную службу ведения логов, которая будет собирать логи от каждого экземпляра сервиса. Это предоставит пользователям единую точку для поиска, анализа логов и настройки предупреждений, которые будут запускаться при появлении в них определенных сообщений.

19
Q

Шаблон «Распределенная трассировка» (Distributed Tracing)

A

Паттерны мониторинга микросервисов

В микросервисной архитектуре для выполнения клиентских запросов может потребоваться работа нескольких взаимосвязанных микросервисов. Каждый сервис обрабатывает запрос путем выполнения одной или нескольких операций, включая обращение к базе данных, публикацию сообщений и так далее. С увеличением числа сервисов становится все сложнее отследить место возникновения ошибок.

Паттерн Distributed Tracing разработан для решения этой проблемы. Он предлагает назначать каждому внешнему запросу уникальный идентификатор (TraceId), который будет передаваться всем сервисам, участвующим в обработке запроса, и фиксироваться в журналах. Это позволит разработчикам видеть, как обрабатывается отдельный запрос, путем поиска в агрегированных журналах его внешнего идентификатора.

20
Q

Шаблон «Проверки здоровья» (Health Check)

A

Паттерны мониторинга микросервисов

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

Для решения этой задачи предназначен паттерн Health Check. Он предлагает определить для каждого сервиса конечную точку, которую можно использовать для проверки работоспособности, например /health. Этот API должен проверять статус хоста, подключение к другим сервисам, инфраструктуре и любую иную бизнес-логику. Клиент — служба мониторинга, реестр служб или балансировщик нагрузки — будет периодически обращаться к конечной точке для проверки работоспособности экземпляра сервиса.