skarltjr / Memory_Write_Record

나의 모든 학습 기록
0 stars 0 forks source link

분산 트랜잭션 MSA - SAGA #46

Open skarltjr opened 2 years ago

skarltjr commented 2 years ago

문제 :

대안 1: Two-Phase Commit

예를들어 분리된 각각의 A service / B service가 존재한다고 생각해보자
b에서 발생한 실패로 a도 롤백을 해야하는 상황
그러나 이 방식에는 치명적인 문제점이 존재한다.

1. 단일 장애 지점
- 만약 코디네이터가 망가지면 양 서비스 모두 장애가 전파된다.
- 이게 MSA의 철학과 일치하는것인가? 아니라고 생각한다.

2. 너무 많은 통신으로 인해 성능 저하 
3. 확장성이 떨어진다. 2개 이상의 서비스가 묶여있다면..
skarltjr commented 1 year ago

대안 2 : SAGA패턴

Choreography & Orchestration

- Orchestration방식

Orchestration 방식은 중앙 집중식 방식이라는것으로부터 장점,단점이 존재한다. 장점 :

단점 :

작은 서비스에선 간편하게 사용할 수 있지만 결국 확장과 단일 장애지점이라는 한계가 명확

- Choreography 방식

각각 서비스끼리 이벤트에 기반한 통신 보상 트랜잭션을 통한 최종 일관성

장점 :

단점 :

skarltjr commented 1 year ago

Choreography

- Choreography 방식은 서비스끼리 직접적으로 통신하지 않고, 이벤트 Pub/Sub을 활용해서 통신하는 방식
- 프로세스를 진행하다가 여러 서비스를 거쳐 서비스에서 실패가 난다면 보상 트랜잭션 이벤트를 발행

Orchestration

- 중앙 집중식으로 오케스트레이터라는 관리자가 존재
- 실패 이벤트 발생시 관리자에게 이벤트를 전달
- 관리자가 모두에게 롤백 이벤트 전달