1. 程式人生 > >CAP定理

CAP定理

失敗 傳統 實現 設備 設計 應用 常常 enc 詞匯

一、簡介

互聯網高速發展,數據量爆發增長,傳統的單體應用已經不能滿足需要了,這時候分布式系統就應運而生。在分布式系統中,常常提到CAP定理,這個定理也成為了理解分布式應用的起點。

二、CAP

那麽CAP定理指的是什麽呢?

1)C:consistency,即一致性

2)A:availability,即可用性

3)P:partition tolerance,分區容錯性

我們先來看看,這幾個詞匯分別表示什麽意思

1、一致性

一致性就是要求在寫操作完成後,讀操作必須返回寫操作的值。

例如:

  system1和system2分別部署在不同服務器上,system1講用戶user1的名字從marry修改為lay,那麽system2在讀取數據的時候,必須返回lay

2、可用性

可用性就是當對任意系統發起請求,系統必須響應結果

例如:

  system1和system2分別部署在不同的服務器上,用戶隨機對system1發送請求或者對system2其中一臺發送請求,那麽對應的系統必須響應結果。

3、分區容錯性

分區容錯的意思就是分布式系統中的不同服務器之間的通信可能失敗,而系統設計必須考慮到這種情況。

例如:

  system1和system2分別部署在不同的服務器上,system1對system2發起調用請求,而由於網絡等硬件設備問題system1無法調用system2。

三、CAP定理為何不能同時成立?

理解CAP的關鍵點在於理解CAP定理為何三個指標不能同時成立

,也就是說理論上在分布式系統中你可能實現:CA、CP、AP其中一種,但是無法實現CAP同時成立。針對現實角度來說,CAP定理的P(分區容錯性)幾乎是一定成立的,因為網絡不穩定,硬件問題...等因素是無法避免的。所以我們考慮的是選擇CP(一致性、分區容錯性)組合、還是AP(可用性、分區容錯性)組合。

那為什麽C(一致性)和A(可用性)相互排斥呢?

我們思考兩種情況:

1、保證C(一致性)

  system1和system2分別部署在不同的服務器上,如果要保證一致性,那麽system1在執行寫操作的時候就必須防止system2同時出現讀寫操作,所以我們必須把system2鎖定,等到寫入完畢了才允許進行讀寫,來達到一致性的目的。

  可是,在system2被鎖定的時候,如果用戶對system2發起請求,將無法響應結果,也就違反了可用性原則。

2、保證A(可用性)

  那麽如果保證可用性呢?

  system1和system2分別部署在不同的服務器上,由於我們要保證可用性,那麽也就不能在寫入的時候對另外一臺進行加鎖。也就意味著,可能出現兩臺同時執行的情況,那麽數據也就無法保證一致性。

這兩種情況說明,在分區容錯性成立的情況下,保證一致性就無法保證可用性,保證可用性就無法保證一致性。

參考文章:

https://mwhittaker.github.io/blog/an_illustrated_proof_of_the_cap_theorem/

CAP定理