為什麼有些分散式計算要求奇數節點?


我是個業餘研究分散式計算的門外漢😅。踏入這門領域,遇到許多不解的規則,其中一項就是標題寫的:為什麼有些分散式計算要求奇數節點?今天找到一篇文章讓我豁然開朗:https://etcd.io/docs/v3.3/faq/#why-an-odd-number-of-cluster-members

首先要釐清是哪些分散計算?我把分散式計算分兩類:一類是追求高效能、各節點可獨立平行運作的計算(簡稱高效能),比如用多個節點服務多個獨立資料計算的使用者請求。另一類是追求高可靠度、運作結果有相依的計算(簡稱可靠度)。而原問題是指高可靠度。

許多高可靠度分散式計算應用軟體,如 etcd, RabbitMQ (quorum queues), 要求叢集中的節點數設定為奇數,為什麼?首先這類軟體是利用節點數的「多數」, floor(n/2) + 1, 作為某項可靠度的依據,如選出領導節點。以 n = 3 為例,多數為 2,也就是容錯為 3 – 2 = 1 個節點。那麼再多加 1 個節點會怎樣?就是 n = 4,多數變為 3,但容錯仍為 1 = 4 – 3. 所以 3 節點與 4 節點相比,4 節點不但沒增加容錯能力,反而增加達成多數的難度 ( 2 vs 3 )。因為多加的節點也可能出錯,能導致原本只錯 1 個的叢集再多 1 個錯,反而不能達成多數!因此用偶數節點的叢集不比減一的奇數來得好。

另外高可靠度分散式計算有一點與高效能也很不同。高效能是節點數愈多,效能愈好。但高可靠度往往是節點數愈多,要花更多時間作節點間的資料交換才能計算出多數,因此效能反而變差!所以高可靠度叢集要在可靠度與效能間作取捨。


Leave a Reply