系列文章 -> 分佈式理論html
在理論計算機科學中,CAP定理(CAP theorem),又被稱做布魯爾定理(Brewer's theorem),它指出對於一個分佈式計算系統來講,不可能同時知足如下三點git
選項 | 具體意義 |
---|---|
一致性(Consistency) | 全部節點訪問同一份最新的數據副本 |
可用性(Availability) | 每次請求都能獲取到非錯的響應,可是不保證獲取的數據爲最新數據 |
分區容錯性(Partition tolerance) | 分佈式系統在遇到任何網絡分區故障的時候,仍然可以對外提供知足一致性和可用性的服務,除非整個網絡環境都發生了故障 |
而CAP指的就是上述三個指標的首字母github
這裏指的是強一致性,而最終一致性後續討論
在寫操做完成後開始的任何讀操做都必須返回該值,或者後續寫操做的結果
也就是說,在一致性系統中,一旦客戶端將值寫入任何一臺服務器並得到響應,那麼以後client從其餘任何服務器讀取的都是剛寫入的數據算法
用以下系統進行解釋segmentfault
系統中非故障節點收到的每一個請求都必須有響應
在可用系統中,若是咱們的客戶端向服務器發送請求,而且服務器未崩潰,則服務器必須最終響應客戶端,不容許服務器忽略客戶的請求安全
容許網絡丟失從一個節點發送到另外一個節點的任意多條消息,即不一樣步
也就是說,G1和G2發送給對方的任何消息都是能夠放棄的,也就是說G1和G2可能由於各類意外狀況,致使沒法成功進行同步,分佈式系統要能容忍這種狀況。服務器
假設確實存在三者能同時知足的系統網絡
很明顯,G1返回的是v1數據,G2返回的是v0數據,二者不一致。
其他狀況也有相似推導,也就是說CAP三者不能同時出現。分佈式
權衡三者的關鍵點取決於業務
放棄了一致性,知足分區容錯,那麼節點之間就有可能失去聯繫,爲了高可用,每一個節點只能用本地數據提供服務,而這樣會容易致使全局數據不一致性。對於互聯網應用來講(如新浪,網易),機器數量龐大,節點分散,網絡故障再正常不過了,那麼此時就是保障AP,放棄C的場景,而從實際中理解,像門戶網站這種偶爾沒有一致性是能接受的,但不能訪問問題就很是大了。post
對於銀行來講,就是必須保證強一致性,也就是說C必須存在,那麼就只用CA和CP兩種狀況,當保障強一致性和可用性(CA),那麼一旦出現通訊故障,系統將徹底不可用。另外一方面,若是保障了強一致性和分區容錯(CP),那麼就具有了部分可用性。實際究竟應該選擇什麼,是須要經過業務場景進行權衡的(並非全部狀況都是CP好於CA,只能查看信息但不能更新信息有時候還不如直接拒絕服務)
CAP原則(CAP定理)、BASE理論
分佈式理論(一) - CAP定理
CAP定理
An Illustrated Proof of the CAP Theorem
分佈式系統的一致性協議之 2PC 和 3PC