深入淺出理解Paxos演算法

2021-08-02 23:06:05 字數 2103 閱讀 7975

paxos演算法是萊斯利·蘭伯特(英語:leslie lamport

,latex中的「la」)於2023年提出的一種基於訊息傳遞且具有高度容錯特性的一致性演算法。

paxos演算法一開始非常難以理解,但是一旦理解其實也並不難,之所以難理解其實是因為作者講的故事難理解。

paxos演算法維基百科

本人是在看了這2個帖子之後再結合原**才看懂的。

paxos一共4個角色:client   proposer      acceptor     learner。

client:產生議題者

proposer :提議者

acceptor:決策者

learner:最終決策學習者,也就是執行者。

proposer拿著client的議題去向acceptor提議,讓acceptor來決策。

proposer提出議題,acceptor初步接受或者acceptor初步不接受。

acceptor初步接受則proposer再次向acceptor確認是否最終接受。

acceptor最終接受或者acceptor最終不接受。

learner最終學習的目標是向所有acceptor學習,如果有多數派個acceptor最終接受了某提議,那就得到了最終的結果,演算法的目的就達到了。

最基本的message flow: basic paxos演示圖如下圖所示,其他情況可以參考百科。

**:a1,,a2和a3就是acceptor。

p1,p2和p3就是proposer。淺色的p1和p2說明是進行提議,深色的p1和p2說明是拿到表決。

圓圈123表明是每次提議序號,遞增即可。黑色的圖表示被黑了,也就是否決。方塊表示投票結果,綠方塊表示投票通過,紅色菱形表示最終的投票結果。

整個事件是按照時間線從左到右發展。

事件發展:

第乙個框代表第一階段--提議

1.p2最先找到a2,p2提議序號是2,a2記錄下,因為之前沒有其他的序號所以成功了,然後返回標誌給p2;

2.p1找到a1,p1提議序號是1,a1記錄下,因為之前沒有其他的序號所以成功了,然後返回標誌給p1;

3.p1找到a3,p1提議序號是1,a3記錄下,因為之前沒有其他的序號所以成功了,然後返回標誌給p1;

問題來了

4.p1找到a2,p1提議序號是1,a2已經記錄下提議序號2,2>1,所以不成功;

5.p2找到a1,p2提議序號是2,a1已經記錄下提議序號1,1>2,所以成功;,然後返回標誌給p2;

6.p2找到a3,p2提議序號是2,a3已經記錄下提議序號1,1>2,所以成功;,然後返回標誌給p2;

第二個框代表第二階段--確認提議(投票)

7.p1找到a1,p1確認序號是1,a1已經記錄下提議序號2,1<2,所以不確認,然後p1繼續提議序號是3,周而復始...;

8.p2找到a2,p2確認序號是2,a2已經記錄下提議序號2,2=2,所以確認成功;,然後返回投票標誌給p2;

9.p2找到a3,p2確認序號是2,a3已經記錄下提議序號2,2=2,所以確認成功;,然後返回投票標誌給p2;

10.p2找到a1,p2確認序號是2,a1已經記錄下提議序號3,2<3,所以不確認,;然後p2繼續提議序號是4,周而復始...;

問題來了

11.p1找到a2,p1確認序號是1,a1已經記錄下確認序號2,1<2,所以不確認,然後返回確認序號2;

12.p1找到a3,p1確認序號是1,a3已經記錄下確認序號2,1<2,所以不確認,然後返回確認序號2;

13.p1和p2都得到確認也就是投票結果是2。

14.所有的learner最終學習的目標是2。

paxos過程結束了,這樣,一致性得到了保證,演算法執行到最後所有的proposer都投「2」所有的acceptor都接受這個議題,也就是說在最初的第二階段,議題是先入為主的,誰先佔了先機,後面的proposer在第一階段就會學習到這個議題而修改自己本身的議題,才能讓一致性得到保證,這就是paxos演算法的乙個過程。該演算法就是為了追求結果的一致性。

深入淺出理解Paxos演算法

paxos演算法是萊斯利 蘭伯特 英語 leslie lamport latex中的 la 於1990年提出的一種基於訊息傳遞且具有高度容錯特性的一致性演算法。paxos演算法一開始非常難以理解,但是一旦理解其實也並不難,之所以難理解其實是因為作者講的故事難理解。paxos演算法維基百科 本人是在看...

深入淺出理解索引

一 深入淺出理解索引結構 實際上,您可以把索引理解為一種特殊的目錄。sql server提供了兩種索引 聚集索引 clustered index,也稱聚類索引 簇集索引 和非聚集索引 nonclustered index,也稱非聚類索引 非簇集索引 下面,我們舉例來說明一下聚集索引和非聚集索引的區別...

深入淺出理解索引

一 深入淺出理解索引結構 實際上,您可以把索引理解為一種特殊的目錄。sql server提供了兩種索引 聚集索引 clustered index,也稱聚類索引 簇集索引 和非聚集索引 nonclustered index,也稱非聚類索引 非簇集索引 下面,我們舉例來說明一下聚集索引和非聚集索引的區別...