저번 시간에는 이벤트 주도 아키텍처
에 대해 알아보았다.
MSA의 가장 큰 허들 중 하나는 MSA는 polyglot persistence
라는 특징을 가지고 있으며 데이터베이스가 1개가 아닌 N개로써 생기는 분산 트랜잭션
을 어떻게 잘 처리할 것인가이다.
분산 트랜잭션 처리는 주로 Saga Pattern
, Two Phase Commit
, TCC
등으로 처리 가능하다고 한다.
오늘은 사가 패턴
에 대해 알아보고자 한다.
Saga
라는 말은 아이슬란드어로 말해진 것, 말로 전하다
를 의미한다. 이 의미에서 사가패턴이 무엇인지를 유추할 수 있다.
Saga Pattern
이란 로컬 트랜잭션들이 순차적으로 업데이트를 수행해 나가는 패턴이다.
각각의 마이크로서비스에서 책임지고 트랜잭션을 처리하는데 만약 문제가 발생한다면?? 실패한다면?? 보상 이벤트를 통해 보상 트랜잭션을 발행하여 이전 서비스들에게 롤백을 하도록 하자는 개념이다.
MSA는 물리적으로 데이터베이스가 분리되어 있어 단일 트랜잭션으로 커밋, 롤백 처리가 불가능하다. MSA는 비즈니스 로직으로 커밋, 롤백 등 트랜잭션에 대한 책임을 가지도록 구현해야 한다.
이러한 사가 패턴에는 크게 2가지 방식이 있다.
오케스트레이션 방식은 분산 트랜잭션을 책임지는 별도의 중계자(Saga Manager)가 존재하는 방식이다.
중계자(Saga Manager)는 사가 인스턴스를 발급하여 각 작업의 상태를 저장 및 해석하며, 보상 트랜잭션을 사용하여 오류 복구를 처리한다. 그 순서는 다음과 같다.
대표적으로 Axon Framework
로 구현가능하다.
장점
단점
분산 트랜잭션을 책임지는 중계자(Saga Manager)가 존재하지 않는 방식이다.
순서는 다음과 같다.
장점
단점
https://learn.microsoft.com/ko-kr/azure/architecture/reference-architectures/saga/saga