【轉】數據跨機房同步方案(異地多活)


一、背景

中國大陸用戶主要分布在南北,南北數據一般專線延遲是60~100ms,所以為了提高用戶體驗一般設置南北機房,整個架構為雙A,兩邊均可寫,可以極大的提升用戶體驗。

因此某服務主要分為南北機房,每個機房都擁有全量數據,用戶在北方修改數據會同步到南方,南方修改數據會同步到北方。

數據主要分為緩存數據和DB數據,這個數據同步就成了問題,怎么保證最終一致性呢?強一致性就算了!(強一致性的保證成本過高,需要特殊場景特殊設計,我認為是很難歸納出通用方案的)

二、通常的架構

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

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

三、會出現的問題

數據同步永遠都躲不過的一致性問題。

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


跨機房的DB之間不一致
1、otter同步一般在700~2000ms之間波動,因為數據庫同步會受到搶鎖,數據校驗,磁盤IO的影響,那么就會出現短暫DB數據不一致;
2、極小幾率出現otter數據同步失敗,otter有對應機制降低這種錯誤幾率。(如果真的不一致只能由業務做補償操作)


同機房的緩存和DB短暫不一致
1、mq同步緩存的時間比otter同步速度快,短暫時間內不一致,數據到達后保證最終一致;
2、北方緩存同步到了南方,但是緩存過期了再次獲取DB數據的時候,otter還沒有同步數據過來,緩存就會還是拿到了舊數據,因此也有幾率出現數據短暫不一致。(這時候很需要延遲mq,延遲同步南北緩存,寧願數據跨機房不一致,也不要同機房不一致)



作者:taojian
鏈接:https://www.jianshu.com/p/62f1ba1c2dce
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM