天天看點

CAP理論

什麼是CAP理論

   在理論計算機科學中,CAP定理(CAP theorem),又被稱作布魯爾定理(Brewer's theorem),它指出對于一個分布式計算系統來說,不可能同時滿足以下三點:

  1. 一緻性(Consistency):同一個資料在叢集中的所有節點,同一時刻是否都是同樣的值。
  2. 可用性(Availability):叢集中一部分節點故障後,叢集整體是否還能處理用戶端的更新請求。
  3. 分區容忍性(Partition tolerance):是否允許資料的分區,分區的意思是指是否允許叢集中的節點之間無法通信。

      上面是維基百科的解釋,簡單的說分布式系統隻能滿足三項中的兩項而不可能滿足全部三項。了解CAP理論的最簡單方式是想象兩個節點分處分區兩側。允許至少一個節點更新狀态會導緻資料不一緻,即喪失了C性質。如果為了保證資料一緻性,将分區一側的節點設定為不可用,那麼又喪失了A性質。除非兩個節點可以互相通信,才能既保證C又保證A,這又會導緻喪失P性質。

  注意這裡的CAP都是确定的定義,如果讨論定義模糊的CAP定理是沒有意義的。例如這裡的C(一緻性)指的就是強一緻性,而不是弱一緻性或者最終一緻性。

CAP理論的實踐背景

    在實際的複雜的系統中分區和叢集是不可避免的,而高可用、資料一緻性是系統設計的目标,有以下三種常見的情況:

  CA:如果不要求P(不允許分區),則C(強一緻性)和A(可用性)是可以保證的。分區是不可避免的,是以CA的系統更多的是允許分區後各子系統依然保持CA。

  CP:如果不要求A(可用),相當于每個請求都需要在Server之間強一緻,而P(分區)會導緻同步時間無限延長,如此CP也是可以保證的。很多傳統的資料庫分布式事務都屬于這種模式。

  AP:要高可用并允許分區,則需放棄一緻性。一旦分區發生,節點之間可能會失去聯系,為了高可用,每個節點隻能用本地資料提供服務,而這樣會導緻全局資料的不一緻性。現在衆多的NoSQL都屬于此類。

  一般情況下不會完全放棄CAP中的某一個,而是根據不同的使用者需求三者之間做一個平衡,例如很多系統為了高可用性和分區容忍性就弱化資料的一緻性,采用弱一緻性或者最終一緻性來實作系統。

  用NRW算法來解決使用者角度的資料一緻性問題:

  假設總共有五個節點(N),我們隻要保證寫入資料的節點數(W)+ 讀取資料的節點數(R)大于總節點數即可。即保證W+R>N,那就能保證對用戶端而言,總是能讀取到它最新寫入的資料。比如,總節點數為5,寫入節點數為3,讀取節點數為3,那我們就能保證用戶端總是能讀取到它最新寫入的資料。有了這樣的資料公式的作為理論保證。我們就可以根據情況靈活選擇W,R了。由于我們不需要保證5台機器全部都寫入成功,隻需要保證3台寫入成功即可。這就意味着,我們允許5台機器中的2台出現問題,也就是提高了系統的可用性。這樣的設計,雖然叢集節點之間,也許有些節點的資料不是最新的,也就是沒有做到CAP中的C,但對使用者來說,資料總是一緻的。是以,利用NRW算法,在滿足AP的前提下,可以做到對使用者而言的資料一緻性。

兩種模型:ACID和BASE

   ACID:傳統關系型資料庫具備的四個特性即原子性(Atomicity)、一緻性(Consistency)、隔離性(Isolation)、持久性(Durability)。這表明了其具有強一緻性和高可用性,但是沒有可分區的特點。

  BASE:Basically Available,Soft state,Eventually consistent,基本可用,軟狀态(狀态可以有一段時間不同步),最終一緻。BASE模型是反ACID模型的,是犧牲資料一緻性來換取高可用。BASE模型的主要實作思想是按功能劃分資料庫、sharding分片。

小結

   CAP理論是分布式系統中遇到的一個問題或者發現的規律,對分布式系統的設計和實作有一定的參考和指導意義。但是理論歸理論,理論還是比較死闆的,CAP理論也是受到了一線工程師們的質疑,為此CAP理論的提出者Lynch還重新發表過論文來解釋。是以在實踐中不能固執于理論,要靈活的處理需求,根據需求解決問題。所謂沒有最好的隻有最适合的。一套分布式系統是非常複雜的,要考慮的不僅僅是CAP這麼簡單,并且沒一套系統都有着特定的應用場景是以并沒有必要滿足所有的條件。不然系統會變的務必複雜而不可控。

參考:

https://zh.wikipedia.org/wiki/CAP%E5%AE%9A%E7%90%86

https://www.douban.com/group/topic/11765014/

http://www.jdon.com/37625

作者:Pickle

出處:http://www.cnblogs.com/wxisme/

聲明:對于轉載分享我是沒有意見的,出于對部落格園社群和作者的尊重一定要保留原文位址哈。

緻讀者:堅持寫部落格不容易,寫高品質部落格更難,我也在不斷的學習和進步,希望和所有同路人一道用技術來改變生活。覺得有點用就點個贊哈。

CAP理論
CAP理論
CAP理論
CAP理論
CAP理論
CAP理論
CAP理論
CAP理論