數(shù)據(jù)復(fù)制:構(gòu)建大規(guī)模分布式系統(tǒng)的關(guān)鍵組成部分
數(shù)據(jù)復(fù)制對于構(gòu)建可靠的大規(guī)模分布式系統(tǒng)至關(guān)重要。在本期中,我們將探討常見的復(fù)制策略以及選擇合適策略的關(guān)鍵因素。
在本期中,我們將以數(shù)據(jù)庫為例進行討論。請注意,復(fù)制不僅適用于數(shù)據(jù)庫,還適用于緩存服務(wù)器(如Redis)以及用于關(guān)鍵內(nèi)存數(shù)據(jù)結(jié)構(gòu)的應(yīng)用程序服務(wù)器。
那么,什么是復(fù)制?它是一種將數(shù)據(jù)從一個地方復(fù)制到另一個地方的方法。我們使用它來確保我們的數(shù)據(jù)在需要時何地可用。它幫助我們提高數(shù)據(jù)的耐久性和可用性,減少延遲,增加帶寬和吞吐量。

但選擇復(fù)制策略并不總是一帆風順的。有不同的策略,每種策略都有其自身的優(yōu)點和缺點。某些策略可能更適用于特定用例,而其他策略可能更適用于不同的情況。
在本期中,我們將探討三種主要的復(fù)制策略:Leader-Follower、Multi-Leader 和 Leaderless。我們將詳細解釋每種策略是什么,它們是如何工作的,以及它們在哪些情況下最有效。我們將討論每種策略所涉及的權(quán)衡,以便我們可以明智地選擇最適合我們系統(tǒng)的策略。
那么,讓我們一起深入探討數(shù)據(jù)復(fù)制的世界吧。
復(fù)制簡介
讓我們高層次地考慮一下為什么需要復(fù)制。正如我們之前提到的,我們將始終以數(shù)據(jù)庫為例,但這同樣適用于其他類型的數(shù)據(jù)源。
提高耐久性
提高耐久性可能是數(shù)據(jù)復(fù)制最重要的原因。當單個數(shù)據(jù)庫服務(wù)器發(fā)生故障時,可能會導(dǎo)致災(zāi)難性的數(shù)據(jù)丟失和停機。如果數(shù)據(jù)復(fù)制到其他數(shù)據(jù)庫服務(wù)器,即使一個服務(wù)器宕機,數(shù)據(jù)也會得以保留。某些復(fù)制策略,如異步復(fù)制,可能仍然會導(dǎo)致小量數(shù)據(jù)丟失,但總體上耐久性得到了極大的改善。

您可能會想:常規(guī)數(shù)據(jù)備份難道不足以確保耐久性嗎?備份當然可以在硬件故障等災(zāi)難發(fā)生后恢復(fù)數(shù)據(jù)。但僅依靠備份存在耐久性的局限性。備份是定期的,因此在備份周期之間可能會發(fā)生一些數(shù)據(jù)丟失。從備份恢復(fù)數(shù)據(jù)也很慢,會導(dǎo)致停機。與備份相結(jié)合,復(fù)制通過消除(或大大減少)數(shù)據(jù)丟失窗口并允許更快的故障切換來提供額外的耐久性。備份和復(fù)制共同提供了數(shù)據(jù)恢復(fù)和最小化停機。
提高可用性
復(fù)制數(shù)據(jù)的另一個關(guān)鍵原因是提高系統(tǒng)的整體可用性和彈性。當一個數(shù)據(jù)庫服務(wù)器下線或負載過高時,保持應(yīng)用程序平穩(wěn)運行可能會很具挑戰(zhàn)性。
簡單地將流量重定向到新服務(wù)器并不是一件簡單的事情。新節(jié)點需要已經(jīng)有幾乎相同的數(shù)據(jù)副本,以便快速接管。在維護連續(xù)的應(yīng)用程序和用戶運行時間的同時,在后臺切換數(shù)據(jù)庫需要仔細的故障切換編排。
復(fù)制通過保持備用服務(wù)器具備最新的數(shù)據(jù)副本來實現(xiàn)無縫故障切換。應(yīng)用程序可以在出現(xiàn)問題時將流量重定向到副本,最小化停機時間。設(shè)計良好的系統(tǒng)通過監(jiān)控、負載平衡和復(fù)制配置自動處理重定向和故障恢復(fù)。
當然,復(fù)制也有自己的開銷和復(fù)雜性。但如果沒有復(fù)制,單個服務(wù)器故障可能意味著長時間的停機。復(fù)制可以在發(fā)生故障時保持可用性。

增加吞吐量
在多個數(shù)據(jù)庫實例之間復(fù)制數(shù)據(jù)還可以通過將負載分布在節(jié)點之間來增加整個系統(tǒng)的吞吐量和可伸縮性。
對于單個數(shù)據(jù)庫服務(wù)器,存在性能下降之前它能夠處理的并發(fā)讀寫的最大閾值。通過復(fù)制到
多個服務(wù)器,應(yīng)用程序請求可以在副本之間分布。更多的副本意味著處理負載的能力更強。
這種請求的分片分發(fā)工作負載。它允許整體系統(tǒng)維持比單個服務(wù)器更高得多的吞吐量。可以根據(jù)需要添加額外的副本來擴展容量。
復(fù)制本身會有相關(guān)的開銷,如果不妥善管理,可能會成為瓶頸。諸如節(jié)點間網(wǎng)絡(luò)帶寬、復(fù)制滯后和寫協(xié)調(diào)等因素都應(yīng)該受到監(jiān)控。
但適當?shù)膹?fù)制配置允許橫向擴展讀寫容量。這使得在單個服務(wù)器的限制之外實現(xiàn)了大規(guī)模的聚合吞吐量和工作負載可伸縮性。

降低延遲
數(shù)據(jù)復(fù)制還可以通過將數(shù)據(jù)放置在用戶附近來降低延遲。例如,將數(shù)據(jù)庫復(fù)制到多個地理區(qū)域?qū)?shù)據(jù)副本帶到本地用戶附近。與單一中心化數(shù)據(jù)庫位置相比,這減少了數(shù)據(jù)必須傳輸?shù)奈锢砭W(wǎng)絡(luò)距離。
較短的網(wǎng)絡(luò)距離意味著較低的傳輸延遲。因此,當將請求路由到附近的復(fù)制實例時,用戶的讀寫請求會看到更快的響應(yīng)時間,而不是路由到遠處的實例。多區(qū)域復(fù)制使本地化處理成為可能,避免了跨國或跨洲際網(wǎng)絡(luò)路由的高延遲。
請注意,將副本分布在各個區(qū)域會引入復(fù)雜性,如副本同步、一致性和與并發(fā)多地點更新的沖突解決。一致性模型、沖突解決邏輯和復(fù)制協(xié)議等解決方案有助于管理這種復(fù)雜性。
在適用的情況下,多區(qū)域復(fù)制通過本地化處理為地理分布的用戶和工作負載提供了主要的延遲改進。較低的延遲還提高了用戶體驗和生產(chǎn)力。
















 
 
 








 
 
 
 