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

Например, вот повествование создания заказа:
- Сервис
Orderсоздает заказ с состояниемAPPROVAL_PENDING. - Сервис
Consumerпроверяет, может ли заказчик размещать заказы. - Сервис
Kitchenпроверяет детали заказа и создает заявку с состояниемCREATE_PENDING. - Сервис
Accountingавторизует банковскую карту заказчика. - Сервис
Kitchenменяет состояние заявки наAWAITING_ACCEPTANCE. - Сервис
Orderменяет состояние заказа наAPPROVED.
Если транзакция признается неуспешной, происходит серия компенсирующих локальных транзакций, выполняемых в обратном порядке и откатывающих всю серию. Если, примеру, карта заказчика не авторизуется (п.4 примера выше), то должны произойти компенсирующие транзакции на этапе 3, затем 1. Этап 2 выполняет только чтение данных, поэтому ему компенсирующая транзакция не нужна.
Есть два способа координации повествования:
- Хореография — каждая локальная транзакция публикует события, стартующие локальные транзакции в других сервисах.
- Оркестрация — выполнением транзакций управляет специальная сущность — оркестратор.
Для борьбы с недостаточной изолированностью нужно иметь в виду следующую классификацию этапов повествования.
Ссылки¶
https://microservices.io/patterns/data/saga.html
Дата создания : 16 июля 2022 г.