사가 패턴(Saga Pattern)은 마이크로서비스 아키텍처에서 사용되며, 분산 시스템에서의 긴 트랜잭션을 관리하는 방법을 제공합니다. 이 패턴의 핵심은 각 마이크로서비스가 독립적인 트랜잭션을 실행하고, 트랜잭션 간의 일관성을 유지하는 것입니다.
이를 위해 다음과 같은 세부 사항들이 중요합니다:
사가의 구성
- 로컬 트랜잭션
- 각 마이크로서비스는 자체 데이터베이스에 대해 로컬 트랜잭션을 실행합니다. 이 트랜잭션은 독립적으로 완료되며, 다른 서비스의 트랜잭션과는 직접적인 연결이 없습니다.
- 컴펜세이션 트랜잭션
- 이는 기본 트랜잭션이 실패했을 때, 이전에 성공한 트랜잭션을 취소하거나 수정하는 역할을 합니다. 각 로컬 트랜잭션에는 해당 컴펜세이션 트랜잭션이 연결되어 있어야 합니다.
통신 방식
- 비동기 메시징
- 사가는 일반적으로 비동기 메시징 시스템을 통해 구현됩니다. 각 서비스는 이벤트를 발행하고, 다른 서비스는 이 이벤트를 수신하여 필요한 트랜잭션을 수행합니다.
- 이벤트 기반 트랜잭션
- 사가 내의 각 단계는 특정 이벤트에 의해 트리거됩니다. 이벤트는 서비스 간의 결합을 최소화하면서 통신을 가능하게 합니다.
구현 방식
- 오케스트레이션
- 중앙 조정자(예: 서비스 또는 프로세스)가 각 서비스의 트랜잭션을 조정하고 관리합니다. 이 방식은 모든 단계를 명확하게 통제할 수 있지만, 중앙 조정자가 병목 지점이 될 수 있습니다.
- 코레오그래피
- 각 서비스가 자체 로직에 따라 독립적으로 트랜잭션을 관리합니다. 코레오그래피 방식은 유연성이 뛰어나지만, 전체 트랜잭션의 흐름을 추적하기 어려울 수 있습니다.
장단점
- 장점
- 높은 결함 허용성, 서비스 간의 느슨한 결합, 분산 시스템에서의 데이터 일관성 유지
- 단점
- 복잡성 증가, 디버깅과 모니터링의 어려움, 트랜잭션 관리의 오버헤드 증가
사가 패턴은 분산 시스템에서 데이터 일관성을 유지하고 서비스 간의 결합을 최소화하는 데 매우 유용합니다. 그러나 이 패턴을 적용하기 전에 시스템의 복잡성, 오버헤드, 관리 측면을 충분
'[개발] Infrastructure > Deployment' 카테고리의 다른 글
Flagger (0) | 2023.12.05 |
---|---|
Hystrix (0) | 2023.11.30 |
카나리아 배포 (0) | 2023.11.17 |
Docker 블루-그린 배포 (0) | 2023.11.17 |
MSA 통신 패턴 (동기, 비동기)과 Apache Kafka, Zookeeper (0) | 2022.02.27 |