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。
那么如果不支持P(也就是不容忍網絡分區),也就是說(很樂觀的認為)假設系統不會出現網絡分區。