2

我想執行領導人選舉。現在我正在考慮使用鍵值存儲來實現這一點,但我不太確定這個想法是否可靠以及可伸縮性和一致性問題。真正的部署將有數千個節點,選舉應該在沒有任何中央權威機構或像動物園管理員那樣的服務的情況下進行。關於領導人選舉的一些想法

現在,我的問題是:

我可以使用key-value存儲(最好是C-A一樣了Riak可調)進行領導人選舉?利用KV商店進行領導人選舉可能有哪些優點/缺點?

謝謝!編輯: 我不再對欺負算法的方法感興趣

+2

您應該使用Paxos算法。 Apache ZooKeeper是它的一個開源實現。已經證明,所有分佈式一致性算法或者減少到Paxos或者是不正確的。 – 2011-05-26 20:25:47

+2

@ spike-gronim你可以說出這個減少Paxos算法的研究嗎?謝謝! – Aleyna 2011-05-29 19:37:22

回答

3

不保證一致性的鍵值存儲(如Riak)是一種不好的方法,因爲您可以獲得兩個節點,他們都認爲(有理由!)他們是新領導。保證一致性的關鍵值存儲不保證發生問題時的可用性,並且在您遇到可能導致節點丟失的問題時,可用性將會嚴重受損。

我建議爲成千上萬的節點做這件事的方法是從一個直接的對等安排與成千上萬個節點到分層安排。所以有一個主人和幾個團體。每個傳入節點都分配給一個組,將其分配給一個子組,將其分配給一個子子組,直到您發現自己處於足夠小的對等組中。然後大選只在各組領導人之間舉行,而獲勝者則從該組的領導人晉升。如果一個團體的領導人離開(可能是因爲晉升),其分組領導人之間的大選就會選出新的領導人。等等。

如果對等組變得過大,比如說26,那麼它的主節點會隨機將它分成5個小組,每組5個對等,並帶有隨機分配的領導。同樣,如果一個對等組太小,說3,那麼它可以請求其領導與其他人合併。如果領導者注意到他的追隨者太少(比如說3),那麼它可以告訴他們其中的一個將其子集團推廣到整個團體,並加入其中一個團體。你可以玩這些數字,這取決於你需要多少冗餘。

這將導致更多的選舉,但每次選舉都會大大減少開銷。這應該是一個非常重要的總體勝利。一開始,隨機混淆的節點不會立即開始輪詢數千個對等點,從而產生巨大的網絡流量高峯。

+0

非常感謝你!現在我可以看到C&A之間的權衡更好了。所以我們假設我將節點按層次分爲幾個站點,這樣我就可以有一些組長參與到領導者選舉中。就我而言,我將把選舉結果寫入一個帶有ACID保證的關係型數據庫管理系統,以便每個請求都能一致地轉發給新的領導者。即使在這種情況下,如果我使用最終一致的KV會有害嗎?我在這裏錯過任何觀點嗎? – Aleyna 2011-05-26 19:49:22

+0

@Aleyna:最終一致性KV的問題是,當你在等待「最終」位時,你可能會不一致。例如節點1進來,選舉自己的主人,檢查並看到它是主人,然後一個節點退出你的KV商店,鑰匙得到複製,第二個節點進來,看到沒有主人,選舉*本身*主人,而你處於不良狀態。如果您可以相信某些外部服務已經啓動,那麼您可以在Redis或關係數據庫中進行選舉。除此之外,希望較小的同齡羣體能夠減少大選的痛苦。 – btilly 2011-05-26 20:20:11