2PC即二階段提交,是計算機網絡尤爲是在數據庫領域內,爲了使基於分佈式系統架構下的全部節點在進行事務處理過程當中可以保持原子性和一致性而設計的一種算法。
協議說明:二階段提交協議是將事務的提交過程分紅兩個階段來進行處理。
階段一:提交事務請求
投票階段
階段二:執行事務提交
執行階段算法
優勢:原理簡單,實現方便
缺點:同步阻塞、單點問題、腦裂、太過保守數據庫
在二階段提交的執行過程當中,全部參與該事務操做的邏輯都處於阻塞狀態安全
協調者的角色在整個二階段提交協議中起到了很是重要的做用,是單點的。網絡
在二階段提交協議的階段二,即執行事務提交的時候,commit請求並未發送到全部的參與者。架構
若是在協調者指示參與者進行事務提交詢問的過程當中,參與者出現故障而致使協調者始終沒法獲取到全部參與者的響應信息的換,這時協調者只能依靠自身的超時機制來判斷是否須要中斷事務,這樣的策略顯得比較保守。換句話說,二階段提交協議沒有涉及較爲完善的容錯機制,任意一個節點的失敗都會致使整個事務的失敗。分佈式
三階段提交是2PC的改進版,將二階段提交協議的「提交事務請求」過程一分爲二,造成了由CanCommit,PreCommit和doCommit三個階段組成的事務處理協議。
優化
階段一:CanCommitspa
階段二:PreCommit,兩種狀況
執行事務預提交:協調者從全部的參與者得到的反饋都是yes響應,那麼就會執行事務預提交。計算機網絡
中斷事務:假如任何一個參與者向協調者反饋了No響應,或者在等待超時以後,協調者尚沒法接收到全部參與者的反饋響應,那麼就會中斷事務設計
階段三:doCommit,兩種狀況
執行提交:
中斷事務
須要注意,一旦進入階段三,可能會存在如下兩種故障。
不管出現那種狀況,最終都會致使參與者沒法及時接受到來自協調者的doCommit或者abort請求,針對這樣的異常狀況,參與者都會在等待超時以後,繼續進行事務提交。
優勢:相較於2PC,3PC最大的有點就是下降了參與者的阻塞範圍,而且可以在單點故障後繼續達成一致。
缺點:容易出現數據不一致性
分佈式一致性協議是一種基於消息傳遞且具備高度容錯特性的一致性算法,是目前公認的解決分佈式一致性問題最有效的算法之一。
Paxos算法須要解決的問題就是如何在一個可能發生上述異常的分佈式系統中,快速且正確地在集羣內部對某個數據的值達成一致性,而且保證不論發生以上任何異常,都不會破壞整個系統的一致性。
假設有一組能夠提出提案的進程集合,那麼對於一個一致性算法來講須要保證如下幾點:
對於一致性來講,安全性需求以下:
從總體來講,Paxos算法的目標就是要保證最終有一個提案會被選定,當提案被選定後,進程最終也能獲取到被選定的提案。
有三種參與角色,咱們用Proposer,Acceptor和Learner來表示
假設不一樣參與者之間能夠經過收發消息來進行通訊,那麼:
P1:一個Acceptor必須批准它收到的第一個提案。
由於以上兩種狀況,在P1的基礎上,再加上一個提案
被選定須要由半數以上的Acceptor批准的需求暗示着一個Acceptor必須可以批准不止一個提案。
咱們使用一個全局的編號來惟一標識每個被Acceptor批准的提案,當一個具備某Value值的提案被半數以上的Acceptor批准後,咱們就認爲該Value被選定了,此時咱們也認爲該提案被選定了。
P2:若是編號爲M0、Value值爲V0的提案被選定了,那麼全部比編號M0更高的,且被選定的提案,其Value值必須也是V0.
一個提案要被選定,其首先必須被至少一個Acceptor批准,所以咱們能夠經過知足以下條件來知足P2。
P2a:若是編號爲M0、Value值爲V0的提案被選定了,那麼全部比編號M0更高的,且被Acceptor批准的提案,其Value值必須也是V0。
P2b:若是一個提案【M0,V0】被選定後,那麼以後任何Proposer產生的編號更高的提案,其Value值都爲V0。
由於一個提案必須在被Proposer提出後才能被Acceptor批准,所以P2b包含了P2a,進而包含了P2。
論證P2b成立。
P2c:對於任意的Mn和Vn,若是提案【Mn,Vn】被提出,那麼確定存在一個由半數以上的Acceptor組成的集合S,知足一下兩個條件中的任意一個。
Proposer生整天
Proposer選擇一個新的提案編號Mn,而後向某個Acceptor集合的成員發送請求,要求該集合中的Acceptor作出以下回應。
Acceptor批准提案
儘量地武略Prepare請求
階段一
階段二