- TCC(Try-Confirm-Cancel)
- TCC 모델을 활용해서, 분산된 시스템간의 트랜잭션을 HTTP 요청을 통해 제어한다.
- 기본적으로 요청을 여러번 쏘는 형태로 사용한다.
- 다른 서버에 try 요청(보내고 싶은 서버들에게)
- 모든 요청에 대한 응답이 정상적이라면 로직 수행
- 로직 이후 confirm 요청을 통해 기존 try를 통해 예약해놓은 부분을 실제로 반영하기.
- 의문 1. 로직은 정상적으로 다 수행했는데, confirm 요청에서 예외가 난다면?
- kafka와 같은 툴을 사용하여, event queue 기반으로 이를 처리하는 방법
- 항상 롤백되는 것이 맞을까? 적절한 상황을 생각해보고, 롤백이 아니라면 event queue를 적절한 주기로 재실행하는 것도 방법이 될 수 있음.
- 그럼에도 불구하고, event queue에 중복된 데이터 발생으로 항상 깔끔하게 해결되는 것은 아니다.
- 의문 2. 10대의 서버중 7대까지 정상 응답이 왔는데, 8번째 서버에서 예외가 난다면 어떻게 처리하는가?
- 예외의 종류
- 복구 불가능 -> 예외 발생 및 marking 하는 방법
- 복구 가능 -> RetryTemplate/Kafka 등
- 예외의 종류