연속된 개별 로컬 트랜잭션이 이어져, 전체 트랜잭션을 구성한다.롤백하는 과정으로 이루어진다.보상 트랜잭션은 어떠한 서비스에서 트랜잭션 처리에 실패할 경우 이전의 작업을 롤백하여 전체 트랜잭션의 정합성을 보장한다.보상 트랜잭션 을 발생시키는 주체가 애플리케이션이기에 데이터 일관성을 관리하는 주체가 DBMS가 아니라는 것이다.결과적 정합성을 보장하게 된다.
Pub/Sub하는 방식이다.Message Queue를 사용단일 장애 지점이 없다.순환 의존성이 발생할 위험이 있다.
Saga Orchestrator가 SAGA에 참여하고 있는 서비스들에게 어떤 트랜잭션을 실행시켜야하는지 알려주는 방식이다.Orchestrator에게 전달하고, 마지막 트랜잭션이 끝나면 Orchestrator를 종료해서 전체 트랜잭션 처리를 종료한다.Orchestrator가 하기에, 중앙 집중화가 이루어진다는 특징이 존재한다.Orchestrator와만 상호작용 하므로 서비스 간 결합도가 적다.Orchestrator로 인한 단일 지점장애보상 작업을 수행하여 롤백한다.🚧 그렇다면 SAGA 패턴을 통한 트랜잭션은 항상 일관성을 보장할까?
각 트랜잭션에서, 이벤트를 발행시키기 전에 데이터베이스에만 트랜잭션을 반영하고 서비스가 오류로 종료된다면 전체적인 트랜잭션 일관성이 깨질 것 같다는 생각이든다.
즉, 메시지 브로커와 데이터베이스는 일관성이 보장이 안되는 문제가 생길 수 있다.
이는 후에 포스팅할 Transactional Outbox 패턴으로 해결 가능하다.