728x90
반응형
목차는 MSA 에 있습니다.
[MSA 2편] 보상 트랜잭션 (SAGA 패턴)
MSA 보상 트랜잭션이란?
- commit 한 데이터나 이미 반영한 데이터를 보정하는 트랜잭션입니다.
어떤 상황에 사용하는게 좋은가?
- 분산 환경에서 여러 api 끼리 통신을 하면 서로 다른 DB 에 일관성있게 데이터를 변경해야하는 경우가 생깁니다.
- 한 번에 성공하면 문제가 없겠지만 일부라도 실패하면 rollback 을 해야하는 경우가 생깁니다. 이런 경우에 사용합니다.
SAGA
- 분산 트랜잭션 환경에서 보상 이벤트를 발생시킴으로써 원자성을 보장하는 패턴입니다.
SAGA 패턴 방식 1
- 발생한 서비스에 대해 롤백을 할 수 있는 서비스를 실행시키는 것입니다.
- 외부 연동의 서비스의 경우 이런 방법을 택해야할 수 있습니다.
- 예를 들면, 비행기 + 숙박을 같이 예약하는 시스템을 예로 들겠습니다.
- 비행기와 숙박 예약은 동시에 되야하며, 하나가 실패하면 다른 하나도 보통 실패가 되야 합니다.
- 비행기를 예약하면서 비행기 예약에 대한 카운터 취소 작업을 같이 기록합니다. 호텔을 예약하면서 호텔 예약에 대한 카운터 작업도 같이 기록합니다. 일부 동작에서 에러가 발생했을 경우 기록된 카운터 작업을 역순으로 실행합니다.
- 시스템적으로 얘기하면 카운터 작업을 저장소 (디비나 캐시 등) 에 저장해놓고 실패가 발생했을 때, 해당 저장소를 읽어 역순으로 실행시키는 것입니다.
SAGA 패턴 방식 2
- 발생한 서비스에 대해 성공할 때까지 서비스를 수행하는 것입니다.
- 덜 중요한 서비스에 이런 방식을 적용해 볼 수 있을 것입니다. 예를 들면, 앞에서 결제는 전부 성공했는데, 배송 처리 쪽에서 실패가 발생했을 경우입니다.
SAGA 구현 방식
- 중앙 집중 처리 방식이 있고, 각 서비스 별로 구독해서 처리하는 방식이 있습니다.
- 중앙 집중 처리 방식은 말 그대로 중앙에서 처리하는 것입니다. 도메인 결합이 높아질 수 있지만 추적은 쉬울 수 있습니다.
- 서비스 별 구독 방식은 서비스 별로 특정 Message broker 를 구독해서 이벤트가 발생할 때마다 처리하는 방식입니다. 사용하기 쉽고 편리하나 추적이 어려울 수 있습니다.
Reference
'MSA' 카테고리의 다른 글
[MSA 5편] API Gateway Service 정리 (0) | 2022.09.21 |
---|---|
[MSA 4편] Service Discovery (Eureka) (0) | 2022.08.20 |
[MSA 3편] CQRS 정리 (0) | 2022.08.03 |
[MSA 1편] MSA 기본 개념 정리 (0) | 2022.06.11 |
댓글