作者: Unmesh Joshi
譯者: java達(dá)人
通過(guò)要求法定多數(shù)做出每個(gè)決策,以避免兩組服務(wù)器獨(dú)自決策。
問(wèn)題
在分布式系統(tǒng)中,每當(dāng)服務(wù)器執(zhí)行操作時(shí),都需要確保在發(fā)生崩潰的情況下,客戶端可以使用這些操作的結(jié)果。這可以通過(guò)將結(jié)果復(fù)制到集群中的其他服務(wù)器來(lái)實(shí)現(xiàn)。但是,這引出了一個(gè)問(wèn)題:需要多少其他服務(wù)器確認(rèn)復(fù)制,原服務(wù)器的更新才會(huì)被認(rèn)可。如果原始服務(wù)器等待太多復(fù)制,則它將響應(yīng)緩慢-活躍性減少。但是,如果沒(méi)有足夠的復(fù)制,則更新可能會(huì)丟失-失去安全性。在整體系統(tǒng)性能和系統(tǒng)連續(xù)性之間取得平衡是至關(guān)重要的。
解決方案
當(dāng)集群中的大多數(shù)節(jié)點(diǎn)已確認(rèn)更新時(shí),集群同意已收到更新。我們稱這個(gè)數(shù)字為quorum法定數(shù)。因此,如果我們有五個(gè)節(jié)點(diǎn)的集群,則需要quorum 3。(對(duì)于n個(gè)節(jié)點(diǎn)的集群,quorum 為n / 2 +1。)quorum 表明可以容忍多少個(gè)故障-即集群的大小減去quorum。五個(gè)節(jié)點(diǎn)的集群可以容忍其中兩個(gè)故障。通常,如果我們要容忍“f”個(gè)故障,則需要一個(gè)2f +1的集群大小
考慮以下兩個(gè)需要quorum的示例:
? 更新服務(wù)器集群中的數(shù)據(jù)。High-Water Mark用于確保只有保證在大多數(shù)服務(wù)器上可用的數(shù)據(jù)才對(duì)客戶端可見(jiàn)。? 領(lǐng)導(dǎo)者選舉。在“領(lǐng)導(dǎo)者和追隨者”模式中,僅當(dāng)領(lǐng)導(dǎo)者從大多數(shù)服務(wù)器中獲得選票時(shí)才被選擇。
確定集群中的服務(wù)器數(shù)量
僅當(dāng)大多數(shù)服務(wù)器都已啟動(dòng)并正在運(yùn)行時(shí),集群才能運(yùn)行。在進(jìn)行數(shù)據(jù)復(fù)制的系統(tǒng)中,需要考慮兩件事:
?寫(xiě)操作的吞吐量。每次將數(shù)據(jù)寫(xiě)入集群時(shí),都需要將其復(fù)制到多個(gè)服務(wù)器。每個(gè)附加的服務(wù)器都會(huì)增加一些開(kāi)銷,以完成此寫(xiě)操作。數(shù)據(jù)寫(xiě)入的等待時(shí)間與構(gòu)成quorum的服務(wù)器數(shù)量成正比。正如我們將在下面看到的,將集群中的服務(wù)器數(shù)量加倍會(huì)使吞吐量降低到原始集群值的一半。
? 需要容忍的故障數(shù)量。允許的服務(wù)器故障數(shù)取決于集群的大小。但是,僅將一臺(tái)服務(wù)器添加到現(xiàn)有集群并不總是能提供更多的容錯(cuò)能力:將一臺(tái)服務(wù)器添加到三臺(tái)服務(wù)器集群并不能提高容錯(cuò)能力。
考慮到這兩個(gè)因素,大多數(shù)實(shí)際的基于quorum的系統(tǒng)的集群大小為3或5。一個(gè)由五臺(tái)服務(wù)器組成的集群可承受兩臺(tái)服務(wù)器故障,并且每秒可處理數(shù)千個(gè)請(qǐng)求的數(shù)據(jù)寫(xiě)入吞吐量。
這是一個(gè)根據(jù)可容忍的故障數(shù)以及對(duì)吞吐量的大致影響來(lái)選擇服務(wù)器數(shù)量的示例。吞吐量列顯示近似的相對(duì)吞吐量,以突出顯示吞吐量如何隨服務(wù)器數(shù)量而降低。實(shí)際數(shù)量因系統(tǒng)而異。
例如,讀者可以參考Raft Thesis和Zookeeper原創(chuàng)論文中發(fā)布的實(shí)際吞吐量數(shù)據(jù)。
例子
? Zab,Raft,Paxos等所有共識(shí)實(shí)現(xiàn)都是基于quorum的。? 即使在未使用共識(shí)的系統(tǒng)中,quorum也可用于確保在出現(xiàn)故障或網(wǎng)絡(luò)分區(qū)時(shí)至少一臺(tái)服務(wù)器可以使用最新更新。例如,在像Cassandra這樣的數(shù)據(jù)庫(kù)中,可以將數(shù)據(jù)庫(kù)更新配置為僅在大多數(shù)服務(wù)器成功更新了記錄之后才返回成功。
-
服務(wù)器
+關(guān)注
關(guān)注
12文章
9256瀏覽量
85755 -
電力電子
+關(guān)注
關(guān)注
29文章
572瀏覽量
48937 -
分布式系統(tǒng)
+關(guān)注
關(guān)注
0文章
146瀏覽量
19280
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論