1. 程式人生 > >分散式事物中二段提交協議、三段提交協議理解

分散式事物中二段提交協議、三段提交協議理解

1、二段提交協議

2pc,以下圖為理解基礎:
提交事務階段------投票階段


協調者發起事務請求到所有的參與者,參與者接收到事務請求後判斷自身情況,如果不能執行事務,則反饋不能提交事務,返回NO,如果可以就執行事務,並將undo和redo資訊記錄事務日誌中,反饋Yes

執行事務階段


協調者收到所有參與者反饋Yes就釋出commit命令,否則如果超時未收到或者收到NO 那麼釋出回滾命令。

參與者收到commit的請求後正式提交事務操作,提交後釋放資源。完成事務後向協調者傳送ack訊息  協調者收到所有參與者的ack後完成事務。

參與者收到rollback的請求查詢undo記錄,完成回滾後釋放資源。完成事務後向協調者傳送ack訊息  協調者收到所有參與者的ack後中斷事務。

優點:原理簡單,實現方便
缺點:同步阻塞,單點問題,腦裂問題,太過保守--超時機制,資料不一致---第二階段部分事務提交。

2、三階段提交協議

3pc  首先理解3P請結合下圖進行理解:

第一階段

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中的缺點
--------------------- 
作者:tttmdds 
來源:CSDN 
原文:https://blog.csdn.net/tttmdds/article/details/78432414 
版權宣告:本文為博主原創文章,轉載請附上博文連結!