마이크로서비스 아키텍처 · 데이터 일관성(사가·아웃박스) · 퀴즈
퀴즈: 사가와 아웃박스
문항 6개. 정답과 해설은 풀어 본 뒤에 보여 드립니다.
이중 쓰기 문제의 정확한 정의는?
- 같은 데이터를 두 테이블에 저장하는 것
- 두 서비스가 같은 행을 갱신하는 것
- 복제 지연으로 옛 값을 읽는 것
- DB 저장과 브로커 발행이 원자적이지 않아 한쪽만 성공할 수 있는 것
아웃박스 패턴이 보장하는 것과 보장하지 못하는 것은?
- 유실은 없애지만 중복은 남는다
- 유실도 중복도 없앤다
- 중복은 없애지만 유실은 남는다
- 둘 다 남는다
outbox 테이블에서 `aggregate_id` 를 파티션 키로 쓰는 이유는?
- 같은 집합체의 행이 한 노드에 모여 조회가 빨라져서
- 같은 집합체의 이벤트가 같은 파티션으로 가 순서가 보장되기 때문
- 같은 키의 페이로드가 함께 압축돼 저장 공간을 아껴서
- 같은 키의 이벤트가 하나로 합쳐져 중복이 사라져서
사가의 보상 트랜잭션이 '롤백'과 다른 점은?
- 이미 일어난 일을 되돌리는 게 아니라 상쇄하는 새 행동을 앞으로 실행한다
- 같은 자원을 잠그지 않아 롤백보다 훨씬 빠르게 끝난다
- DB 가 트랜잭션 로그를 되감아 대신 처리해 준다
- 이미 커밋된 데이터만 다루므로 실패할 수 없다
사가 단계가 다섯 개 이상으로 늘어날 때 권장되는 형태는?
- 코레오그래피 — 각 서비스가 이벤트를 듣고 알아서 다음 행동
- 2PC — 다섯 단계를 하나의 분산 트랜잭션으로 묶기
- 오케스트레이션 — 중앙 조정자가 순서를 지시
- 동기 호출 체인 — 한 서비스가 다음 서비스를 차례로 호출
2PC 를 마이크로서비스에서 잘 쓰지 않는 주된 이유는?
- 구현이 어렵고 지원하는 라이브러리가 거의 없어서
- 코디네이터 장애 시 참여자가 잠긴 채 대기해 가용성이 떨어져서
- 서비스마다 프로토콜이 달라 표준이 없어서
- 커밋 왕복이 두 번이라 단순히 느려서