1. 程式人生 > >CAP理論

CAP理論

同步 節點 這一 cap理論 enc div cap 保存 復制

分布式領域CAP理論,
Consistency(一致性), 數據一致更新,所有數據變動都是同步的
Availability(可用性), 好的響應性能
Partition tolerance(分區容忍性) 可靠性

C:集群中所有機器狀態是一致的。
A:客戶端訪問集群中任意一個節點,總能得到"處理成功"的結果

假設有五個節點:n1~n5 ,出現網絡分區被分成兩組:[n1~n2]和[n3~n5],那麽當n1出來客戶端請求時(為了處理這種情況,也就是說"容忍網絡分區",即支持 P):

1:如果要保證C(一致性),那麽它需要把消息復制到所有節點,但是網絡分區導致無法成功復制到n3~n5,所以它只能返回"處理失敗"的結果給客戶端。(這時系統就處於不可用狀態,即喪失了A

2:如果要保證可用性A,那麽n1就只能把消息復制到n2,而不用復制到n3~n5(或者無視復制失敗/超時),但n3同時也可能在處理客戶端請求(譬如對同一個值進行修改),n3也為了保證A而做了同樣的處理。 那麽 [n1~n2]和[n3~n5]的狀態就不一致了,於是就喪失了 C



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

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

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

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

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


CAP理論