paxos算法的理論介紹和舉例說明

1. paxos簡單介紹

Paxos算法是萊斯利·蘭伯特(Leslie Lamport,就是 LaTeX 中的"La",此人現在在微軟研究院)於1990年提出的一種基於消息傳遞且具有高度容錯特性的一致性算法,是目前公認的解決分佈式一致性問題最有效的算法之一。

 

2. paxos理論總結

2.1、兩個操作

1、Proposal Value:提議的值;
2、Proposal Number:提議的編號,可理解爲提議版本號,要求不能衝突;

2.2、三個角色

1、Proposer:提議發起者。Proposer 可以有多個,Proposer 提出議案(value)。所謂 value,可以是任何操作,比如“設置某個變量的值爲value”。不同的 Proposer 可以提出不同的 value,例如某個Proposer 提議“將變量 X 設置爲 1”,另一個 Proposer 提議“將變量 X 設置爲 2”,但對同一輪 Paxos過程,最多隻有一個 value 被批准。
2、Acceptor:提議接受者。Acceptor 有 N 個,Proposer 提出的 value 必須獲得超過半數(N/2+1)的 Acceptor批准後才能通過。Acceptor 之間完全對等獨立。

這裏說明下Acceptor會維護一個信息表記錄,(MaxN,AcceptN,AcceptV)
MaxN是回覆過prepare request的最高Number
AcceptN是接受過accept request的最高Number
AcceptV是接受過accept request的最高Number對應的Value

3、Learner:提議學習者。上面提到只要超過半數Acceptor通過即可獲得通過,那麼Learner角色的目的就是把通過的確定性取值同步給其他未確定的Acceptor。

2.3、協議過程
階段一,準備階段(prepare階段)

(a)Proposer選擇一個提議編號N,然後向半數以上的Acceptor發送編號爲N的prepare request
(b)如果一個Acceptor收到一個編號爲N的prepare request,會有以下三種處理場景:
    b.1、if MaxN 等於 null,設置MaxN=N,承諾保證不再接受任何編號小於N的request,迴應(pok,null,null)
    b.2、if N 小於等於 MaxN,迴應<pno>
    b.3、if N 大於 MaxN,設置MaxN=N,承諾保證不再接受任何編號小於N的request
        b.3.1、if AcceptN 等於 null,迴應(pok,null,null)
        b.3.2、if AcceptN 不等於 null,迴應(pok,AcceptN,AcceptV)

階段二,接受階段(accept階段)

(a)Proposer接收到Acceptor對於prepare request的迴應
    a.1、收到的pok迴應未超過半數,重新發起prepare request請求,修改N值
    a.2、收到的pok迴應超過半數,接下來它將給這些Acceptor發送一個Number爲N,Value爲V的proposal作爲accept request
        a.2.1、if 迴應全部都是(pok,null,null),任取值作爲V,提交
        a.2.2、if 迴應包括(pok,AcceptN,AcceptV),取最大的AcceptN對應的AcceptV作爲V,提交
(b)Acceptor接收到accept request
    b.1、if N 小於 MaxN,迴應<ano>
    b.2、if N 大於等於 MaxN,設置AcceptN=N,AcceptV=V,批准,迴應<aok>

階段三、學習階段(learn階段)

1、if 收到的aok迴應未超過半數,重新發起prepare request請求,修改N值
2、if 收到的aok迴應超過半數,結束,將結果通知給所有的learner

 

3. 簡單舉例說明---3軍問題

假設的3軍問題

1) 1支紅軍在山谷裏紮營,在周圍的山坡上駐紮着3支藍軍;
2) 紅軍比任意1支藍軍都要強大;如果1支藍軍單獨作戰,紅軍勝;如果2支或以上藍軍同時進攻,藍軍勝;
3) 三支藍軍需要同步他們的進攻時間;但他們惟一的通信媒介是派通信兵步行進入山谷,在那裏他們可能被俘虜,從而將信息丟失;或者爲了避免被俘虜,可能在山谷停留很長時間;
4) 每支軍隊有1個參謀負責提議進攻時間;每支軍隊也有1個將軍批准參謀提出的進攻時間;很明顯,1個參謀提出的進攻時間需要獲得至少2個將軍的批准纔有意義;
5) 問題:是否存在一個協議,能夠使得藍軍同步他們的進攻時間?

 

兩個參謀先後提議的場景

paxos算法的理論介紹和舉例說明

1) 參謀1發起提議,派通信兵帶信給3個將軍,內容爲(編號1);

2) 3個將軍收到參謀1的提議,由於之前還沒有保存任何編號,因此把(編號1)保存下來,避免遺忘;同時讓通信兵帶信回去,內容爲(pok);

3) 參謀1收到至少2個將軍的回覆,再次派通信兵帶信給3個將軍,內容爲(編號1,進攻時間1);

4) 3個將軍收到參謀1的時間,把(編號1,進攻時間1)保存下來,避免遺忘;同時讓通信兵帶信回去,內容爲(aok);

5) 參謀1收到至少2個將軍的(aok)內容,確認進攻時間已經被大家接收;

6) 參謀2發起提議,派通信兵帶信給3個將軍,內容爲(編號2);

7) 3個將軍收到參謀2的提議,由於(編號2)比(編號1)大,因此把(編號2)保存下來,避免遺忘;又由於之前已經接受參謀1的提議,因此讓通信兵帶信回去,內容爲(pok,編號1,進攻時間1);

8) 參謀2收到至少2個將軍的回覆,由於回覆中帶來了已接受的參謀1的提議內容,參謀2因此不再提出新的進攻時間,接受參謀1提出的時間;

 

兩個參謀交叉提議的場景

paxos算法的理論介紹和舉例說明

1) 參謀1發起提議,派通信兵帶信給3個將軍,內容爲(編號1);

2) 3個將軍的情況如下
    a) 將軍1和將軍2收到參謀1的提議,將軍1和將軍2把(編號1)記錄下來,如果有其他參謀提出更小的編號,將被拒絕;同時讓通信兵帶信回去,內容爲(pok);
    b) 負責通知將軍3的通信兵被抓,因此將軍3沒收到參謀1的提議;

3) 參謀2在同一時間也發起了提議,派通信兵帶信給3個將軍,內容爲(編號2);

4) 3個將軍的情況如下
    a) 將軍2和將軍3收到參謀2的提議,將軍2和將軍3把(編號2)記錄下來,如果有其他參謀提出更小的編號,將被拒絕;同時讓通信兵帶信回去,內容爲(pok);
    b) 負責通知將軍1的通信兵被抓,因此將軍1沒收到參謀2的提議;

5) 參謀1收到至少2個將軍的回覆,再次派通信兵帶信給有答覆的2個將軍,內容爲(編號1,進攻時間1);

6) 2個將軍的情況如下
    a) 將軍1收到了(編號1,進攻時間1),和自己保存的編號相同,因此把(編號1,進攻時間1)保存下來;同時讓通信兵帶信回去,內容爲(aok);
    b) 將軍2收到了(編號1,進攻時間1),由於(編號1)小於已經保存的(編號2),因此讓通信兵帶信回去,內容爲(ano);

7) 參謀2收到至少2個將軍的回覆,再次派通信兵帶信給有答覆的2個將軍,內容爲(編號2,進攻時間2);

8)2個將軍的情況如下 
    a)將軍2收到了(編號2,進攻時間2),和自己保存的編號相同,因此把(編號2,進攻時間2)保存下來,同時讓通信兵帶信回去,內容爲(aok);
    b)將軍3收到了(編號2,進攻時間2),和自己保存的編號相同,因此把(編號2,進攻時間2)保存下來,同時讓通信兵帶信回去,內容爲(aok);

9) 參謀2收到至少2個將軍的(aok)內容,確認進攻時間已經被多數派接受;

10) 參謀1只收到了1個將軍的(aok)內容,同時收到一個(ano);參謀1重新發起提議,派通信兵帶信給3個將軍,內容爲(編號3);

11) 3個將軍的情況如下
    a) 將軍1收到參謀1的提議,由於(編號3)大於之前保存的(編號1),因此把(編號3)保存下來;由於將軍1已經接受參謀1前一次的提議,因此讓通信兵帶信回去,內容爲(pok,編號1,進攻時間1);
    b) 將軍2收到參謀1的提議,由於(編號3)大於之前保存的(編號2),因此把(編號3)保存下來;由於將軍2已經接受參謀2的提議,因此讓通信兵帶信回去,內容爲(pok,編號2,進攻時間2);
    c) 負責通知將軍3的通信兵被抓,因此將軍3沒收到參謀1的提議;

12) 參謀1收到了至少2個將軍的回覆,比較兩個回覆的編號大小,選擇大編號對應的進攻時間作爲最新的提議;參謀1再次派通信兵帶信給有答覆的2個將軍,內容爲(編號3,進攻時間2);

13)2個將軍的情況如下 
    a)將軍1收到了(編號3,進攻時間2),和自己保存的編號相同,因此保存(編號3,進攻時間2),同時讓通信兵帶信回去,內容爲(aok);
    b)將軍2收到了(編號3,進攻時間2),和自己保存的編號相同,因此保存(編號3,進攻時間2),同時讓通信兵帶信回去,內容爲(aok);

14) 參謀1收到了至少2個將軍的(aok)內容,確認進攻時間已經被多數派接受;

 
 
 
參考的文檔:3軍問題,https://www.cnblogs.com/charlesblc/p/6037963.html
參考的文檔:《Paxos Made Simple》翻譯,https://www.cnblogs.com/YaoDD/p/6150498.html
參看的文檔:《Paxos Made Simple》英文原版PDF版本,https://www.microsoft.com/en-us/research/uploads/prod/2016/12/paxos-simple-Copy.pdf

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章