2PC

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 처리 정책이 필요하다.