2PC

Two Phase Commit

2PC의 개요

2PC 정의

분산 컴퓨팅 환경에서 원자성 보장을 위해 트랜잭션에 관련된 모든 데이터베이스 노드가 성공적으로 수정 되었음을 관리하는 기술

2PC의 필요성

  • 분산 데이터베이스 환경에서는 단일 노드별 Commit과 Rollback 수행
  • 대용량화에 따른 데이터베이스 인프라 지속적 확장
  • 데이터베이스 인프라 확장으로 분산 환경에서의 원자성 보장 필요

2PC의 동작

2PC의 동작 개념도

  • 크게 Prepare와 Commit 단계로 나눌 수 있음 2PC

2PC의 구성요소

구성요소 설명
서버(Server) 원격 노드에서 요구하는 데이터를 갖고 있는 노드
조정자(Coordinator) 분산 트랜잭션 참여자 목록을 관리하고 Global commit 등을 전파 및 제어하는 노드
참여자(Participant) 분산 트랜잭션에서 지역 트랜잭션을 수행하는 노드
클라이언트(Client) 분산 트랜잭션을 발생시키는 응용 프로그램이 위치한 노드

2PC의 프로세스

  1. 조정자는 최초 요구에 연계되어, 관련된 모든 컴퓨터들을 대신하여 트랜잭션을 조정
  2. 조정자는 “트랜잭션 시작”이라는 내용을 로그 파일에 기재하고, 관련된 다른 컴퓨터들에게 트랜잭션 요청
  3. 참여자들은 자신의 로그에 트랜잭션을 기재하고, 다른 사용자가 쓸 수 없도록 데이터베이스 자원에 Lock를 걸어 데이터베이스 변경을 수행
  4. 참여자들은 조정자에게 “커미트 할 준비가 되었다”는 메시지를 송신
  5. 조정자는 “커미트 할 준비가 되었다”는 메시지를 받은 뒤에, 트랜잭션이 종료되었다는 사실을 로그 파일에 기재
  6. 조정자는 참여자들에게 트랜잭션을 커미트 하라고 통보
  7. 참여자들은 이 사실을 트랜잭션 로그 내에 기록한 다음, 자원에 걸려있던 Lock 해제
  8. 만약 참여자들이 트랜잭션을 커미트 하기 전의 어느 순간에 하나 이상의 컴퓨터에서 문제가 발생하면, 관리 프로그램은 트랜잭션이 시작되기 전의 상태로 되돌리도록 Rollback 메시지를 전파

2PC 단계별 주체의 수행과정

단계 조정자(Coordinator) 참여자(Participant)
1단계 Prepare Prepare 메시지를 각 참여자에 송신
모든 참여자의 응답(y/n) 수집
응답 없으면 타임아웃, no으로 간주
Prepare 메시지를 waiting
트랜잭션 준비되면 yes 전달
준비되지 못하는 상태이면 no 전달
2단계 Commit 모든 참여자가 준비상태 yes이면 commit 송신
하나라도 no이면 rollback 송신
조정자의 commit/rollback을 waiting
조정자가 보내온 결과대로 올바르게 수행
수행완료 메시지 송신