Найти тему
438 подписчиков

Паттерн Сага


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

Представим, что пользователь делает заказ в интернет-магазине. Заказ затрагивает сразу три сервиса:
1. складской сервис, где товар списывается
2. сервис организации курьерской доставки, куда товар передаётся
3. сервис платежей, в котором списываются деньги за заказ

Заказ не вызывает проблем, пока всё идёт штатно. А что делать, если оплата не прошла? Ведь со склада уже списалась единица товара и назначена доставка.

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

Отличная иллюстрация такого упрощения — статья ребят из Озон Доводим распределённые действия до конца с использованием простейшего паттерна Saga. В начале даются минимально достаточные теоретические выкладки по Саге, а потом — детали реализации на своём проекте. Опираясь на анализ своей предметной области, автору удалось опустить избыточные элементы паттерна. Ранее мы предлагали свой способ комплексного анализа предметной области для новых проектов.

Отдельного внимания заслуживает описание проблем, с которыми команда столкнулась в процессе реализации, а также способы их решения.
1 минута