三階段提交( three-phase commit ) , 也 叫 三 階 段 提 交 協 議 ( three-phase commit protocol),是二階段提交(2pc)的改進版本。 與兩階段提交不同的是,三階段提交有兩個改動點。
1、引入超時機制。同時在協調者和參與者中都引入超時機制。
2、在第一階段和第二階段中插入乙個準備階段。保證了在最後提交階段之前各參與節點的狀態是 一致的。也就是說,除了引入超時機制之外,3pc 把 2pc 的準備階段再次一分為二,這樣三階段 提交就有 cancommit、precommit、docommit 三個階段。
1、. cancommit 階段
協調者向參與者傳送 commit 請求,參與者如果可以提交就返回 yes 響應,否則返回 no 響應。
2、precommit 階段
協調者根據參與者的反應情況來決定是否可以繼續進行,有以下兩種可能。
1)假如協調者從所有的 參與者獲得的反饋都是 yes 響應,那麼就會執行事務的預執行假如有任何乙個參與者向協調者傳送 了 no 響應,
2)等待超時之後,協調者都沒有接到參與者的響應,那麼就執行事務的中斷。
3、docommit 階段
該階段進行真正的事務提交,主要包含
1)協調這傳送提交請求
2)參與者提交事務
3)參與者響應反 饋( 事務提交完之後,向協調者傳送 ack 響應。)
4)協調者確定完成事務。
二階段提交協議,三階段提交協議
其實三者都是為了解決分布式一致性問題而存在的協議和演算法。首先先來了解幾個概念。協調者 coordinator 在分布式系統中,當事務操作需要跨越多個分布式節點的時候,為了保持分布式處理的acid特性,需要引入它來統一排程所有節點的執行邏輯。參與者 participant 協調者排程的這些節點就是參...
兩階段提交協議和三階段提交協議
jee的xa協議就是根據兩階段提交來保證事務的完整性,並實現分布式服務化的強一致性。兩階段協議提交的流程 準備階段 協調者向參與者發起指令,參與者評估自己的狀態。如果參與者評估指令可以完成,則會寫redo或者undo的日誌,然後鎖定資源,執行操作,但不提交 提交階段 如果每個參與者明確返回準備成功,...
兩階段與三階段提交協議
首先了解一下為什麼要使用多階段提交協議這個東西。在分布式系統中,我們會存在乙個方法對多個庫進行插入或更新。但是每個節點只能知曉自己的操作是成功或失敗,卻無法知道其他節點的成功和失敗。這樣的話就會導致資料的不一致性。當乙個事務跨越了多個節點時,為了保持資料的一致性,所以就引進了兩階段提交協議這個東西。...