複製原理
複製是保證分佈式系統高可用的基礎,讓一個數據存儲多個副本,當某個副本所在的節點出現故障時,能夠自動切換到其它副本上,從而實現故障恢復。
多個副本通常有一個為主副本,其它為備副本。主副本用來處理寫請求,備副本主要用來處理讀請求,實現讀寫分離。
主副本將同步操作日誌發送給備副本,備副本通過回放操作日誌獲取最新修改。
複製協議
主備副本之間有兩種複製協議,一種是強同步複製協議,一種是異步複製協議。
1. 強同步複製協議
要求主副本將同步操作日誌發給備副本之後進行等待,要求至少一個備副本返回成功後,才開始修改主副本,修改完成之後通知客戶端操作成功。
優點:至少有一個備副本擁有完整的數據,出現故障時可以安全地切換到該備副本,因此一致性好。
缺點:可用性差,因為主副本需要等待,那麼整個分佈式系統的可用時間就會降低。
2. 異步複製協議
主副本將同步操作日誌發給備副本之後不需要進行等待,直接修改主副本並通知客戶端操作成功。
優點:可用性好。
缺點:一致性差。
CAP
分佈式存儲系統不可能同時滿足一致性(C:Consistency)、可用性(A:Availability)和分區容忍性(P:Partition tolerance),最多隻能同時滿足其中兩項。
在設計分佈式系統時,需要根據實際需求弱化某一要求。因此就有了下圖中的三種設計:CA、CP 和 AP。
需要注意的是,分區容忍性必不可少,因為需要總是假設網絡是不可靠的,並且系統需要能夠自動容錯,因此實際上設計分佈式存儲系統需要在一致性和可用性之間做權衡。上一節介紹的強同步協議和異步複製協議就是在一致性和可用性做權衡得到的結果。
BASE
BASE 是 Basically Available(基本可用)、Soft State(軟狀態)和 Eventually Consistent(最終一致性)三個短語的縮寫。BASE 理論是對 CAP 中一致性和可用性權衡的結果,是基於 CAP 定理逐步演化而來的。BASE 理論的核心思想是:即使無法做到強一致性,但每個應用都可以根據自身業務特點,採用適當的方式來使系統達到最終一致性。
1. 基本可用
指分佈式系統在出現故障的時候,保證核心可用,允許損失部分可用性。
例如,電商在做促銷時,服務層可能只提供降級服務,部分用戶可能會被引導到降級頁面上。
2. 軟狀態
指允許系統存在中間狀態,而該中間狀態不會影響系統整體可用性,即不同節點的數據副本之間進行同步的過程允許存在延時。
3. 最終一致性
一致性模型包含以下三種:
- 強一致性:新數據寫入之後,在任何數據副本上都能讀取到最新值;
- 弱一致性:新數據寫入之後,不能保證在數據副本上能讀取到最新值;
- 最終一致性:新數據寫入之後,只能保證過了一個時間窗口後才能在數據副本上讀取到最新值;
強一致性通常運用在需要滿足 ACID 的傳統數據庫系統上,而最終一致性通常運用在大型分佈式系統中。應該注意的是,上面介紹的強同步複製協議和異步複製協議都不能保證強一致性,因為它們是分佈式系統的複製協議。這兩種複製協議如果要滿足最終一致性,還需要多加一些控制。
在實際的分佈式場景中,不同業務單元和組件對一致性的要求是不同的,因此 ACID 和 BASE 往往會結合在一起使用。
更多內容請關注每日編程,每天進步一點。
閱讀更多 每日編程 的文章