天天看點

分布式理論:CAP定理

CAP 定理

2000 年7月的時候,加州大學伯克利分校的Eric Brewer 教授提出了 CAP 猜想,2年後,被 來自于麻省理工 的Seth Gilbert 和 Nancy Lynch 從理論上證明了猜想的可能性,從此,CAP 定理正式在學術上成為了分布式 計算領域的公認定理。并深深的影響了分布式計算的發展。

CAP 理論含義是,一個分布式系統不可能同時滿足一緻性(C:Consistency),可用性(A: Availability)和分區容錯 性(P:Partition tolerance)這三個基本需求,最多隻能同時滿足其中的2個。

選項 描述
C 一緻性 分布式系統當中的一緻性指的是所有節點的資料一緻,或者說是所有副本的資料一緻
A 可用性 Reads and writes always succeed. 也就是說系統一直可用,而且服務一直保持正常
P 分區容錯性 系統在遇到一些節點或者網絡分區故障的時候,仍然能夠提供滿足一緻性和可用性的服務

CAP詳細說明

分布式理論:CAP定理

我們拿上面的商品服務簡要說明

  • C - Consistency
一緻性是值寫操作後讀操作可以讀到最新的資料狀态,當資料分布在多個節點上時,從任意節點讀取到的資料都是最新的.

商品資訊讀寫要滿足一緻性需要實作如下目标:

1.商品服務寫入主資料庫成功, 則想從資料庫查詢資料也成功

2.商品服務寫入主資料庫失敗,則向從資料庫查詢也失敗

如何實作一緻性?

1.寫入主資料庫後要資料同步到從資料庫

2.寫入主資料庫後,在向從資料庫同步期間要将從資料庫鎖定, 等待同步完成後在釋放鎖,以免在寫新資料後,向從資料 庫查詢到舊的資料.

分布式一緻性的特點:

1.由于存在資料庫同步過程,寫操作的響應會有一定的延遲

2.為了保定資料的一緻性,對資源暫時鎖定,待資料同步完成後釋放鎖定資源

3.如果請求資料同步失敗的節點則會傳回錯誤資訊, 一定不會傳回舊資料.

  • A - Availability
可用性是指任何操作都可以得到響應的結果,且不會出現響應逾時或響應錯誤。

商品資訊讀寫要滿足可用性需要實作如下目标:

1.從資料庫接收到資料庫查詢的請求則立即能夠響應資料查詢結果

2.從資料庫不允許出現響應逾時或錯誤

如何實作可用性?

1.寫入主資料庫後要将資料同步到從資料

2.由于要保證資料庫的可用性,不可以将資料庫中資源鎖定

3.即使資料還沒有同步過來,從資料庫也要傳回查詢資料, 哪怕是舊資料,但不能傳回錯誤和逾時.

  • P - Partition tolerance

分布式系統的各個節點部署在不同的子網中, 不可避免的會出現由于網絡問題導緻節點之間通信失敗,此時仍可以對

外提供服務, 這個就是分區容錯性 (分區容忍性).

商品資訊讀寫要滿足分區容錯性需要實作如下目标:

1.主資料庫向從資料庫同步資料失敗不影響寫操作

2.其中一個節點挂掉不會影響另一個節點對外提供服務

如何實作分區容錯性?

1.盡量使用異步取代同步操作,舉例 使用異步方式将資料從主資料庫同步到從資料庫, 這樣節點之間能有效的實作松 耦合;

2.添加資料庫節點,其中一個從節點挂掉,由其他從節點提供服務

  • 關于CAP這三個特性我們就介紹完了,接下來我們試着證明一下為什麼CAP不能同時滿足。

    假設有一個系統如下:

    分布式理論:CAP定理

有使用者向N1發送了請求更改了資料,将資料庫從V0更新成了V1。由于網絡斷開,是以N2資料庫依然是V0,如果這個時候 有一個請求發給了N2,但是N2并沒有辦法可以直接給出最新的結果V1,這個時候該怎麼辦呢?

這個時候無法兩種方法,一種是将錯就錯,将錯誤的V0資料傳回給使用者。第二種是阻塞等待,等待網絡通信恢複,N2中 的資料更新之後再傳回給使用者。顯然前者犧牲了一緻性,後者犧牲了可用性。

這個例子雖然簡單,但是說明的内容卻很重要。在分布式系統當中,CAP三個特性我們是無法同時滿足的,必然要舍棄一 個。三者舍棄一個,顯然排列組合一共有三種可能。

  1. 舍棄P(分區容錯性),保留CA(一緻性和可用性)
一個系統保證了一緻性和分區容錯性,舍棄可用性。也就是說在極端情況下,允許出現系統無法通路的情況出現,這個 時候往往會犧牲使用者體驗,讓使用者保持等待,一直到系統資料一緻了之後,再恢複服務。
  1. 舍棄C(一緻性),保留AP(可用性和分區容錯性)
這種是大部分的分布式系統的設計,保證高可用和分區容錯,但是會犧牲一緻性。
  1. 舍棄P(分區容錯性),保留CA(一緻性和可用性)
如果要舍棄P,那麼就是要舍棄分布式系統,CAP也就無從談起了。可以說P是分布式系統的前提,是以這種情況是不存在 的。

繼續閱讀