簡體   English   中英

Paxos和發現

[英]Paxos and Discovery

假設我將一些機器放入彈性集群中,並希望在其中運行一些共識算法(例如Paxos)。 假設他們知道網絡的初始大小,例如8台計算機。

因此,他們將運行共識算法,法定人數為5。

現在,考慮以下情況:

  1. 我發現CPU太低,並且將群集大小減少了一半,減少到4台計算機。
  2. 有一個分區拆分,每個拆分獲得4台計算機。

如果我采用當前的群集大小來達到法定數量,則可能會發生分區拆分。 由於對於基礎群集,情況(1)和(2)看起來完全相同。 但是,如果我使用固定數量,則無法縮小群集(並且如果進行放大,則會因分區而出現不一致的情況)。

我還有第三種選擇,即在擴展時通知所有計算機群集的大小,但是有可能在例如擴展之前就發生分區,並且該分區沒有收到新的大小並具有足夠的仲裁數量使用舊尺寸達成共識。

Paxos(和其他安全共識算法)在彈性環境中不可用嗎?

基於仲裁的共識協議從根本上需要仲裁才能運行。 Multi-Paxos和Raft都可以在集群和仲裁大小動態變化的環境中使用,但是必須以可控的方式完成,始終保持一致的仲裁。 例如,如果您當前使用的群集大小為8,並且想要將該群集的大小減小為4,則可以這樣做。 但是,將群集大小減小到4的決定必須是原始8同意的共識決定。

您的問題還不清楚,但是聽起來好像您在問,如果某種網絡分區導致您原來的8個群集無法使用,可以將群集大小安全地減小到4作為恢復機制。 實際上,答案是“否”,因為這樣做的決定是不可能達成共識的,並且實際上保證了落后於共識算法的企圖會導致不一致。 如何定義新的4組? 您如何保證所有同行都得出相同的結論? 您如何確保他們都同時做出相同的決定?

您當然可以手動做出所有這些決定,並通過關閉每個系統上的共識服務並手動重新配置其仲裁定義來強制系統恢復。 假設您沒有搞砸(對於任何實際部署來說,這都是一個很大的假設),這將是安全的。 不過,更好的方法是設計系統,以使一個或兩個網絡分區不會停止系統(很多站點),或者使用最終的一致性模型來優雅地處理偶發的網絡分區。 繞開CAP限制沒有萬靈丹。

Paxos和朋友可以彈性方式擴展(某種程度上)。 但是,只需更改學習者 ,而不是更改仲裁大小。 學習者是不參與共識但可以做出所有決定的節點。 就像接受者一樣,學習者接受閱讀並將寫轉發給領導者。

學習者有兩種風格。 第一個偵聽來自接受者的所有事件; 在第二秒中,領導者將所有已承諾的過渡轉發給學習者

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM