數據高可用之異地多活

高可用的解決方案

  • 異地多活是服務高可用的一種解決方案,具體為在不同城市建立數據中心,即數據機房,然後各數據中心之間互相同步數據,相對於“冷備”而言,“多活”是指任意一個數據中心宕機了,可以馬上切換到另外一個數據中心,繼續提供服務,如修改負載均衡器的配置,將流量切換到另外一個機房。
  • 除了高可用外,異地多活還可以使不同地區的用戶訪問不同的數據中心,提高了訪問速度,從而提高了用戶體驗。
數據高可用之異地多活

適用的業務類型

  • 異地多活一般適合於能容忍數據存在短暫不一致的業務,如用戶中心,但是像金錢之類的業務則不太適合,如假如用戶剛好取完錢,對應的數據中心掛了,沒有同步到其他數據中心,則用戶在訪問另外一個機房,發現錢還是一樣,故會給公司帶來嚴重損失。
  • 在業務落地時,同一個業務整個流程在一個機房完成,將整個業務流程的數據打包同步到其他機房。

數據一致性:最終一致性

  • 異地多活由於需要通過網絡在各個數據中心之間相互同步數據,而網絡是不穩定的,可能存在網絡故障或者抖動,並且兩個城市之間的網絡傳輸一般需要幾十毫秒,網絡不穩定時可能是幾秒或者幾十秒,所以各個數據中心的數據不可能做到實時一致性,即異地多活實現的是CAP理論裡面的AP,不是數據強一致性,而是數據最終一致性。

數據同步的幾種方案

  1. 使用MySQL,Redis自帶的主從同步,不過可能存在較大延遲,MySQL是基於binlog使用單線程進行復制的,Redis可能存在全量複製;
  2. 使用mq廣播到各個數據中心,如使用kafka,每個數據中心都是不同的消費者組;
  3. 回源查找,當A機房發現沒有數據時,去B機房查找;
  4. 重新生成數據,如A機房掛了,導致session數據丟失,則切換到B機房後,重新生成這條數據。


分享到:


相關文章: