什么是cap模式?
是一種定理,多用于描述分布式架構(gòu),CAP這三個字母對應(yīng)三種理念,且這三種理念只能兩兩組合,不能CAP三種理念同時共存(為什么?下面說)。
C:Consisteny(一致性)
A:Availability(可用性)
P:Partition Tolerance(分區(qū)容錯性)
?
2. 細(xì)說CAP
C:Consisteny(一致性),比如數(shù)據(jù)庫是主從模式,一個寫庫請求進來了,master庫完成了寫入操作,但是再slave同步數(shù)據(jù)之前,另一個用戶查了這條數(shù)據(jù),結(jié)果沒查到,但是也沒報錯,這就不是強一致性。雖然最終會同步成功,但這是最終一致性的體現(xiàn)。強一致性的體現(xiàn)在于我不管你因為什么沒同步成功(可能網(wǎng)絡(luò)延遲或其他等),只要沒同步成功,我這個slave就不能對外提供服務(wù)。必須主從數(shù)據(jù)一致才可以提供服務(wù)。(很少有做到這點的)
A:Availability(可用性),還是上面的例子,就是保證了可用性。因為雖然主從沒同步完成,但是我從庫照樣能提供服務(wù)而且及時響應(yīng)結(jié)果。也就是說可用性保證服務(wù)可用,而不在乎數(shù)據(jù)是否一致。明顯和C是沖突的,那CA怎么還能組合到一起?后面說。
P:Partition Tolerance(分區(qū)容錯性),集群部署了三臺服務(wù)。掛了一臺,其他兩臺還能繼續(xù)對外提供服務(wù),這時候我就認(rèn)為他是沒問題的,也就是我能容忍你掛了一臺,只要還有服務(wù)能對外提供請求即可。所以一般分區(qū)容忍性是必須的,一般都需要從C和A之間做選擇。
3. CAP組合
CP
即一致性和分區(qū)容忍性。
?
把節(jié)點A和節(jié)點B理解成mysq主從的話,那么就是A和B之間不能互相通訊,網(wǎng)絡(luò)出問題了,當(dāng)有客戶端向A寫入msg1的時候,會直接失敗,因為C要保證A和B兩個節(jié)點之間的數(shù)據(jù)強一致性。
假如有另一個客戶端向B節(jié)點進行讀取msg2消息的時候,B返回是成功的,因為msg2節(jié)點是A和B之間網(wǎng)絡(luò)通順時存在的老數(shù)據(jù),數(shù)據(jù)是一致的。這就是雖然你A不可用,但是我B還能提供服務(wù),這就保證了分區(qū)容忍性。
AP
即可用性和分區(qū)容忍性。
?
節(jié)點A和B之間不能互相通訊,當(dāng)有客戶端向A節(jié)點寫入msg1的時候,節(jié)點A允許 寫入,請求操作成功,但此時由于A和B不能通信,所以導(dǎo)致B節(jié)點的msg1的數(shù)據(jù)是舊的,或者根本不存在。但是另一個客戶端向B節(jié)點讀取msg1的時候是可以成功的,要么讀到的是舊數(shù)據(jù)要么讀取不到。但是服務(wù)是可用的,只是數(shù)據(jù)可能有問題。這就保證了可用性,舍棄了強一致性。
CA
CA的話我只能想到單機上是可以保證的,一臺機器數(shù)據(jù)肯定一致,服務(wù)肯定可用。不可用的時候服務(wù)也不能用,也能保證一致性。單臺機器也沒有分區(qū)容錯性的概念。所以完美CA。
4. Base理論
Base理論是對CAP理論的延申,核心思想就說既然無法做到強一致性(CAP中的C),但是可以采取合適的方式達(dá)到最終一致性。
Base的全稱是:Basically Available(基本可用)、Soft State(軟狀態(tài))、Eventual Consistency(最終一致性)。
Basically Available(基本可用)
指分布式系統(tǒng)再出現(xiàn)故障的時候,允許損失部分可用性,即保證核心可用。比如電商大促時,為了應(yīng)對訪問量激增,部分用戶可能會被引導(dǎo)到降級頁面,服務(wù)層也可能只提供降級服務(wù),這就是損失部分可用性的體現(xiàn)。
Soft State(軟狀態(tài))
指系統(tǒng)允許存在中間狀態(tài),而這個中間狀態(tài)不會影響系統(tǒng)整體可用性。比如分布式存儲中一般一份數(shù)據(jù)至少會有三個副本,允許不同節(jié)點間副本同步的延遲就是軟狀態(tài)的體現(xiàn)。
Eventual Consistency(最終一致性)
指系統(tǒng)中的所有數(shù)據(jù)副本經(jīng)過一定時間后最終能夠達(dá)到一致的狀態(tài)。也是弱一致性的體現(xiàn)。