偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

搞不定異地多活?一文看懂?dāng)?shù)據(jù)同步核心方案,從青銅到王者!

數(shù)據(jù)庫 其他數(shù)據(jù)庫
一個(gè)成熟的異地多活架構(gòu),往往是多種方案的組合體。 比如,核心交易數(shù)據(jù)(如賬戶余額)走NewSQL,普通業(yè)務(wù)數(shù)據(jù)(如用戶日志)走M(jìn)Q,基礎(chǔ)配置數(shù)據(jù)(很少變更)走數(shù)據(jù)庫主從復(fù)制。這種分而治之、因地制宜的混合架構(gòu),才是高階架構(gòu)師真正的智慧所在。?

在構(gòu)建分布式的異地多活時(shí)候,數(shù)據(jù)同步無疑是最難的問題之一。傳統(tǒng)的數(shù)據(jù)同步方案,如簡(jiǎn)單的數(shù)據(jù)庫主從復(fù)制,在異地多活場(chǎng)景下顯得力不從心,延遲、數(shù)據(jù)沖突、網(wǎng)絡(luò)分區(qū)等問題層出不窮。

今天,我們就來深入剖析異地多活架構(gòu)下的數(shù)據(jù)同步方案,讓你徹底告別數(shù)據(jù)同步焦慮!

數(shù)據(jù)同步方案的核心挑戰(zhàn)

在異地多活架構(gòu)中,數(shù)據(jù)同步的核心目標(biāo)是在保證數(shù)據(jù)最終一致性的前提下,盡可能降低延遲,并能優(yōu)雅地處理網(wǎng)絡(luò)分區(qū)和數(shù)據(jù)沖突。這不僅僅是技術(shù)選型,更是一場(chǎng)關(guān)于性能、成本和一致性的極致權(quán)衡。

數(shù)據(jù)同步方案的設(shè)計(jì),本質(zhì)上是在回答三個(gè)問題:同步什么數(shù)據(jù)?何時(shí)同步?如何同步? 不同的業(yè)務(wù)場(chǎng)景,對(duì)這三個(gè)問題的回答截然不同,也因此催生了多種多樣的同步方案。

1. 基于數(shù)據(jù)庫的同步方案

這是最經(jīng)典、最直接的方案,利用數(shù)據(jù)庫自身或第三方工具提供的能力進(jìn)行數(shù)據(jù)復(fù)制。讓數(shù)據(jù)在不同機(jī)房之間保持一致。

a. 主從復(fù)制 (Master-Slave Replication)

這是最基礎(chǔ)的模式,一個(gè)主庫(Master)負(fù)責(zé)所有寫操作,并將數(shù)據(jù)變更日志(如MySQL的Binlog)異步或半同步地傳輸給多個(gè)從庫(Slave)。

?流程圖:


  • 優(yōu)點(diǎn):架構(gòu)簡(jiǎn)單,部署方便,成熟穩(wěn)定。
  • 缺點(diǎn):寫操作存在單點(diǎn)瓶頸,主庫宕機(jī)將導(dǎo)致整個(gè)集群無法寫入。在異地場(chǎng)景下,跨地域的復(fù)制延遲會(huì)非常明顯,容易讀到舊數(shù)據(jù)。

注意:在異地多活架構(gòu)中,單純的主從復(fù)制幾乎不可用。 因?yàn)樗鼰o法實(shí)現(xiàn)多點(diǎn)寫入,一旦主庫所在的數(shù)據(jù)中心發(fā)生故障,業(yè)務(wù)將直接中斷,這與多活的目標(biāo)背道而馳。

b. 多主復(fù)制 (Multi-Master Replication)

為了解決單點(diǎn)寫入問題,多主復(fù)制應(yīng)運(yùn)而生。它允許多個(gè)數(shù)據(jù)中心都部署可寫入的主庫,每個(gè)主庫都能處理寫請(qǐng)求,并通過某種機(jī)制在多個(gè)主庫之間同步數(shù)據(jù)。

?流程圖:

?優(yōu)點(diǎn):實(shí)現(xiàn)了多點(diǎn)寫入,單個(gè)數(shù)據(jù)中心故障不影響其他中心的寫入能力。

?缺點(diǎn):最大的噩夢(mèng)是“沖突”。如果兩個(gè)數(shù)據(jù)中心的用戶同時(shí)修改了同一條記錄,聽誰的?解決沖突的邏輯非常復(fù)雜,常見的策略有“時(shí)間戳優(yōu)先”、“按數(shù)據(jù)中心權(quán)重”等,但沒有一種是完美的。

注意:多主復(fù)制對(duì)數(shù)據(jù)庫中間件或數(shù)據(jù)庫本身的能力要求極高。 比如MySQL的Galera Cluster可以實(shí)現(xiàn)多主同步,但通常建議在局域網(wǎng)內(nèi)使用,跨地域的廣域網(wǎng)延遲會(huì)急劇放大它的“腦裂”風(fēng)險(xiǎn)和性能問題。

2. 基于消息隊(duì)列 (MQ) 的同步方案

如果說數(shù)據(jù)庫同步是“硬碰硬”的剛性同步,那么基于MQ的方案則是一種柔性、解耦的異步同步。它將數(shù)據(jù)變更作為“消息”,通過MQ這個(gè)中間件系統(tǒng)投遞到其他數(shù)據(jù)中心。

?流程:

  • 捕獲變更:業(yè)務(wù)系統(tǒng)在完成本地?cái)?shù)據(jù)庫寫入后,或者通過Canal等工具監(jiān)聽數(shù)據(jù)庫的Binlog,將數(shù)據(jù)變更(如訂單創(chuàng)建、狀態(tài)更新)封裝成消息。
  • 投遞消息:將消息發(fā)送到MQ集群。
  • 跨地域復(fù)制:MQ集群自身具備跨地域復(fù)制能力(如Kafka的MirrorMaker,RocketMQ的Dledger多副本),將消息同步到異地的數(shù)據(jù)中心。
  • 消費(fèi)數(shù)據(jù):異地?cái)?shù)據(jù)中心的消費(fèi)者服務(wù)從MQ中拉取消息,并將其寫入本地?cái)?shù)據(jù)庫。

流程圖:

優(yōu)點(diǎn):

?業(yè)務(wù)解耦:數(shù)據(jù)同步的邏輯從核心業(yè)務(wù)中剝離,降低了系統(tǒng)復(fù)雜度。

?削峰填谷:MQ能夠緩沖瞬時(shí)的高并發(fā)寫入,保護(hù)下游系統(tǒng)。

?天然異步:非常適合對(duì)延遲不那么敏感,但要求最終一致性的場(chǎng)景。

缺點(diǎn):

?延遲較高:整個(gè)鏈路(生產(chǎn)->MQ復(fù)制->消費(fèi)->寫入)比數(shù)據(jù)庫同步要長(zhǎng)。

?一致性保證:需要處理消息的可靠投遞、冪等消費(fèi)等問題,否則容易出現(xiàn)數(shù)據(jù)丟失或重復(fù)。

注意:MQ方案的核心在于保證消息的順序性和可靠性。 對(duì)于像訂單狀態(tài)流轉(zhuǎn)這類嚴(yán)格依賴順序的業(yè)務(wù),必須保證消息按主鍵(如訂單ID)有序。Kafka的分區(qū)(Partition)和RocketMQ的消息組(Message Group)就是為此設(shè)計(jì)的。

3. 基于分布式數(shù)據(jù)存儲(chǔ)的同步方案

這類方案直接采用天生為分布式而生的存儲(chǔ)系統(tǒng),如TiDB、CockroachDB等NewSQL數(shù)據(jù)庫,或者使用CRDT(無沖突復(fù)制數(shù)據(jù)類型)理論。它們?cè)谠O(shè)計(jì)之初就考慮了跨地域部署和數(shù)據(jù)同步問題。

a. NewSQL數(shù)據(jù)庫

以TiDB為例,它采用Raft一致性協(xié)議。Raft協(xié)議通過選舉一個(gè)Leader節(jié)點(diǎn)來處理寫請(qǐng)求,并將日志復(fù)制到多個(gè)Follower節(jié)點(diǎn),只有當(dāng)大多數(shù)節(jié)點(diǎn)確認(rèn)后,寫操作才算成功。

Raft工作簡(jiǎn)圖:

在異地多活部署時(shí),可以將Raft Group的成員分散在不同數(shù)據(jù)中心。

?優(yōu)點(diǎn):將數(shù)據(jù)同步的復(fù)雜性下沉到存儲(chǔ)層,對(duì)業(yè)務(wù)層透明。提供了金融級(jí)的強(qiáng)一致性保證,且具備水平擴(kuò)展能力。

?缺點(diǎn):部署和運(yùn)維復(fù)雜度較高,對(duì)技術(shù)團(tuán)隊(duì)要求高。相比傳統(tǒng)單機(jī)數(shù)據(jù)庫,在同城網(wǎng)絡(luò)下性能可能有一定損耗。

注意:使用NewSQL時(shí),必須仔細(xì)規(guī)劃數(shù)據(jù)中心和副本的布局。 為了在保證高可用的同時(shí)優(yōu)化性能,通常會(huì)將Leader和兩個(gè)Follower部署在同城或網(wǎng)絡(luò)延遲極低的主備中心,另外兩個(gè)Follower部署在異地中心,作為災(zāi)備和異地讀節(jié)點(diǎn)。這是一種典型的“三地五中心”部署模式。

b. CRDT (Conflict-free Replicated Data Type)

CRDT是一種數(shù)學(xué)上能保證合并操作滿足交換律、結(jié)合律和冪等律的數(shù)據(jù)結(jié)構(gòu)。簡(jiǎn)單來說,無論你以何種順序、多少次合并來自不同副本的更新,最終結(jié)果都是一致的,從而天然地避免了沖突。

?例子:一個(gè)基于CRDT的計(jì)數(shù)器(Counter)。

傳統(tǒng)計(jì)數(shù)器:A中心+1,B中心+1。如果初始值是0,A、B各自的本地值都變成1。同步時(shí),A把1發(fā)給B,B把1發(fā)給A,最后結(jié)果是1,錯(cuò)誤!

CRDT計(jì)數(shù)器:每個(gè)副本只能增加自己的計(jì)數(shù)值。A中心的計(jì)數(shù)器是{A:1, B:0},B中心是{A:0, B:1}。同步時(shí)合并兩者,最終結(jié)果是{A:1, B:1},總和為2,正確!

?優(yōu)點(diǎn):真正實(shí)現(xiàn)了多點(diǎn)任意寫入且無沖突,非常適合協(xié)作編輯、社交網(wǎng)絡(luò)點(diǎn)贊計(jì)數(shù)等場(chǎng)景。

?缺點(diǎn):模型相對(duì)抽象,并非所有數(shù)據(jù)類型都能輕易地用CRDT表示。目前成熟的、通用的CRDT數(shù)據(jù)庫產(chǎn)品還不多。

升華一下:如何選擇合適的方案?

沒有銀彈。至于選擇哪種方案,完全取決于你的業(yè)務(wù)場(chǎng)景、一致性要求和成本預(yù)算。

  • 讀多寫少,對(duì)延遲容忍度低的核心交易:優(yōu)先考慮基于NewSQL的方案。雖然成本高,但它為業(yè)務(wù)提供了最強(qiáng)的保障和最簡(jiǎn)單的開發(fā)模型。
  • 寫操作頻繁,但對(duì)實(shí)時(shí)一致性要求不高:基于MQ的異步方案是最佳選擇。它性價(jià)比高,擴(kuò)展性好,是互聯(lián)網(wǎng)應(yīng)用處理海量非核心數(shù)據(jù)的首選。
  • 需要多點(diǎn)寫入,但能通過業(yè)務(wù)規(guī)則規(guī)避沖突:可以謹(jǐn)慎嘗試數(shù)據(jù)庫多主復(fù)制,但必須有強(qiáng)大的DBA團(tuán)隊(duì)和完善的沖突解決預(yù)案。
  • 特定領(lǐng)域的協(xié)作應(yīng)用:CRDT是未來的一個(gè)方向,值得關(guān)注和在小范圍嘗試。

最終,一個(gè)成熟的異地多活架構(gòu),往往是多種方案的組合體。 比如,核心交易數(shù)據(jù)(如賬戶余額)走NewSQL,普通業(yè)務(wù)數(shù)據(jù)(如用戶日志)走M(jìn)Q,基礎(chǔ)配置數(shù)據(jù)(很少變更)走數(shù)據(jù)庫主從復(fù)制。這種分而治之、因地制宜的混合架構(gòu),才是高階架構(gòu)師真正的智慧所在。

責(zé)任編輯:武曉燕 來源: 架構(gòu)師修行之路
相關(guān)推薦

2025-04-27 02:33:00

epoll核心機(jī)制服務(wù)器

2025-03-24 00:11:05

IO模型計(jì)算機(jī)

2025-03-25 09:06:11

2020-03-31 14:40:24

HashMap源碼Java

2020-05-10 18:02:42

機(jī)器學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)深度學(xué)習(xí)

2021-02-24 10:05:07

架構(gòu)運(yùn)維技術(shù)

2016-08-18 00:21:12

網(wǎng)絡(luò)爬蟲抓取網(wǎng)絡(luò)

2019-03-01 09:05:58

JavaJDK收費(fèi)

2023-11-28 07:45:48

Rust自動(dòng)化測(cè)試

2025-07-11 01:45:00

SIM卡模塊識(shí)別

2024-08-12 12:30:27

2019-07-01 09:22:15

Linux操作系統(tǒng)硬件

2019-05-22 09:50:42

Python沙箱逃逸網(wǎng)絡(luò)攻擊

2021-08-02 06:56:19

TypeScript編程語言編譯器

2025-01-20 09:15:00

iOS 18.3蘋果iOS 18

2017-04-19 08:32:50

大數(shù)據(jù)數(shù)據(jù)可視化編程工具

2019-11-24 19:17:06

MySQL異步復(fù)制全同步復(fù)制

2017-11-28 15:20:27

Python語言編程

2021-02-08 22:23:16

云計(jì)算辦公硬件
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)