Перейти к содержимому

Паттерн Saga (Сага) для построение распределённой архитектуры

Введение и определени.

Паттерн Saga (Сага) — это архитектурный шаблон проектирования, который используется для управления распределенными транзакциями и обеспечения консистентности данных в микросервисной архитектуре. Вместо одной глобальной транзакции (которая блокирует базы данных), Saga разбивает бизнес-процесс на цепочку отдельных локальных транзакций, где каждый микросервис обновляет свою собственную базу данных независимо от других.

Пример:

Успешный путь:   [Шаг 1: Оплата] ---> [Шаг 2: Склад] ---> [Шаг 3: Доставка]
Путь сбоя:       [Шаг 1: Оплата] ---> [Шаг 2: Склад (Ошибка!)]
                      |
              (Компенсация: Возврат денег) <--- [Отмена брони товара]

Два способа реализации Saga

Существует два основных подхода к координации шагов в паттерне Saga:

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

Микросервисы общаются друг с другом напрямую через события (Event-Driven), без единого центра управления.

  • Принцип: Сервис А выполняет действие и публикует событие. Сервис Б слушает это событие, выполняет свое действие и публикует новое событие.
  • Плюсы: Нет единой точки отказа; просто добавить новые сервисы.
  • Минусы: Сложно отслеживать общую логику процесса; риск запутаться в связях (спагетти-архитектура).
  1. Оркестрация (Orchestration)

Существует центральный элемент — Оркестратор (Saga Orchestrator), который управляет всем процессом.

  • Принцип: Оркестратор отправляет команды сервисам, получает от них ответы и решает, какой шаг выполнять следующим или когда запускать компенсацию.
  • Плюсы: Вся бизнес-логика процесса собрана в одном месте; легко тестировать и контролировать состояние.
  • Минусы: Оркестратор может стать единой точкой отказа и усложнить архитектуру.

Сравнение подходов

ХарактеристикаХореография (Choreography)Оркестрация
(Orchestration)
УправлениеДецентрализованное (на событиях)Централизованное (команды)
СложностьВысокая при росте системыНиже, логика в одном месте
ЗависимостиСервисы знают о событиях друг другаСервисы изолированы, знает только оркестратор
Подходит дляПодходит для Простых цепочек (2–3 шага)Сложных бизнес-процессов (4+ шагов)

Плюсы и минусы паттерна Saga

  • Преимущества:
    • Высокая производительность (нет долгих блокировок БД).
    • Поддержка распределенных систем и разных типов БД (SQL, NoSQL).
    • Высокая отказоустойчивость благодаря компенсациям.
  • Недостатки:
    • Сложность отладки и мониторинга.Отсутствие изоляции данных (другие транзакции могут видеть промежуточные «грязные» данные).
    • Необходимость писать компенсирующий код для каждого шага.
Добавить комментарий