分佈式理論 之 CAP 定理

-----------------------------------------------------入巷間吃湯麪 笑看窗邊飛雪.html


 

目錄:數據庫

  1. 什麼是 CAP 定理
  2. 爲何只能 3 選 2
  3. 能不能解決 3 選 2 的問題
  4. 引用

1. 什麼是 CAP 定理

2000 年的時候,Eric Brewer 教授提出了 CAP 猜測,2年後,被 Seth Gilbert 和 Nancy Lynch 從理論上證實了猜測的可能性,今後,CAP 理論正式在學術上成爲了分佈式計算領域的公認定理。並深深的影響了分佈式計算的發展。markdown

CAP 理論告訴咱們,一個分佈式系統不可能同時知足一致性(C:Consistency),可用性(A: Availability)和分區容錯性(P:Partition tolerance)這三個基本需求,最多隻能同時知足其中的2個。網絡

選項 描述
C(Consistence) 一致性,指數據在多個副本之間可以保持一致的特性(嚴格的一致性)。
A(Availability) 可用性,指系統提供的服務必須一直處於可用的狀態,每次請求都能獲取到非錯的響應——可是不保證獲取的數據爲最新數據。
P(Network partitioning 分區容錯性,分佈式系統在遇到任何網絡分區故障的時候,仍然可以對外提供知足一致性和可用性的服務,除非整個網絡環境都發生了故障。

什麼是分區?分佈式

在分佈式系統中,不一樣的節點分佈在不一樣的子網絡中,因爲一些特殊的緣由,這些子節點之間出現了網絡不通的狀態,但他們的內部子網絡是正常的。從而致使了整個系統的環境被切分紅了若干個孤立的區域。這就是分區。post

2. 爲何只能 3 選 2

爲何只能 3 選 2?htm

圖片來自網絡

首先問,能不能同時知足這三個條件?blog

假設有一個系統以下:圖片

整個系統由兩個節點配合組成,之間經過網絡通訊,當節點 A 進行更新數據庫操做的時候,須要同時更新節點 B 的數據庫(這是一個原子的操做)。ip

上面這個系統怎麼知足 CAP 呢?C:當節點A更新的時候,節點B也要更新,A:必須保證兩個節點都是可用的,P:當節點 A,B 出現了網絡分區,必須保證對外可用。

可見,根本完成不了,只要出現了網絡分區,A 就沒法知足,由於節點 A 根本鏈接不上節點 B。若是強行知足 C 原子性,就必須中止服務運行,從而放棄可用性 C。

因此,最多知足兩個條件:

組 合 分析結果
CA 知足原子和可用,放棄分區容錯。說白了,就是一個總體的應用。
CP 知足原子和分區容錯,也就是說,要放棄可用。當系統被分區,爲了保證原子性,必須放棄可用性,讓服務停用。
AP 知足可用性和分區容錯,當出現分區,同時爲了保證可用性,必須讓節點繼續對外服務,這樣必然致使失去原子性。

3. 能不能解決 3 選 2 的問題

難道真的沒有辦法解決這個問題嗎?

CAP 理論已經提出了 13 年,也許能夠作些改變。

仔細想一想,分區是百分之百出現的嗎?若是不出現分區,那麼就可以同時知足 CAP。若是出現了分區,能夠根據策略進行調整。好比 C 沒必要使用那麼強的一致性,能夠先將數據存起來,稍後再更新,實現所謂的 「最終一致性」。

這個思路又是一個龐大的問題,同時也引出了第二個理論 Base 理論,咱們將在後面的文章中詳細介紹。

4. 引用

  1. 《從 Paxos 到 Zookeeper —— 分佈式一致性原理實踐》倪超
  2. CAP理論十二年回顧:"規則"變了
  3. 維基百科CAP定理
相關文章
相關標籤/搜索