10分鐘瞭解分散式CAP、BASE理論

成天發表於2019-07-31

CAP理論

2000年7月,Eric Brewer教授提出CAP猜想;2年後,Seth Gilbert和Nancy Lynch從理論上證明了CAP;之後,CAP理論正式成為分散式計算領域的公認定理。 CAP定律說的是在一個分散式計算機系統中,一致性,可用性和分割槽容錯性這三種保證無法同時得到滿足,最多滿足兩個。 CAP:C :Consistency(一致性)A:(Availability)可用性P:(Partition Tolerance)分割槽容錯性

讓我們構造一個非常簡單的分散式系統。

  • 兩臺伺服器G1和G2
  • 兩臺伺服器可以相互通訊
  • 客戶端可以隨機訪問任何一臺伺服器 

Consistency(一致性)

Gilbert and Lynch 這樣描述的一致性.

any read operation that begins after a write operation completes must return that value, or the result of a later write operation

在寫操作完成之後的任何讀操作都必須返回該值。

客戶端向G1伺服器發起一個寫操作,把變數初始值v0 改為v1,接下來客戶端可能向節點G1讀取也可能向節點G2讀取;

  • 向G1發起一個讀操作,得到更改後的值V1。這就是滿足了一致性 

  • 向G2發起一個讀操作,此時G1向G2傳送同步訊息

  1. 如果同步完成 ,那麼讀到的結果是v1,這樣也滿足了一致性 

  2. 還未同步完成,這是G2還是v0,這就不滿足一致性。

(Partition Tolerance)分割槽容錯

Gilbert and Lynch 這樣描述的分割槽容錯.

the network will be allowed to lose arbitrarily many messages sent from one node to another

網路允許丟失任意多的訊息從一個節點傳送到另外一個節點

在分散式環境中,節點之間的通訊可能出現問題,整個系統就產生所謂的分割槽。所以我們在設計的時候需要考慮這種情況;剩下來的 A和C滿足好,我們就可以說我們的系統有很好的分割槽容錯性。

(Availability)可用性

Gilbert and Lynch 對 availability的描述原文. every request received by a non-failing node in the system must result in a response 系統中非失敗節點收到的每個請求都必須導致響應 在可用性系統中,只要伺服器沒有奔潰,客戶端傳送請求,伺服器必須返回一個相應給客戶端。

為什麼要CAP不能同時滿足

通過上述的定義和描述知道分割槽無法避免,p總是要考慮的。為什麼c和a無法同時做到呢?其實都是分割槽惹的禍。

如果我們保證一致性;那麼G1寫入操作之後,必須保證資料同步給G2之後,G2才能對外提供響應,這顯然就沒有可用性了。

反之 我們保證可用性,那就沒法保證一致性了,既生瑜何生亮的悲劇。

小結

經過上面分析,在分散式系統中,我們一般會選擇AP而犧牲一致性。犧牲並不意味著不關心一致性,而是首先滿足A和P,如何解決C的問題。參考以下BASE理論

BASE 理論

eBay的架構師Dan Pritchett源於對大規模分散式系統的實踐總結,在ACM上發表文章提出BASE理論,BASE理論是對CAP理論的延伸,核心思想是即使無法做到強一致性(StrongConsistency,CAP的一致性就是強一致性),但應用可以採用適合的方式達到最終一致性(Eventual Consitency)。

(Basically Available)基本可用

在分散式系統出現故障的時候,允許損失部分可用性,即保證核心可用。

(Soft State)軟狀態

接受一段時間的狀態不同步,及中間狀態,而改中間狀態不影響系統整體可用性。這裡的中間狀態就是CAP理論中的資料不一致性。

(Eventually Consistent)最終一致性

上面說軟狀態,然後不可能一直是軟狀態,必須有個時間期限。在期限過後系統能夠保證在沒有其他新的更新操作的情況下,資料最終一定能夠達到一致的狀態,因此所有客戶端對系統的資料訪問最終都能夠獲取到最新的值。

總結

CAP是分散式系統設計理論,BASE是CAP理論中AP方案的延伸,對於C我們採用的方式和策略就是保證最終一致性;

參考

英文版的:https://mwhittaker.github.io/blog/an_illustrated_proof_of_the_cap_theorem/

CAP 理論十二年回顧:"規則"變了:https://www.infoq.cn/article/cap-twelve-years-later-how-the-rules-have-changed

CAP 定理的含義:http://www.ruanyifeng.com/blog/2018/07/cap.html

從零開始學架構PDF

相關文章