多數決

透過要求多數決來做出每個決策,避免兩組伺服器做出獨立的決策。

問題

在分散式系統中,每當伺服器執行任何動作時,它需要確保在發生故障時,動作的結果可供客戶端使用。這可透過將結果複製到叢集中的其他伺服器來達成。但這會引發一個問題:在原始伺服器確信更新已完全識別之前,需要多少其他伺服器確認複製?如果原始伺服器等待太多複製,則它將會緩慢回應,進而降低活性。但如果它沒有足夠的複製,則更新可能會遺失,這會導致安全性失敗。在整體系統效能與系統完整性之間取得平衡至關重要。

解決方案

當叢集中大多數節點已確認更新時,叢集會同意已收到更新。我們將此數字稱為法定人數。因此,如果我們有一個包含五個節點的叢集,則我們需要 3 個法定人數。對於包含 n 個節點的叢集,法定人數為 n / 2 + 1。

需要法定人數表示可以容忍多少個故障,也就是叢集大小減去法定人數。包含五個節點的叢集可以容忍其中兩個故障。一般來說,如果我們想要容忍 f 個故障,則我們需要 2f + 1 的叢集大小。

如需更多詳細資訊,請前往 oreilly.com 上的線上電子書 第 08 章

此模式屬於 分散式系統模式

2023 年 11 月 23 日