Anton Sidorov homepage

Bookmark this to keep an eye on my project updates!

Follow me on GitHub

SAGA

Зачем

Паттерн для Распределенных транзаций

  • последовательность транзакций, которые обновляют каждую службу
  • и публикуют сообщение или событие для активации следующего шага транзакции
  • Если шаг завершается ошибкой, SAGA выполняет компенсирующие действия транзакции, которые противодействуют предыдущим локальным транзакциям
  • Паттерн обеспечения согласованности(консистентности) данных при распределенных (бизнес) транзакциях, решает проблемы производительности Long Lived Trasactioin (LLT).
  • Решения по обеспечению надёжности (констистентности) транзакций, стали востребованы в микросервисной архитектуре MSA
  • SAGA состоит из действий (actions) направленных на обеспечение консистентности транзакций и является при этом неатомарной единицей (unit) консистентности
  • При реализации SAGA особое внимание нужно уделять уровням изоляции

Транзакция (договор) - механизм сохранения консистентности данных при нескольких логически связанных последовательных изменениях состояния. Должна быть выполнена только полностью. Транзакции должны быть атомарными, согласованными, изолированными и устойчивыми (ACID).

TODO

Плюсы-минусы

Плюсы:

  • децентрализованный подход, не использует центральный контроллер
    • Чтобы отказаться от Two phase commit в распределенной среде - плохо масштабируемый алгоритм

Минусы:

  • Сложность
    • Распределенная транзакция - зло, необходимо избегать разделяя правильно на ограниченные контексты DDD
  • не полная поддержка ACID принципов транзакции: Isolation не обеспечивается. Локальные транзакции комитятся и другие транзакции уже видят их, но в итоге SAGA может быть отменена с компенсаций
    • решается False Negative (Вася забронировал Audi, а Петя уже не смог и купил Ford, а затем сбой у Васи и Audi свободна)

Паттерны

  • машины состояний state machine
  • наблюдателя (Observer) для логирования
  • Реализация при помощи Хореографии или Оркестрации
  • Для повышения надежности при асинхронном обмене событиями через Message Broker используется Transactional Outbox

Технологии