1、二段提交協議
2pc提交事務階段------投票階段
協調者發起事務請求到所有的參與者,參與者接收到事務請求後判斷自身情況,如果不能執行事務,則反饋不能提交事務,返回no,如果可以就執行事務,並將undo和redo資訊記錄事務日誌中,反饋yes
執行事務階段
協調者收到所有參與者反饋yes就發布commit命令,否則如果超時未收到或者收到no 那麼發布回滾命令。
參與者收到commit的請求後正式提交事務操作,提交後釋放資源。完成事務後向協調者傳送ack訊息 協調者收到所有參與者的ack後完成事務。
參與者收到rollback的請求查詢undo記錄,完成回滾後釋放資源。完成事務後向協調者傳送ack訊息 協調者收到所有參與者的ack後中斷事務。
優點:原理簡單,實現方便
缺點:同步阻塞,單點問題,腦裂問題,太過保守--超時機制,資料不一致---第二階段部分事務提交。
2、三階段提交協議
3pc第一階段
cancommit
1、協調者向所有參與者發布包含事務內容的cancommit命令,等待參與者回應。
2、參與者認為自身能執行,則返回yes。否則返回no
第二階段
precommit階段
1、如果協調者收到的反饋都是yes,那麼發出precommit命令,進入prepared階段,參與者收到precommit命令後,執行事務操作。並寫入undo和redo資訊到事務日誌中。然後想協調者反饋ack相應
2、如果協調者收到的返回時no,那麼發布abort命令。各參與者收到abort或者超時,都中斷事務。
第三階段,
docommit階段
如果協調者收到所有參與者的ack相應,那麼會發出docommit命令,所有參與者收到docommit命令就提交事務,然後釋放資源。向協調者發出ack。協調者收到所有參與者的ack詳細後完成事務。
如果協調者收到no反饋或者超時響應後,將對所有的參與者發出abort請求。各個參與者收到abort請求後會利用undo資訊回滾事務。,然後釋放資源,反饋ack。協調者收到所有ack訊息後,中斷事務。
需要注意的是,在第三階段如果參與者沒有收到docommit命令,那麼超時後它會提交事務,畢竟第一階段所有的參與者都響應了,預設他們都能正常工作。
優缺點:
優點:即第三階段的超時提交。降低了參與者的阻塞範圍,並且能夠再出現單點故障後繼續達成一致。
缺點:資料可能也會不一致。也存在2pc中的缺點
二段提交協議與三段提交協議
第一階段 準備階段 協調者向參與者發起指令,參與者評估自己的狀態,如果參與者評估指令可以完成,則會寫redo或者undo日誌,讓後鎖定資源,執行操作,但並不提交。第二階段 如果每個參與者明確返回準備成功,則協調者向參與者傳送提交指令,參與者釋放鎖定的資源,如何任何乙個參與者明確返回準備失敗,則協調者...
分布式事物中二段提交協議 三段提交協議理解
1 二段提交協議 2pc,以下圖為理解基礎 提交事務階段 投票階段 協調者發起事務請求到所有的參與者,參與者接收到事務請求後判斷自身情況,如果不能執行事務,則反饋不能提交事務,返回no,如果可以就執行事務,並將undo和redo資訊記錄事務日誌中,反饋yes 執行事務階段 協調者收到所有參與者反饋y...
二階段提交協議,三階段提交協議
其實三者都是為了解決分布式一致性問題而存在的協議和演算法。首先先來了解幾個概念。協調者 coordinator 在分布式系統中,當事務操作需要跨越多個分布式節點的時候,為了保持分布式處理的acid特性,需要引入它來統一排程所有節點的執行邏輯。參與者 participant 協調者排程的這些節點就是參...