1. 程式人生 > >分散式系統原理之cap理論

分散式系統原理之cap理論

1.1 CAP理論的含義

  Cap理論表示在分散式系統中一致性(C)、可用性(A)和分割槽容錯性(P)最多隻能同時滿足兩個。
  一致性:客戶端更新資料成功後,在任意時刻,在系統任意對外提供服務的節點,讀取到的資料都是最新寫入的資料。(強一致性)。
  可用性:當系統出現異常時,仍能對外提供服務。
  分割槽容錯:當出現網路分割槽時,系統的容錯能力(機器之間出現網路故障,不能正常通訊)。
  證明cap理論:有兩臺機器M1和M2,為保持一致性,兩臺機器的資料相同,現在客戶端對M1的資料進行更新,但M1和M2之間出現網路故障(分割槽),M的最新資料無法同步到M2,導致M1的資料變為v1,M2仍為v0。現有一客戶端向M2傳送資料讀取請求,對此請求的處理有兩種選擇:

  1. 返回舊資料v0,滿足可用性,但是卻違反了一致性。
  2. 阻塞此次讀操作,直至網路故障恢復,M1的資料v1同步到M2中,滿足一致性,但違反了可用性。

  由於分散式系統天生具有分割槽的特性,所以一定要滿足P,只能在CA中選其一。
Cap理論說明了想設計完全滿足強一致性、可用性和分割槽容錯性的分散式系統是不切實際的,只能在三者之間權衡,為分散式系統的設計提供理論指導。

1.2 一致性的分類

  一致性可從客戶端和服務端兩個角度來看,客戶端一致性定義客戶端怎樣和何時看到資料更新,服務端一致性定義更新時資料如何流經系統及系統對更新有何保證。
  客戶端一致性分為以下幾種:

  1. 強一致性:資料更新之後,任何客戶端在後續的訪問中都能訪問到最新版本的資料。
  2. 弱一致性:資料更新之後,不能保證客戶端的訪問能訪問到最新更新之後的資料,資料更新到所有客戶端可見這段時間稱為不一致視窗。
  3. 最終一致性:最終一致性是種特殊的弱一致性,假如更新資料之後沒有後續的對此資料物件的更新操作,系統保證一段時間之後任何客戶端對此資料物件的訪問都能返回最後一次更新的資料。
  最終一致性有如下變種:
  1. 因果一致性: 如果程序A向程序B傳達它已更新資料項,則程序B的後續訪問將返回更新的值,並且保證寫入將取代先前的寫入。程序C的訪問與程序A沒有因果關係,遵循正常的最終一致性規則。
  2. 讀已之所寫一致性: 程序A在更新資料項之後始終訪問更新的值,並且永遠不會看到較舊的值。這是因果一致性模型的特例
  3. 會話一致性:是讀已之所寫的實際應用版本,程序對系統的訪問存在與一個會話上下文中,在此會話中的訪問遵循讀已之所寫一致性。
  4. 單調讀一致性:程序訪問某一資料物件的值之後,此程序後續的訪問都不會返回更舊版本的值。
  5. 單調寫一致性:系統保證相同程序的一系列寫操作是序列化有序的。
同一個系統中,可以同時滿足多種一致性,例如讀已之所寫和單調讀一致性是常用的組合方案,這兩種一致性使系統更易使用。

  服務端一致性:
  N=儲存資料副本的結點數量
  W=在更新完成之前,需要確認更新成功的副本數量。
  R=當讀操作訪問資料物件,需要訪問的副本數量
  如果W+R>N,寫副本和讀副本會出現重疊,能保證一定能讀到更新後的資料物件,從而保證強一致性。例如:在實現了primary-backup關係資料庫管理系統中,同步副本技術N=2,W=2,R=1,能保證強一致性;非同步副本方式N=2,W=1,R=1, R+W=N,一致性不能得到保證。
  如果W+R<=N, 那麼不能保證強一致性,只能是弱一致性或最終一致性。如在主備RDBMS中,使用非同步同步副本,並開啟從副本讀功能的方式,那麼N=2, W=1和R=1。在這種情況下,R+W=N, 一致性不能得到保證。

1.3 CAP理論的變種(BASE理論)

  BASE理論由CAP理論演化而來,是工業界對分散式系統實踐的總結,其核心思想是即使無法達到強一致性,也要保證滿足最終一致性。
BASE是Basically Available(基本可用)、Soft state(軟狀態)和Eventually consistent(最終一致性)三個短語的簡寫。
  基本可用:當系統發生不可預知故障時,允許損失部分可用性,例如:部分機房故障,允許查詢時間變長(時間上的損失),系統高峰期為保證系統的穩定性,將部分使用者請求引導到降級頁面(功能上的損失)。
  軟狀態:允許系統中的資料存在中間狀態,該中間狀態不會影響系統的整體可用性,即允許多個副本間的同步存在延時。
  最終一致性:系統中資料的副本經過一段時間的同步之後,最終能達到一致性狀態,不要求強一致性。

參考文獻

[1] 分散式系統的CAP理論.https://www.hollischuang.com/archives/666
[2] Vogels W. Eventually consistent[J]. Communications of the ACM, 2009, 52(1): 40-44.
[3] 分散式系統原理九:CAP理論和BASE理論.http://feixiao.github.io/2017/03/14/fbs