Paxos算法 一、Paxos來源

Paxos是1990年,萊利斯-蘭伯特提出的,基於消息傳遞,且具有高度容錯性的一致性算法。是目前公認的解決分佈式一致性最有效的算法之一。

一、Paxos來源

1982年,蘭伯特與另外兩人發表了論文The Byzantine Generals Problem,提出了一種計算機容錯理論,即著名的拜占庭問題:

拜占庭帝國有很多支軍隊,不同軍隊間必須制定一個統一的行動計劃,從而做出進軍或者撤退的決定。而且,各個軍隊間是被地理位置所分隔開的,依靠軍隊的通訊員進行通訊。然而通訊員中可能存在叛徒,中途可能篡改消息,如何保證通訊過程中消息的一致性呢?

因爲我們的分佈式系統大部分都是在局域網當中,因此消息被篡改很不常見。我們通常在實際工作中會假設拜占庭問題是不存在的。

1990年,蘭伯特提出了一個理論上的一致性解決方案,同時給出了嚴格的數學證明。同樣是類似拜占庭問題,採用故事的形式來描述這一算法:

在古希臘有一個叫Paxos的小島,島上採用議會的形式來通過法令。議會中的議員通過信使進行消息的傳遞。值得注意的是,議員和信使都是兼職的,他們隨時會離開會議廳,設置信使傳遞的消息可能是重複的,或者一去不復返。因此,議會協議要求在此種情況下仍能保證法令的的正確產生,並且不會出現衝突。

Paxos算法的名字就是取自這個小島。

蘭伯特公認的令人晦澀的算法描述,知道1998年才被接受,從此Paxos 算法正是被計算機科學家接受用於解決分佈式系統的一致性問題。

2001年,蘭伯特發佈了Paxos Made Simple,使用通俗易懂的語言重新講述的這一算法。

二、算法解析

2.1 問題描述

假設有一組可以提成提案的進程集合,那麼對於一個一致性算法來說需要保證以下幾點:
1)這些被提出的提案,只有一個可以被選定。
2)如果滅有提案被提出,那麼就不會有提案被選定。
3)如果一個提案被選定,進程應該可以獲取被選定的提案信息。

關於安全性的條件有如下:
1)只有被提出的提案才能被選定。
2)只有一個值被選定。
3)如果進程認爲提案被選定了,那麼該提案就是真的被選定的那個。

在Paxos的算法中,有三種角色:
1)proposer 提案者
2)acceptor 接受者
3)learner 學習者

2.2 提案的選定

採取多acceptor的方式進行提案的選定。單acceptor存在單點問題。如何認爲這個提案被選定了呢?假設有一個acceptor集合,當有多個acceptor都選定了這個提案,當acceptor達到一定的數量,我們就認定提案選定成功。

整體來說是一個類似於兩階段提交的算法執行過程:
階段一:
1、proposer提出一個編號是M(n)的提案,然後向超過半數的acceptor發送編號爲M(n)prepare請求。
2、一個acceptor接收到編號爲M(n)的提案,且該編號大於其所響應的所有編號,那麼它就會將它所響應過得最大編號的提案作爲響應反饋給proposer,同時acceptor承諾不會再通過小於M(n)的提案。

階段二:
1、如果proposer收到半數以上acceptor返回的編號爲M(n)的響應,那麼它就會發送一個針對[M(n),V(n)]提案的Accept請求。
2、如果acceptor收到這個針對[M(n),V(n)]提案的Accept請求,只要該acceptor尚未對大於M(n)的prepare請求作出響應,它就可以通過這個提案。

2.3 提案的獲取

如何讓learner的獲取到通過提案呢?可以使用如下的方案:

讓所有的acceptor將他們的提案批准情況,統一發送給一個learner,各個learner之間相互通信。通常是主learner通知其他的learner。

如上方案存在主learner的單點問題,所以需要一個learner的集合。

2.4 通過選主proposer保證算法活性

一個分佈式算法通常有兩個關鍵特性,安全性(保證一定不會發生)和活性(保證一定會發生)。

如果任何一個proposer都能提交提案,那麼基於前面的實現方案,會導致整個算法死循環。

如:a提出m1的提案,發出prepare請求,acceptor接收並響應,此時b提出一個m2,acceptor同樣接收並響應。當a在第二階段發起提案時,發現m1被丟棄了,又會發出一個m3的prepare請求,導致死循環。

此時需要最proposer進行選舉,只有主proposer才能和過半的acceptor通訊,只要主proposer提出一個提案,就會被接受。當proposer發現當前有一個更大的提案,則會丟棄小的提案,並最終選出一個更大的提案。

三、總結

Paxos引入了過半的概念,少數服從多數。
Paxos支持節點角色的輪換,避免分佈式單點。

是目前最優秀的分佈式算法之一。

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