Microservice Patterns

Проработать

  1. Saga vs Two face commit
  2. A pattern language for microservices
  3. Архітектурні Патерни у Сучасних Мікросервісах - Java: Про ІТ під каву - #36
  4. Saga паттерн и распределенные транзакции
  5. Собеседование на Сеньора | Проектирование архитектуры систем | Systems Design
  6. Как подготовиться и пройти System Design Interview. Александр Поломодов
  7. Service Discovery в распределенных системах на примере Consul. Александр Сигачев
  8. Знакомимся с Event Sourcing. Часть 1
  9. Что спрашивают о микросервисах в крупных компаниях | Senior Developer | Jetbulb
  10. Стратегии обработки ошибок: Circuit Breaker pattern
  11. Circuit Breaker паттерн
  12. Шпаргалка по миграции монолита на микросервисы
  13. Database per Microservice паттерн
  14. Top 7 Ways to 10x Your API Performance

Основные разделы

Решение проблем

В каком-либо блоке приложения произошла ошибка(или БД) - один из сервисов отвалился.

Поддержка транзакций между микросервисами

Симметричное распределение нагрузки и сложности бизнес-логики

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

Saga

Saga - если мы используем паттерн "Database per Microservice" нам нужно обеспечить согласованность данных между сервисами.

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

Способы координации саг:

Хореография(Choreography)

Хореография(Choreography) - каждая транзакция публикует события, которые запускают транзакции в других сервисах.

Будут выполнены следующие шаги:

  1. Order Service (Сервис Заказа) создает Order (Заказ) в статусе pending (в ожидании) и публикует событие OrderCreated (ЗаказСоздан).
  2. Customer Service (Сервис Клиента) получает событие и пытается зарезервировать кредит для заказа. После чего публикует одно из двух событий: CreditReserved (КредитЗарезервирован) или CreditLimitExceeded (КредитныйЛимитПревышен).
  3. Order Service (Сервис Заказа) получает событие и изменяет состояние заказа в approved (подтвержден) или cancelled (отменен).

Оркестровка (Orchestration)

Оркестровка(Orchestration) - оркестратор говорит участникам, какие транзакции должны быть запущены.

Будут выполнены следующие шаги:

  1. Order Service (Сервис Заказа) создает Order (Заказ) в статусе pending (в ожидании) и создает CreateOrderSaga (СагаСозданияЗаказа).
  2. CreateOrderSaga (СагаСозданияЗаказа) отправляет команду ReserveCredit (ЗарезервироватьКредит) в Customer Service (Сервис Клиента)
  3. Customer Service (Сервис Клиента) пытается зарезервировать кредит для заказа и отправляет назад ответ
  4. CreateOrderSaga (СагаСозданияЗаказа) получает ответ и отправляет ApproveOrder (ПодтвердитьЗаказ) or RejectOrder (ОтменитьЗаказ) команду в Order Service (Сервис Заказа)
  5. Order Service (Сервис Заказа) изменяет состояние заказа в approved (подтвержден) или cancelled (отменен)

Command and Query Responsibility Segregation(CQRS)

CQRS — это стиль архитектуры, в котором операции чтения отделены от операций записи.

Решает проблему - не симметричное распределение нагрузки и сложности бизнес-логики на read(Query) и write(Command) - подсистемы Большинство бизнес-правил и сложных проверок находится во write — подсистеме. При этом читают данные зачастую в разы чаще, чем изменяют.

Недостатки

Event sourcing

Event sourcing - архитектурный шаблон. Все изменения, вносимые в состояние приложения, сохраняются в той последовательности в которой они происходили.

Помогает эффективно распределять данные между микросервисами.

Преимущества:

Недостатки:

Database per Microservice

Database per Microservice - микросервисы не имеют доступа к базе соседних сервисов и обращаются между собой средством REST, или через message broker.

Преимущество

Недостатки

Circuit Breaker

Interview

Узнать все требования.

Количество юзеров.

Функциональные требования.