2PC
Two Phase Commit
2PC의 개요
2PC 정의
분산 컴퓨팅 환경에서 원자성 보장을 위해 트랜잭션에 관련된 모든 데이터베이스 노드가 성공적으로 수정 되었음을 관리하는 기술
2PC의 필요성
- 분산 데이터베이스 환경에서는 단일 노드별 Commit과 Rollback 수행
- 대용량화에 따른 데이터베이스 인프라 지속적 확장
- 데이터베이스 인프라 확장으로 분산 환경에서의 원자성 보장 필요
2PC의 동작
2PC의 동작 개념도
- 크게 Prepare와 Commit 단계로 나눌 수 있음
2PC의 구성요소
구성요소 | 설명 |
---|---|
서버(Server) | 원격 노드에서 요구하는 데이터를 갖고 있는 노드 |
조정자(Coordinator) | 분산 트랜잭션 참여자 목록을 관리하고 Global commit 등을 전파 및 제어하는 노드 |
참여자(Participant) | 분산 트랜잭션에서 지역 트랜잭션을 수행하는 노드 |
클라이언트(Client) | 분산 트랜잭션을 발생시키는 응용 프로그램이 위치한 노드 |
2PC의 프로세스
- 조정자는 최초 요구에 연계되어, 관련된 모든 컴퓨터들을 대신하여 트랜잭션을 조정
- 조정자는 “트랜잭션 시작”이라는 내용을 로그 파일에 기재하고, 관련된 다른 컴퓨터들에게 트랜잭션 요청
- 참여자들은 자신의 로그에 트랜잭션을 기재하고, 다른 사용자가 쓸 수 없도록 데이터베이스 자원에 Lock를 걸어 데이터베이스 변경을 수행
- 참여자들은 조정자에게 “커미트 할 준비가 되었다”는 메시지를 송신
- 조정자는 “커미트 할 준비가 되었다”는 메시지를 받은 뒤에, 트랜잭션이 종료되었다는 사실을 로그 파일에 기재
- 조정자는 참여자들에게 트랜잭션을 커미트 하라고 통보
- 참여자들은 이 사실을 트랜잭션 로그 내에 기록한 다음, 자원에 걸려있던 Lock 해제
- 만약 참여자들이 트랜잭션을 커미트 하기 전의 어느 순간에 하나 이상의 컴퓨터에서 문제가 발생하면, 관리 프로그램은 트랜잭션이 시작되기 전의 상태로 되돌리도록 Rollback 메시지를 전파
2PC 단계별 주체의 수행과정
단계 | 조정자(Coordinator) | 참여자(Participant) |
---|---|---|
1단계 Prepare | Prepare 메시지를 각 참여자에 송신 모든 참여자의 응답(y/n) 수집 응답 없으면 타임아웃, no으로 간주 |
Prepare 메시지를 waiting 트랜잭션 준비되면 yes 전달 준비되지 못하는 상태이면 no 전달 |
2단계 Commit | 모든 참여자가 준비상태 yes이면 commit 송신 하나라도 no이면 rollback 송신 |
조정자의 commit/rollback을 waiting 조정자가 보내온 결과대로 올바르게 수행 수행완료 메시지 송신 |