Перейти к содержанию

Шаблон “Повествование”

Он же “Сага” (Saga). Следует из шаблона БД для сервиса.
Обеспечивает согласованность данных между сервисами, используя последовательность локальных транзакций, которые координируются с помощью асинхронных сообщений.
Системная операция инициирует первый этап повествования. Завершение одной локальной транзакции приводит к выполнению следующей.
Pasted image 20210919112731.png
Например, вот повествование создания заказа:

  1. Сервис Order создает заказ с состоянием APPROVAL_PENDING.
  2. Сервис Consumer проверяет, может ли заказчик размещать заказы.
  3. Сервис Kitchen проверяет детали заказа и создает заявку с состоянием CREATE_PENDING.
  4. Сервис Accounting авторизует банковскую карту заказчика.
  5. Сервис Kitchen меняет состояние заявки на AWAITING_ACCEPTANCE.
  6. Сервис Order меняет состояние заказа на APPROVED.

Если транзакция признается неуспешной, происходит серия компенсирующих локальных транзакций, выполняемых в обратном порядке и откатывающих всю серию. Если, примеру, карта заказчика не авторизуется (п.4 примера выше), то должны произойти компенсирующие транзакции на этапе 3, затем 1. Этап 2 выполняет только чтение данных, поэтому ему компенсирующая транзакция не нужна.

Есть два способа координации повествования:

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

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

Ссылки

https://microservices.io/patterns/data/saga.html


Последнее обновление : 24 июня 2023 г.
Дата создания : 16 июля 2022 г.

Комментарии

Комментарии