數(shù)據(jù)跨機(jī)房同步方案(異地多活)

一、背景

中國(guó)大陸用戶主要分布在南北,南北數(shù)據(jù)一般專線延遲是60~100ms,所以為了提高用戶體驗(yàn)一般設(shè)置南北機(jī)房,整個(gè)架構(gòu)為雙A,兩邊均可寫,可以極大的提升用戶體驗(yàn)。

因此某服務(wù)主要分為南北機(jī)房,每個(gè)機(jī)房都擁有全量數(shù)據(jù),用戶在北方修改數(shù)據(jù)會(huì)同步到南方,南方修改數(shù)據(jù)會(huì)同步到北方。

數(shù)據(jù)主要分為緩存數(shù)據(jù)和DB數(shù)據(jù),這個(gè)數(shù)據(jù)同步就成了問(wèn)題,怎么保證最終一致性呢?強(qiáng)一致性就算了!(強(qiáng)一致性的保證成本過(guò)高,需要特殊場(chǎng)景特殊設(shè)計(jì),我認(rèn)為是很難歸納出通用方案的)

二、通常的架構(gòu)

南北機(jī)房的緩存用mq同步,而DB用otter同步。

otter是阿里巴巴出的數(shù)據(jù)同步方案:https://github.com/alibaba/otter

三、會(huì)出現(xiàn)的問(wèn)題

數(shù)據(jù)同步永遠(yuǎn)都躲不過(guò)的一致性問(wèn)題。

跨機(jī)房的緩存之間不一致
1、mq同步緩存延遲在60~100ms,必定短暫不一致;
2、mq同步會(huì)出現(xiàn)失敗,必定短暫不一致,但是緩存過(guò)期后會(huì)重新拿DB的數(shù)據(jù),這時(shí)候就可以保證一致,就是所謂的最終一致性。


跨機(jī)房的DB之間不一致
1、otter同步一般在700~2000ms之間波動(dòng),因?yàn)閿?shù)據(jù)庫(kù)同步會(huì)受到搶鎖,數(shù)據(jù)校驗(yàn),磁盤IO的影響,那么就會(huì)出現(xiàn)短暫DB數(shù)據(jù)不一致;
2、極小幾率出現(xiàn)otter數(shù)據(jù)同步失敗,otter有對(duì)應(yīng)機(jī)制降低這種錯(cuò)誤幾率。(如果真的不一致只能由業(yè)務(wù)做補(bǔ)償操作)


同機(jī)房的緩存和DB短暫不一致
1、mq同步緩存的時(shí)間比otter同步速度快,短暫時(shí)間內(nèi)不一致,數(shù)據(jù)到達(dá)后保證最終一致;
2、北方緩存同步到了南方,但是緩存過(guò)期了再次獲取DB數(shù)據(jù)的時(shí)候,otter還沒(méi)有同步數(shù)據(jù)過(guò)來(lái),緩存就會(huì)還是拿到了舊數(shù)據(jù),因此也有幾率出現(xiàn)數(shù)據(jù)短暫不一致。(這時(shí)候很需要延遲mq,延遲同步南北緩存,寧愿數(shù)據(jù)跨機(jī)房不一致,也不要同機(jī)房不一致)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容