從PAXOS到ZOOKEEPER分散式一致性原理與實踐--3PC(Three-Phase Commit)
2PC在其實際執行過程中可能存在諸如同步阻塞、協調者的單點問題、腦裂和太過保守的容錯機制等缺點,因此研究者在二階段提交協議的基礎上進行了改進,提出了三階段提交協議。
3PC,是Three-Phase Commit的縮寫,即三階段提交協議,是2PC的改進版本,其將二階段提交協議的”提交事物請求”過程一分為二,並形成了由CanCommit、PreCommit和do Commit三個階段組成的事物處理協議,其協議設計圖如下:
1、階段一:CanCommit
(1)事物詢問
協調者向所有的參與者傳送一個包含事物內容的canCommit請求,詢問是否可以執行事務提交操作,並開始等待各參與者的響應
(2)各參與者向協調者反饋事務詢問的響應
參與者在接收到來自協調者的canCommit請求後,正常情況下,如果其自身認為可以順利執行事務,那麼會反饋Yes響應,並進入預備狀態,否則反饋No響應
2、階段二:PreCommit
在階段二中,協調者會根據各參與者的反饋情況來決定是否可以進行事務的PreCommit操作,正常情況下,包含兩種可能:
(1)執行事務預提交
假如協調者從所有的參與者獲得的反饋都是Yes響應,那麼就會執行事務預提交。
(a)傳送預提交請求
協調者向參與者節點發出preCommit的請求,進入Prepared階段
(b)事務預提交
參與者接收到preCommit請求後,會執行事務操作,並將Undo和Redo資訊記錄到事務日誌中
(c)各參與者向協調者反饋事務執行的響應
如果參與者成功執行了事務操作,哪兒就會反饋給協調者Ack響應,同時等待最終的指令:提交(commit)或中止(abort)
(2)中斷事物
假如任何一個參與者向協調者反饋了No響應,或者在等待超時後,協調者尚無法接收到所有參與者的反饋響應,那麼就會中斷事物。
(a)傳送中斷請求
協調者向所有參與者節點發出abort請求
(b)中斷事物
無論是收到來自協調者的abort請求,或者是在等待協調者請求過程中出現超時,參與者都會中斷事物
3、階段三:doCommit
該階段將進行真正的事物提交,會存在以下兩種可能的情況:
(1)執行提交
(a)傳送提交請求
進入這一階段,假設協調者處於正常工作狀態,並且它接收到了來自所有參與者的Ack響應,那麼它將從”預提交”狀態轉換到”提交”狀態,並向所有的參與者傳送doCommit請求。
(b)事物提交
參與者接收到doCommit請求後,會正式執行事務提交操作,並在完成提交之後釋放在整個事物執行期間佔用的事物資源
(c)反饋事物提交結果
參與者在完成事物提交之後,向協調者傳送Ack訊息
(d)完成事物
協調者接收到所有參與者反饋的Ack訊息後,完成事物
(2)中斷事物
進入這一階段,假設協調者處於正常工作狀態,並且有任意一個參與者向協調者反饋了No響應,或者在等待超時之後,協調者商無法接收到所有參與者的反饋響應,那麼就會中斷事物
(a)傳送中斷請求
協調者向所有的參與者節點傳送abort請求
(b)事物回滾
參與者接收到abort請求後,會利用其在階段二中記錄的Undo資訊來執行事務回滾操作,並在完成事物回滾之後釋放在整個事物執行期間所佔用的資源
(c)反饋事務反饋結果
參與者在完成事物回滾之後,向協調者傳送Ack訊息
(d)中斷事物
協調者接收到所有參與者反饋的Ack訊息後,中斷事物
需要注意的是,一旦進入階段三,可能會出現以下兩種故障:
協調者出現問題
協調者和參與者之間的網路故障
無論出現哪種情況,最終都會導致參與者無法及時接收到來自協調者的doCommit或者是abort請求,針對這樣的異常情況,參與則都會在等待超時之後,繼續進行事務提交
3PC的優缺點
1、三階段提交的優點
相較於二階段提交協議,三階段提交協議最大的優點就是降低了參與者的阻塞範圍,並且能夠在出現單點故障後繼續達成一致
2、三階段提交的缺點
三階段提交協議在去除阻塞的同時也引入了新的問題,那就是在參與者接收到preCommit訊息後,如果出現網路分割槽,此時協調者所在的節點和參與者無法進行正常的網路通訊,在這種情況下,參與者依然會進行事物的提交,這必然出現資料的不一致。
從PAXOS到ZOOKEEPER分散式一致性原理與實踐pdf下載:
http://download.csdn.net/detail/xunzaosiyecao/9867618
作者:jiankunking 出處:http://blog.csdn.net/jiankunking
相關文章
- Redis、Zookeeper實現分散式鎖——原理與實踐Redis分散式
- 使用GO實現Paxos分散式一致性協議Go分散式協議
- Paxos——分散式一致性演算法分散式演算法
- paxos分散式一致性演算法分散式演算法
- 分散式鎖實現原理與最佳實踐分散式
- 分散式一致性演算法-paxos詳解與分析分散式演算法
- zookeeper 分散式鎖的原理及實現分散式
- 讀《深入分散式快取 - 從原理到實踐》分散式快取
- 搞懂分散式技術2:分散式一致性協議與Paxos,Raft演算法分散式協議Raft演算法
- 分散式理論(五) - 一致性演算法Paxos分散式演算法
- 三階段提交(Three-phase commit)MIT
- 分散式一致性協議之2PC和3PC分散式協議
- 關於分散式鎖原理的一些學習與思考-redis分散式鎖,zookeeper分散式鎖分散式Redis
- memcached分散式原理與實現分散式
- 【zookeeper】zookeeper分散式鎖分散式
- 搞懂分散式技術9:Nginx負載均衡原理與實踐分散式Nginx負載
- 分散式-zookeeper分散式
- 6 zookeeper實現分散式鎖分散式
- ZooKeeper分散式鎖的實現分散式
- 分散式鎖之Zookeeper實現分散式
- 分散式鎖實現(二):Zookeeper分散式
- 分散式資料庫事務故障恢復的原理與實踐分散式資料庫
- Redis從入門到高可用,分散式實踐(1)- 基礎介紹Redis分散式
- 分散式協議與演算法-Paxos演算法分散式協議演算法
- R2M分散式鎖原理及實踐分散式
- zookeeper分散式鎖分散式
- 4.5 zookeeper分散式分散式
- ZooKeeper 分散式鎖分散式
- Zookeeper 如何保證分散式系統資料一致性分散式
- 分散式理論(四) - 3PC協議分散式協議
- 從零開始的高併發(二)--- Zookeeper實現分散式鎖分散式
- 十九、Redis分散式鎖、Zookeeper分散式鎖Redis分散式
- 分散式鎖實踐分散式
- TensorFlow分散式實踐分散式
- 基於 Zookeeper 的分散式鎖實現分散式
- Zookeeper分散式鎖實現Curator十一問分散式
- 二十二、zookeeper實現分散式鎖分散式
- Squirrel狀態機-從原理探究到最佳實踐UI
- 女朋友也能看懂的Zookeeper分散式鎖原理分散式