1. 程式人生 > 其它 >異地多活設計4大技巧

異地多活設計4大技巧

極客時間:《從 0 開始學架構》:異地多活設計4大技巧

技巧 1:保證核心業務的異地多活

“異地多活”是為了保證業務的高可用,優先實現核心業務的異地多活架構

技巧 2:保證核心資料最終一致性

異地多活本質上是通過異地的資料冗餘,來保證在極端異常的情況下業務也能夠正常提供給使用者,因此資料同步是異地多活架構設計的核心。
資料冗餘是要將資料從 A 地同步到 B 地,從業務的角度來看是越快越好,最好和本地機房一樣的速度最好。因此一個矛盾的地方:業務上要求資料快速同步,但物理很難做到資料的快速同步。有以下幾種方法可參考:

  • 儘量減少異地多活機房的距離,搭建高速網路
  • 儘量減少資料同步,只同步核心業務相關的資料
  • 保證最終一致性,不保證實時一致性
    最終一致性指的是BASE理論中,業務不依賴資料同步的實時性,只要資料最終能一致即可。

技巧 3:採用多種手段同步資料

資料同步是異地多活架構設計的核心。採用如下幾種方式同步資料:

  • 訊息佇列方式
    將資料通過訊息佇列同步到其他業務中心
  • 二次讀取方式
    某些情況下可能出現訊息佇列同步也延遲了,使用者在 A 中心註冊,然後訪問 B 中心的業務,此時 B 中心本地拿不到使用者的賬號資料。為了解決這個問題,B 中心在讀取本地資料失敗時,可以根據路由規則,再去 A 中心訪問一次(這就是所謂的二次讀取,第一次讀取本地,本地失敗後第二次讀取對端),這樣就能夠解決異常情況下同步延遲的問題。
  • 儲存系統同步方式
    通過資料庫的同步機制將資料複製到其他業務中心
  • 回源讀取方式
    對於登入的 session 資料,由於資料量很大,我們可以不同步資料;但當用戶在 A 中心登入後,然後又在 B 中心登入,B 中心拿到使用者上傳的 session id 後,根據路由判斷 session 屬於 A 中心,直接去 A 中心請求 session 資料即可;反之亦然,A 中心也可以到 B 中心去獲取 session 資料。
  • 重新生成資料方式

技巧 4:只保證絕大部分使用者的異地多活

異地多活也無法保證 100% 的業務可用,這是由物理規律決定的,光速和網路的傳播速度、硬碟的讀寫速度、極端異常情況的不可控等,都是無法 100% 解決的。
雖然我們無法做到 100% 可用性,但並不意味著我們什麼都不能做,為了讓使用者心裡更好受一些,我們可以採取一些措施進行安撫或者補償,例如:

  • 掛公告
    說明現在有問題和基本的問題原因,如果不明確原因或者不方便說出原因,可以釋出“技術哥哥正在緊急處理”這類比較輕鬆和有趣的公告。
  • 事後對使用者進行補償
  • 補充體驗

核心思想

異地多活設計的理念可以總結為一句話:採用多種手段,保證絕大部分使用者的核心業務異地多活!