dev.Log

MSA 환경에서 일관성을 유지하는 방법 - TCC & Event Driven 본문

Web

MSA 환경에서 일관성을 유지하는 방법 - TCC & Event Driven

초코푸딩 2024. 6. 10. 10:35

마이크로 서비스 간 일관성을 유지하는 방법중 하나라고 한다. 

마이스크로 서비스에서 장벽은?

- JOIN없이 기능을 개발해야함 (이미 대규모 서비스들은 JOIN을 이용하지 않고 있고, NoSQL을 사용한다. - 바운디드 컨텍스트)

- 여러 서비스 호출을 하나의 Transaction으로 묶을 수 없음

 

1. TCC (Try-Confirm/Cancel) 

TCC는 2단계 커밋 프로토콜Two-phase commit protocol 처럼 1단계로 Try로 사용할 리소스를 예약하고 정상적인 경우 2단계로 예약한 리소스를 Confirm함으로써 분산 트랜잭션을 구현한다.

ex ) 재고 차감과 결제 요청을 Try하고 오류가 없는 경우 Confirm 요청한다.

Try는 성공했는데 Confirm을 실패하면 어떻게 해야될까..? 분산된 환경에서 예약된 리소스를 해제하는 것은 쉬운 문제가 아닌데 TCC 메커니즘에서는 Cancel과 Timeout 두가지 방법으로 예약된 리소스를 해제한다. 

cancel - 명시적으로 해제 요청

timeout - 예약한 리소스에 대한 만료시간을 두기 (expires를 두고 재고에서 제외시키기)

 

출처 : https://www.popit.kr/rest-%EA%B8%B0%EB%B0%98%EC%9D%98-%EA%B0%84%EB%8B%A8%ED%95%9C-%EB%B6%84%EC%82%B0-%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98-%EA%B5%AC%ED%98%84-1%ED%8E%B8/

 

2. Event Driven 

각 서비스는 각자의 역할만 충실하게 (자신이 관리하는 데이터만 잘 관리)하고, 에러 발생하면 에러 이벤트만 발생시키는 것으로 역할을 다한다. 이 에러 이벤트는 필요한 서비스가 알아서 사용한다. 

 

 

Comments