-
2024.07.19 분산 트랜잭션, TCCTIL 2024. 7. 20. 20:12
분산 트랜잭션
분산 트랜잭션을 구현하는 방법 중 하나인 TCC (try cancel, confirm)에 대한 글이다.
분산 트랜잭션이란 단일 DB에서 처리할 수 없는, 두 개 이상의 DB, 프로그램 등을 하나의 트랜잭션처럼 제어하는 것이다.
구현 방법이 여러 가지 있는데 사가 패턴, tcc 패턴등이 있다.
이 중 tcc를 알아보면 재밌는 점은 DB에 재고 먼저 차감하고 나서 전체 프로세스가 완료되면 마지막에 최종 확인 및 취소를 하는 것이다. (구현에 따라 먼저 재고 차감을 하지 않을 수 있다)
확인, 취소가 어떠한 이유로 늦어질 수 있는데 그럴 경우는 타임아웃등을 고려할 수 있다.
행위를 하는 중 타임아웃이 발생해서 다 롤백될 수도 있는데 이는 휴리스틱예외라고 하며 시간을 더 늘려 해결할 수 있다.
++2024.09.02
또 확정 중 예외가 날 수 있는데 이는 Eventual Consistency 개념을 도입해서 최종적으로 일관성을 지킨다는 것으로 해결할 수 있겠다.
분산 트랜잭션을 도입해야 할 때 재밌는 패턴이다.
다른 분산 트랜잭션을 구현하는 패턴도 알아보자..
번외로..
트랜잭션 아웃 박스 패턴은 메시지 발행 보장하는 방법인데 만약에 kafka 메시지 발행이 실패해서 주문의 상태를 돌려야 한다면 여러 해결 방법이 있겠지만 TCC패턴도 쓸 수 있겠다.
동시성 문제
'TIL' 카테고리의 다른 글
2024.07.22 gap lock (0) 2024.07.22 2024.07.21 select for update (0) 2024.07.21 2024.07.12 포프 (0) 2024.07.12 2024.07.10~11 Query Tuning (0) 2024.07.11 2024.07.09 locking Introduction (0) 2024.07.09