Java學習之路——CAP理論

CAP理論

加州大學伯克利分校 Eric Brewer教授提出一個分佈式系統特性具CAP理論:
在分佈式系統中,是不存在同時滿足一致性 Consistency可用性 Availability分區容錯性 Partition Tolerance三者的。在絕大多數的場景,都需要犧牲強一致性來換取系統的高可用性,系統往往只需要保證最終一致性即可。

Consistency(一致性)
 強一致性就是在客戶端任何時候看到各節點的數據都是一致的(All nodes see the same data at the same time)。

Availability(可用性)
 高可用性就是在任何時候都可以讀寫(Reads and writes always succeed)。

Partition tolerance(分區容錯性)
 分區容錯性是在網絡故障、某些節點不能通信的時候系統仍能繼續工作(The system continue to operate despite arbitrary message loss or failure of part of the the system)。以實際效果而言,分區相當於對通信的時限要求。系統如果不能在時限內達成數據一致性,就意味着發生了分區的情況,必須就當前操作在C和A之間做出選擇。

 

形成原因

一個分佈式系統裏面,節點組成的網絡本來應該是連通的。然而可能因爲一些故障,使得有些節點之間不連通了,整個網絡就分成了幾塊區域。數據就散佈在了這些不連通的區域中。這就叫分區。

當你一個數據項只在一個節點中保存,那麼分區出現後,和這個節點不連通的部分就訪問不到這個數據了。這時分區就是無法容忍的。

提高分區容忍性的辦法就是一個數據項複製到多個節點上,那麼出現分區之後,這一數據項就可能分佈到各個區裏。容忍性就提高了。

然而,要把數據複製到多個節點,就會帶來一致性的問題,就是多個節點上面的數據可能是不一致的。要保證一致,每次寫操作就都要等待全部節點寫成功,而這等待又會帶來可用性的問題。

總的來說就是,數據存在的節點越多,分區容忍性越高,但要複製更新的數據就越多,一致性就越難保證。爲了保證一致性,更新所有節點數據所需要的時間就越長,可用性就會降低。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章