핵심 내용
- 모놀리식 지옥이 도래할 조짐과 마이크로서비스 아키텍처를 도입하여 이 지옥에서 벗어나는 방법
- 요즘 애플리케이션에 분산 트랜잭션이 잘 어울리지 않는 이유
- 사가 패턴을 마이크로서비스 아키텍처에 적용하여 데이터 일관성 유지
- 코레오그래피/오케스트레이션 방식으로 사가 편성
- 비격리 문제 조치 대책
마이크로서비스 아키텍처에서의 트랜잭션 관리
분산 트랜잭션의 필요성
- 기존 모놀리식 엔터프라이즈 애플리케이션은 모든 요청을 하나의 DB 트랜잭션으로 처리
- 마이크로서비스 아키텍처는 서비스마다 DB가 있기 때문에 여러 DB에 걸쳐 데이터 일관성 유지 수단 필요
분산 트랜잭션의 문제점
- 이전에는 분산 트랜잭션을 이용하여 여러 서비스, DB, 메시지 브로커에 걸쳐 데이터 일관성을 유지
- X/Open DTP 모델이 사실상 표준
- 최근에 많이 사용되는 기술들의 상당수가 지원하지 않음(NoSQL DB와 Kafka 와 같은 현대 메시지브로커에서 미지원)
- 동기 IPC 형태라서 가용성이 떨어짐
데이터 일관성 유지: 사가
- 사가 패턴
- 사가는 비동기 메시징을 이용하여 편성한 일련의 로컬 트랜잭션
- 서비스 간 데이터 일관성은 사가로 유지
- ACID 트랜잭션과 차이점
- ACID 트랜잭션에 있는 격리성(I)가 사가에는 없음
- 사가는 로컬 트랜잭션마다 변경분을 커밋하므로 보상 트랜잭션을 걸어 롤백해야함
사가 편성
- 코레오그래피
- 의사 결정과 순서화를 사가 참여자에게 맡김
- 사가 참여자는 주로 이벤트 교환 방식으로 통신
- 오케스트레이션
- 사가 편성 로직을 사가 오케스트레이터에 중앙화
- 사가 오케스트레이터는 사가 참여자에게 커맨드 메시지를 보내 수행할 작업을 지시
코레오그래피 사가
- 확실한 이벤트 기반 통신
- 장단점
- 장점
- 단순함
- 느슨한 결함
- 단점
- 이해하기 어려움
- 서비스 간 순환 의존성
- 단단히 결함될 위험성
- 장점
오케스트레이션 사가
- 장단점
- 장점
- 의존 관계 단순화
- 낮은 결함도
- 관심사를 더 분리하고 비즈니스 로직을 단순화
- 단점
- 비즈니스 로직을 오케스트레이터에 너무 많이 중앙화하면 똑똑한 오케스트레이터 하나가 깡통 서비스에 일일이 할 일을 지시 모양새가 될 수 있음
- 장점
피격리 문제 처리
- 사가는 격리성이 빠져 있어 실제로 사가의 한 트랜잭션이 커밋한 변경분을 다른 사가가 즉시 바라볼 수 있어 문제 야기
- 문제점 2가지
- 한 사가가 실행 중에 접근하는 데이터를 도중에 다른 사가가 바꿔치기 할 수 있음
- 한 사가가 업데이트를 하기 이전 데이터를 다른 사가가 읽을 수 있어서 데이터 일관성이 깨질 수 있음
- 문제점 2가지
비정상 개요
- 소실된 업데이트: 한 사가의 변경분을 다른 사가가 미처 못 읽고 덮어 씀
- 더티 읽기: 사가 업데이트를 하지 않은 변경분을 다른 트랜잭션이나 사가가 읽음
- 퍼지/반복 불가능한 읽기: 한 사가의 상이한 두 단계가 같은 데이터를 읽어도 결과가 달라지는 현상(다른 사가가 그 사이 업데이트 했기 때문에)
비격리 대책
- 시맨틱 락: 애플리케이션 수준의 락
- 교환적 업데이트: 업데이트 작업은 어떤 순서로 실행해도 되게끔 설계
- 비관적 관점: 사가 단계 순서를 재조정하여 비즈니스 리스크를 최소화
- 값 다시 읽기: 데이터를 덮어 쓸 때 그 전에 변경된 내용은 없는지 값을 다시 읽고 확인하여 더티 쓰기를 방지
- 버전 파일: 순서를 재조정할 수 있게 업데이트를 기록
- by Value: 요청별 비즈니스 위험성을 기준으로 동시성 메커니즘을 동적 선택
참고
- 마이크로서비스 패턴 자바(저 : 크리스 리처드슨)
'dev > 아키텍처' 카테고리의 다른 글
| 마이크로서비스 패턴(6) (0) | 2022.03.31 |
|---|---|
| 마이크로서비스 패턴(5) (0) | 2022.03.24 |
| 마이크로서비스 패턴(3) (0) | 2022.03.03 |
| 도메인 주도 설계(Domain-Driven Design) (0) | 2022.02.24 |
| 마이크로서비스 패턴(2) (0) | 2022.02.17 |