Zettelkasten

2PC(Two phase Commit)은 분산 트랜잭션에서 원자성을 보장하는 프로토콜이다.

·수정 2026.04.24·수정 3

요약

  • 2PC(Two phase Commit)은 분산 트랜잭션에서 원자성을 보장하는 프로토콜
  • Prepare(투표 단계), Commit/Abort(결정 단계)로 나눠짐
  • 해당 단계들은 Coordinator or Transaction Manager를 통해 관리됨

본문

2 phase

Phase 1 - Prepare

  • 코디네이터가 모든 참여자한테 커밋할 준비가 되었는지 prepare 요청을 보냄
  • 각 참여자는 자신의 로컬 트랜잭션을 커밋하지 않고 잠근다. 로그에 redo/undo 정보를 기록
  • 준비가 되면 yes, 실패하면 no

Phase 2 - Commit/Abort

  • 전원 yes: 코디네이터가 commit 명령을 모든 참여자에게 보낸다. 각 참여자가 로컬 커밋 후 lock을 해제
  • 한명이라도 no 또는 타임아웃: 코디네이터가 abort 명령을 보낸다. yes 투표 참여자도 undo 로그를 이용해 롤백한다.

치명적 단점

  • Blocking 문제: 하나의 참여자에게 yes를 받고 코디네이터가 죽으면 lock 잡고 무한 락
  • 코디네이터의 SPOF
  • 성능: 전체 요청은 가장 느린 참여자의 지연에 의존적임
  • 확장성
    • prepare 단계의 네트워크 라운드 트립과 lock 경합이 증가한다. 마이크로서비스가 수십개 참여하는 트랜잭션에서는 참여 불가능

Saga와의 비교

  • 2PC는 커밋 시점을 지연 시켜서 원자성을 얻고, Saga는 커밋을 먼저하고 실패 시 보상으로 되돌린다.
  • Saga가 표준

참고

Saga 패턴