여러 저장소에 대해 원자적 최종 결정을 만든다.
2PC의 위험은 prepare 뒤 “결정 대기”에서 생긴다
코디네이터는 준비 표를 모아 하나의 결정을 전파한다. 참여자는 prepared 상태에서 로그와 잠금을 보유하므로, 이때 장애가 나면 블로킹이 된다.
Coordinator
1 prepare 요청
모든 참여자에게 커밋 가능 여부를 묻는다.
3 vote 집계
모두 Yes인지, 하나라도 No인지 판단한다.
장애 지점
결정 로그를 남기기 전/후 장애가 복구 복잡도를 만든다.
4 commit/abort 전파
최종 결정을 모든 참여자에게 보낸다.
Participants
2 prepare
redo/undo 로그를 남기고 Yes 또는 No를 보낸다.
prepared lock
Yes 이후에는 잠금과 커밋 가능 상태를 유지한다.
blocking wait
코디네이터 결정이 없으면 스스로 안전하게 끝내기 어렵다.
finish
결정에 따라 커밋/롤백하고 잠금을 해제한다.
prepared 상태가 잠금과 장애 대기를 만든다.
XA 지원, timeout, heuristic 처리 정책이 필요하다.