База знаний Антона Сидорова
База знаний по аналитике, ИТ архитектуре, API. Документирование. Тесты инструментов.
Project maintained by daemon110282
Hosted on GitHub Pages — Theme by mattgraham
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 свободна)
Паттерны
Технологии