目錄
1 2PC和3PC
1.1 2PC
大家不要將兩階段提交想的複雜,事實上,這個協議很簡單,prepare階段參與者只是執行事務,但不提交,此時已能知道能否成功執行,並將此狀態反饋給協調者。協調者收到都成功,則通知所有參與者commit。若只要有一個反饋失敗,則通知所有參與者rollback。協調者在commit階段發出commit或rollback通知後就不管了。
1.2 3PC
3PC主要解決的單點故障問題,並減少阻塞
-
引入超時機制。同時在協調者和參與者中都引入超時機制。
-
在第一階段和第二階段中插入一個準備階段。保證了在最後提交階段之前各參與節點的狀態是一致的
2 Paxos算法
2.1算法原理
Paxos要實現的目標的是:
T1.一次選舉必須要選定一個議案(不能出現所有議案都被拒絕的情況)
T2.一次選舉必須只選定一個議案(不能出現兩個議案有不同的值,卻都被選定的情況)
Paxos算法的必須要能滿足:
P1:一個Acceptor必須接受它收到的第一個議案。
P2:如果一個值爲v的議案被選定了,那麼被選定的更大編號的議案,它的值必須也是v。
爲滿足P2:
要求提出議案符合P2c:
在所有Acceptor中,任意選取半數以上的Acceptor集合,我們稱這個集合爲S。Proposal新提出的議案(簡稱Pnew)必須符合下面兩個條件之一:
1)如果S中所有Acceptor都沒有接受過議案的話,那麼Pnew的編號保證唯一性和遞增即可,Pnew的值可以是任意值。
2)如果S中有一個或多個Acceptor曾經接受過議案的話,要先找出其中編號最大的那個議案,假設它的編號爲N,值爲V。那麼Pnew的編號必須大於N,Pnew的值必須等於V。
2.2算法執行過程