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

一、背景

中國大陸用戶主要分佈在南北,南北數據一般專線延遲是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,延遲同步南北緩存,寧願數據跨機房不一致,也不要同機房不一致)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章