1. 2PC (Two-Phase Commit)

  1. 코디네이터와 여러 데이터베이스 간의 합의를 통해 트랜잭션 커밋/롤백을 결정하는 방법이다.
    1. phase1 : 모든 데이터베이스가 커밋이 가능한 상태 또는 불가능한 상태를 코디네이터에게 전달
    2. phase2 : 코디네이터가 커밋 또는 롤백을 수행한다.
  1. 장점
    1. 분산 환경에서의 데이터 정합성 및 원자성을 보장할 수 있다.
  1. 단점
    1. 미지원 DBMS - 미지원 DBMS 인 경우, 사용이 불가하다.
    2. 이종 데이터베이스 호환성 - 이종(heterogeneous) 데이터베이스 환경에서 사용에 어려움이 있음
    3. 코디네이터에 의존적 - 장애 상황에 따른 각 데이터베이스의 커밋/롤백 여부를 스스로 결정할 수 없음
    4. 트랜잭션 블로킹(blocking) - 다른 데이터베이스 트랜잭션이 완료될 때까지 대기해야 하는 경우가 발생할 있음

ref : designing data-intensive applications

 

 

2. SAGA Pattern

(1) SAGA Pattern??

1. 연속된 개별 서비스의 로컬 트랜잭션을 구성하고 트리거를 통해 전체 비즈니스 트랜잭션을 구성한다.

예시) 1번째 트랜잭션 완료 + 2번째 트랜잭션 트리거 → 2번째 트랜잭션 완료 + 3번째 트랜잭션 트리거 → 3번째 트랜잭션 완료

 

2. 개별 서비스가 실패하면 보상 트랜잭션(compensating transaction) 을 발생시킨다.

예시) 3번 트랜잭션 실패 → 2번째 트랜잭션 상쇄 로직 실행  → 1번째 트랜잭션 상쇄 로직 실행

 

ref : https://notes.paulswail.com/public/Distributed+sagas

 

 

(2) DBMS 지원 트랜잭션과 SAGA 패턴의 차이점

 

3. SAGA Pattern 종류

(1) SAGA Pattern : Choreography-Based Saga

  1. 각 서비스가 이벤트를 통해 서로 통신하며 트랜잭션을 관리하는 방식
  2. 중앙 조정자(Coordinator) 가 존재하지 않으며, 이벤트가 발생할 때 다음 서비스가 이벤트를 수신하여 작업을 처리

ref : https://blog.bytebytego.com/p/the-saga-pattern

  1. 동작 과정
    1. 서비스 A가 트랜잭션을 실행하고 완료 후 이벤트를 발행한다.
    2. 서비스 B가 이벤트를 수신하고 자신의 트랜잭션을 실행한다.
    3. 이벤트 흐름이 계속 전파되며, 모든 서비스가 자신의 트랜잭션을 처리한다.
    4. 어느 한 서비스가 실패하면 이전 서비스들이 보상 트랜잭션을 실행한다.
  2. 장점
    1. 중앙 조정자 없이 동작하여 시스템의 확장성이 뛰어남.
    2. 비동기 메시징 기반으로 성능 향상.
    3. 마이크로서비스 독립성이 유지됨.
  3. 단점
    1. 이벤트 흐름 추적이 어려워 디버깅 모니터링이 복잡함.
    2. 모든 서비스가 이벤트 처리 로직을 구현해야 .

 

(2) SAGA Pattern : Orchestration-Based Saga

  1. 중앙 조정자(Coordinator)가 전체 트랜잭션을 관리하고, 각 서비스에 명령을 전달하며 트랜잭션을 처리합니다.
  2. 조정자는 트랜잭션의 성공 또는 실패를 결정하고 보상 트랜잭션을 요청합니다.

ref : https://blog.bytebytego.com/p/the-saga-pattern

  1. 동작 과정
    1. Coordinator 가 트랜잭션의 시작과 흐름을 제어한다.
    2. 각 서비스는 조정자의 명령에 따라 트랜잭션을 실행하고 결과를 응답한다.
    3. 서비스 중 하나가 실패하면, 조정자가 보상 트랜잭션을 실행한다.
  2. 장점
    1. 중앙 집중 관리로 트랜잭션 흐름이 명확하며, 디버깅 및 모니터링이 용이.
    2. 오류 처리 및 보상 작업이 더 쉬움.
  3. 단점
    1. Coordinator 단일 장애 지점(Single Point of Failure)  있음.
    2. 중앙 집중형으로 인해 확장성이 제한될 있음.

 

4. Reference