淺談 CAP 理論

原文同步至 http://waylau.com/cap-theorem/數據庫


本文介紹了介紹了分佈式系統著名的 CAP 理論。什麼是 CAP 理論?爲何說 CAP 只能三選二?瞭解 CAP 對於系統架構又有什麼指導意義?本文將一一做答。緩存

什麼是 CAP 理論

在計算機科學理論,CAP 定理(也稱爲 Brewer 定理),是由計算機科學家 Eric Brewer 提出的,即在分佈式計算機系統不可能同時提供如下所有三個保證:安全

  • 一致性(Consistency):全部節點同一時間看到是相同的數據;
  • 可用性(Availability):無論是否成功,確保每個請求都能接收到響應;
  • 分區容錯性(Partition tolerance):系統任意分區後,在網絡故障時,仍能操做

爲何說 CAP 只能三選二

下面分別舉例說明了爲何說 CAP 只能三選二。網絡

上面的圖顯示了在一個網絡中,N1 和 N2 兩個節點。他們都共享數據塊 V,其中有一個值 V0 。運行在 N1 的 A 程序能夠認爲是安全的、無 bug、可預測的和可靠的。運行在 N2 是 B 程序。這個例子中,A 將寫入 V 新​值,而 B 從 V 讀取值架構

系統預期執行下面的操做分佈式

  1. 首先寫一個 V 的新​值 V1
  2. 而後消息(M)從 N1 更新 V 的拷貝到 N2
  3. 如今,從 B 讀取將返回 V1

若是網絡是分區的,當 N1 到 N2 的消息不能傳遞時,執行上面的第三步,會出現雖然 N2 能訪問到 V 的值(可用性),但其實與 N1 的 V 的值已經不一致了(一致性)。網站

CAP 常見模型

犧牲分區(CA 模型)

舉例:rem

  • 單站點數據庫
  • 集羣數據庫
  • LDAP
  • xFS 文件系統

實現方式:部署

  • 兩階段提交
  • 緩存驗證協議

犧牲可用性(CP 模型)

舉例:get

  • 分佈式數據庫
  • 分佈式鎖定
  • 絕大部分協議

實現方式:

  • 悲觀鎖
  • 少數分區不可用

犧牲一致性(AP 模型)

舉例:

  • Coda
  • Web 緩存
  • DNS

實現方式:

  • 到期/租賃
  • 解決衝突
  • 樂觀

CAP 的意義

在系統架構時,應該根據具體的業務場景,來權衡 CAP。好比,對於大多數互聯網應用來講(如門戶網站),由於機器數量龐大,部署節點分散,網絡故障是常態,可用性是必須須要保證的,因此只有捨棄一致性來保證服務的 AP。而對於銀行等,須要確保一致性的場景,一般會權衡 CA 和 CP 模型,CA 模型網絡故障時徹底不可用,CP 模型具有部分可用性。

參考引用

相關文章
相關標籤/搜索