반응형
MSA 보상트랜잭션에서 많이 얘기가 나오는 Saga패턴에 대해서 알아본다.
Saga 패턴
- 서비스에서 각 업데이트가 이벤트를 발행해 다음 차례의 이벤트를 트리거하는 일련의 로컬 트랜잭션
- 만약 일련의 작업들 중 하나라도 실패하면 이전까지의 작업이 완료된 서비스들에게 보상이벤트를 소싱함으로써 분산 환경에서 일관성을 보장하는 패턴
- Saga패턴은 통신방식([Sync]동기/[Async]비동기), 일관성 처리([Atomic] 원자적 일관성/[Eventual] 최종 일관성), WorkFlow 조정 방식([Choreography]코레오그래피/[Orchestration]오케스트레이션)에 따라 8가지가 있음
1. Epic Saga(에픽 사가)
- 동기 통신 + 원자적 일관성 + 오케스트레이션(SAO)
- 많은 사람들에게 익숙하고 직관적인 패턴, 모놀리식과 비슷하고 특별한 기술적 제약 조건이 없음
- 오케스트레이터(중재자)를 활용한 보상 트랜잭션을 사용하여 구현
- 응답 시간이 김
2. Phone Tag Saga(폰 태그 사가)
- 동기통신 + 원자적 일관성 + 코레오그래피(SAC)
- 트랜잭션 원자성이 목표로 도메인 서비스 에러처리, 라우팅 등 자기가 참여한 워크플로에 대한 로직을 더 많이 갖게 됨
- 높은 확장성을 요구하고, 단순한 워크플로에 적합
- 코레오그래피를 선택했다는 것은 비동기를 택한 것이나 다름없으므로 흔치 않는 조합
3. Fairy Tale Saga(페어리 테일 사가)
- 동기 통신 + 최종 일관성 + 오케스트레이션(SEO)
- 오케스트레이터가 요청,응답,에러처리를 조정하지만 트랜잭션은 관리하지 않음
- MSA에서 흔한 패턴
- 오케스트레이터로 워크플로 관리 용이, 동기 통신의 직관적, 최종 일관성으로 에러 처리 과정 복잡도 낮음
4. Time Travel Saga(타임트래블 사가)
- 동기 통신 + 최종 일관성 + 코레오그래피(SEC)
- 코레오그래피 방식으로 도메인 설계 시 워크플로 에러조건 반영 필요, 워크플로 복잡도 증가
- 단순한 워크플로에 적합, 고속 처리량, 단방향 통신 처리 등 특이한 용도에 적합
5. Fantasy Fiction Saga(판타지 픽션 사가)
- 비동기 통신 + 원자적 일관성 + 오케스트레이션(AAO)
- 오케스트레이터에 비동기 통신을 적용하여 다양한 교착상태, 경합 조건 등의 난제들이 발생할 수 있음
- 비효과적인 패턴, 에픽사가에 성능 개선을 위한 그릇된 믿음을 가진 아키텍트들이 의외로 많이 씀
6. Horror Story Saga(호러 스토리 사가)
- 비동기 통신 + 원자적 일관성 + 코레오그래피(AAC)
- 원자적 일관성이라는 커플링 + 가장 느슨한 비동기, 코레오그래피 조합으로 최악의 궁합(안티 패턴)
7. Parallel Saga(패러럴 사가)
- 비동기 통신 + 최종 일관성 + 오케스트레이션(AEO)
- 오케스트레이터로 복잡한 워크플로에 적합, 비동기로 응답성 좋음
8. Anthology Saga(앤솔로지 사가)
- 비동기 통신 + 최종 일관성 + 코레오그래피(AEC)
- 결합도가 가장 낮은 구조
- 조정 기능이 없어 복잡도는 올라가지만, 처리량, 확장성 등 운영 아키텍처 특성을 좋아짐
- 높은 처리량을 요구하고, 단순하면서 선형적으로 진행되는 워크플로에 적합
Summary
- 결합도: 동기, 오케스트레이션일 경우 높음
- 복잡도: 최종일관성 + 동기 or 오케스트레이션일 경우 낮음
- 응답성/가용성: 비동기, 최종 일관성일 경우 높음
- 확장성/탄력성: 결합도가 낮아지면 확장성/탄력성 높음
참고:
https://azderica.github.io/01-architecture-msa/
https://tjenwellens.eu/everblog/ec936db8-ba4c-430b-aeb4-15d9c50c0f8c/
반응형
'개발 > MSA' 카테고리의 다른 글
[MSA] 분산된 서비스 간의 WorkFlow(워크플로) 관리 - 오케스트레이션과 코레오그래피 (0) | 2024.09.07 |
---|---|
[MSA] 분산 데이터 액세스 패턴(분산된 데이터에 어떻게 접근할 것인가) (2) | 2024.09.01 |
[MSA] 서비스 분리 해야할 때와 통합 해야할 때(서비스 분해와 통합 요인) (0) | 2024.08.31 |
[MSA] 데이터베이스 종류와 데이터베이스 선택 평가 항목 (0) | 2024.08.25 |
[MSA] 모놀리식 데이터베이스 분해 과정 (0) | 2024.08.24 |
댓글