3상 커밋 프로토콜
Three-phase commit protocol컴퓨터 네트워킹 및 데이터베이스에서 3단계 커밋 프로토콜(3PC)[1]은 분산 시스템 내의 모든 노드가 트랜잭션을 커밋하는 데 동의하도록 하는 분산 알고리즘입니다.이는 2단계 커밋 프로토콜(2PC)의 보다 장애 복원성이 뛰어난 미세화입니다.
동기
2단계 커밋 프로토콜은 커밋 단계 동안 코디네이터와 코호트 구성원 모두의 장애로부터 신뢰할 수 있게 복구할 수 없습니다.코디네이터만 실패하고 코호트 구성원이 커밋 메시지를 수신하지 않았다면 커밋이 발생하지 않았음을 안전하게 추론할 수 있었다.그러나 코디네이터와 코호트 구성원이 모두 실패한 경우 실패한 코호트 구성원이 가장 먼저 통지를 받고 실제로 커밋을 수행했을 가능성이 있다.새로운 코디네이터가 선택되더라도 모든 코호트 구성원으로부터 동의를 받을 때까지 자신 있게 수술을 진행할 수 없으므로 모든 코호트 구성원이 응답할 때까지 차단해야 한다.
3단계 커밋 프로토콜은 커밋 준비 상태를 도입하여 이 문제를 제거합니다.사전 커밋 메시지를 보내기 전에 코디네이터가 실패하면 코호트는 작업이 중단되었음을 만장일치로 동의합니다.코디네이터는 모든 코호트 구성원이 커밋 준비가 완료되었음을 확인할 때까지 doCommit 메시지를 발송하지 않습니다.이는 모든 코호트 구성원이 그러한 결정을 인지하기 전에 코호트 구성원이 실제로 거래를 완료했을 가능성을 제거한다(2단계 커밋 프로토콜에서 무기한 차단을 필요로 하는 모호성).
솔루션
위에서 소개한 사전 커밋 단계는 참여자 또는 코디네이터와 참여자 모두가 커밋 단계에서 실패했을 때 시스템을 복구하는 데 도움이 됩니다.2단계 커밋 단계 중 코디네이터가 실패한 후 복구 코디네이터가 작업을 인계받으면 다음과 같이 새로운 사전 커밋이 편리합니다.참가자를 조회할 때 일부 노드가 커밋 단계에 있음을 알게 되면 크래시 전 코디네이터가 커밋 결정을 내렸다고 가정합니다.그러므로 그것은 커밋할 프로토콜을 좌우할 수 있다.마찬가지로 참가자가 PrepareToCommit 메시지를 수신하지 않았다고 하면 새로운 코디네이터는 이전 코디네이터가 PrepareToCommit 단계를 완료하기도 전에 실패한 것으로 간주할 수 있습니다.따라서 참여자가 변경을 커밋하지 않았다고 안전하게 가정할 수 있으므로 트랜잭션을 안전하게 중단할 수 있습니다.
내선번호
Sken의 원래 3단계 커밋 프로토콜을 사용하면 쿼럼이 진행되지 않고 연결될 수 있습니다(이는 교착 상태가 아닙니다. 네트워크 파티셔닝이 해결되면 시스템은 계속 진행됩니다).Keidar와 Dolev의 E3PC는[2] Sken의 3단계 커밋 프로토콜을 수정하고 *항상* 쿼럼이 진행되도록 하는 방식으로 이 문제를 해결합니다.
단점들
3상 커밋은 제한 지연이 있는 네트워크와 제한 응답 시간이 있는 노드를 상정하고 있습니다.무제한 네트워크 지연과 프로세스 일시 정지가 있는 대부분의 실용적인 시스템에서는 원자성을 보장할 수 없습니다.이 프로토콜의 또 다른 단점은 완료하려면 최소 3번의 왕복(RTT)이 필요하다는 것입니다.이는 각 트랜잭션을 완료하는 데 오랜 지연 시간이 걸릴 수 있습니다.
레퍼런스
- ^ Skeen, Dale (February 1982). A Quorum-Based Commit Protocol (Technical report). Department of Computer Science, Cornell University.
- ^ Keidar, Idit; Danny Dolev (December 1998). "Increasing the Resilience of Distributed and Replicated Database Systems". Journal of Computer and System Sciences. 57 (3): 309–324. doi:10.1006/jcss.1998.1566.