MSA 트랜잭션 처리를 위한 Saga 패턴 적용하기

Saga 패턴

Saga Pattern 은 분산 트랜잭션 환경에서 메시지 또는 이벤트를 주고 받으며 서비스 간의 데이터 일관성을 지키기 위한 패턴이다.

Choreography(코레오그래피) Saga 패턴과 Orchestration(오케스트레이션) Saga 패턴이 있다.

2PC(two-phaze commit) 같은 DB 여야 하고, DB가 분산 트랜잭션을 지원해야 한다. (NoSQL 은 지원하지 않음)

  • Choreography(코레오그래피) Saga 패턴

    • 도메인 서비스 간 이벤트를 순차적으로 전달하면서 트랜잭션을 처리하는 방식.

    • 장점:

      • 도메인 서비스 개수가 작을 때는 손 쉽게 구현 가능하다.
    • 단점:

      • 도메인 서비스 개수가 늘어나면 보상 트랜잭션 구조가 복잡해져서 관리가 쉽지 않다.
      • 명령 추적이 어렵기 때문에 워크플로 파악이 어려움
      • Saga 참가자 간에 순환 종속성 발생 가능
      • 트랜잭션을 시뮬레이션하기 위해 모든 서비스를 실행해야하기 때문에 통합테스트와 디버깅이 어렵다.

      image-20230502133137214

      image-20230502133112919

  • Orchestration(오케스트레이션) Saga 패턴

    • 트랜잭션을 처리하는 중앙 트랜잭션 서버를 통해 처리하는 방식.
    • 장점: 트랜잭션을 처리하기 위한 인스턴스 서버에서 모든 트랜잭션 및 보상 트랜잭션을 처리하므로 구조가 간단해진다.
    • 단점: 트랜잭션을 처리하기 위한 별도의 서버가 필요하다. (아마 가용성을 위해 이중화도 고려해야될 수도 있음.)