2015-11-05 20 views
1

最近我在學習Paxos,直到現在我已經對它是如何工作有一個基本的瞭解。但任何人都可以解釋Paxos如何處理丟包和新節點加入?如果提供了一個簡單的例子可能會更好。Paxos如何處理丟包和新節點加入?

回答

2

經典的Paxos算法沒有「新節點加入」的概念。一些Paoxs變體,比如「垂直Paxos」,但是經典算法要求在運行算法之前靜態定義所有節點。關於數據包丟失,Paxos使用一個非常簡單的無限循環:「嘗試一輪算法,如果有任何錯誤,請嘗試另一輪。」因此,如果在第一次嘗試達到解決方案時丟失太多數據包(可通過等待答覆時的簡單超時檢測到),則可嘗試第二輪。如果該輪的超時過期,請重試,依此類推。

究竟如何檢測和處理數據包丟失是Paxos算法未定義的問題。這是一個實現特定的細節。對於生產環境來說,這實際上是一件好事,因爲如何處理它可能會對基於Paxos的系統產生相當大的性能影響。

+0

有一種常見的誤解,即羣集成員資格更改未被Paxos覆蓋;但在最後一段2001年的論文Paxos Made Simple中對它們進行了描述。 – simbo1905

0

關於丟包的Paxos使用有關網絡的下一個假設:

消息可能會丟失,重新排序或複製。

這是通過法定人數解決。所有接受者中至少有X個必須接受一個值,以便系統接受它。這也解決了節點失敗時的問題。

關於新節點加入,Paxos不關注節點如何檢測其他節點。這是其他算法解決的問題。

他們自動地知道所有的節點和每個人的角色

如果你想要,生產代碼實現,你可以用Zookeeper解決這個新的節點檢測。

0

正如其他答案中指出的那樣,消息丟失或消息重新排序是由算法處理的:它被設計爲準確處理這些情況。

新節點加入是「集羣成員變化」的問題。有一種常見的誤解,認爲集羣成員變化不被Paxos覆蓋;但在最後一段的2001年論文Paxos Made Simple中描述了它們。在這blog post我討論它。有一個新節點在加入集羣時如何獲得所有狀態的副本的問題。這在this answer中討論。