고개 서비스와 이체 서비스가 있는데, 만약 CUSTID
가 “0001”인 고객이 탈퇴한다고 가정했을 때, 이체 서비스에서 관리하고 있는 이체 내역 TB에 CUSTID
인 고객 정보가 삭제되어야 한다고 가정
모놀로틱에서는 하나의 트랜잭션 범위에서 수행되기 때문에 모두 반영되거나 모두 반영되지 않음 → 원자성을 보장
그러나 두 서비스에서는 두 개의 트랜잭션으로 나눠서 동작을 하기 때문에 원자성을 보장할 수 없음
그래서 분산 시스템에서 트랜잭션을 보장하기 위해서 2PC, Saga pattern 두 가지가 있음
한 개의 코디네이터(트랜잭션 매니저)와 여러 개의 참여자들로 나눠짐
코디네이터(트랜잭션 매니저)를 사용 → 코디네이터는 커밋할 트랜잭션을 만드는 노드
참여자(분산된 서비스 노드)는 코디네이터가 보낸 트랜잭션을 커밋하거나 롤백함
2PC는 말 그대로 2개의 페이지로 나눠져 있음
여기서 특징은 2PC에서 2가지 번복 없는 포인트를 가지게 되는데 prepare 단계에서 OK를 응답하면 반드시 커밋을 해야하며, commit 단계에서 코디네이터에 의한 결정을 무조건 따라야 한다는 것