Что такое saga паттерн?

Middle+
535 просмотров
AFK Offer AI

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

1. Order Service: создать заказ
   compensate: отменить заказ
2. Payment Service: списать деньги
   compensate: вернуть деньги
3. Inventory Service: зарезервировать товар
   compensate: снять резерв

Если шаг 3 провалился — выполняются компенсации в обратном порядке: вернуть деньги → отменить заказ.

Два подхода: choreography (каждый сервис слушает события и решает сам) и orchestration (есть координатор, который управляет шагами). Orchestration проще дебажить и понимать.

В Go оркестратор часто реализуют как state machine с переходами. Ключевые требования: компенсации должны быть идемпотентными, каждый шаг записывается в лог для восстановления. Saga не даёт ACID-изоляцию — между шагами данные видны другим.

Следующий вопрос

Как спроектировать notification service?