什么是 CAP?
C 代表 Consistency(一致性)
是指所有節(jié)點在同一時刻的數(shù)據(jù)是相同的,即更新操作執(zhí)行結(jié)束并響應(yīng)用戶完成后,所有節(jié)點存儲的數(shù)據(jù)會保持相同。
A 代表 Availability(可用性)
是指系統(tǒng)提供的服務(wù)一直處于可用狀態(tài),對于用戶的請求可即時響應(yīng)。
P 代表 Partition Tolerance(分區(qū)容錯性)
是指在分布式系統(tǒng)遇到網(wǎng)絡(luò)分區(qū)的情況下,仍然可以響應(yīng)用戶的請求。網(wǎng)絡(luò)分區(qū)是指因為網(wǎng)絡(luò)故障導(dǎo)致網(wǎng)絡(luò)不連通,不同節(jié)點分布在不同的子網(wǎng)絡(luò)中,各個子網(wǎng)絡(luò)內(nèi)網(wǎng)絡(luò)正常。
一致性、可用性和分區(qū)容錯性,就是分布式系統(tǒng)的三個特征。那么,我們平時說的 CAP 理論又是什么呢?CAP 理論指的就是,在分布式系統(tǒng)中 C、A、P 這三個特征不能同時滿足,只能滿足其中兩個。

CAP 選擇策略及應(yīng)用
C、A 和 P,沒有誰優(yōu)誰劣,只是不同的分布式場景適合不同的策略。
保 CA 棄 P
在分布式系統(tǒng)中,現(xiàn)在的網(wǎng)絡(luò)基礎(chǔ)設(shè)施無法做到始終保持穩(wěn)定,網(wǎng)絡(luò)分區(qū)(網(wǎng)絡(luò)不連通)難以避免。CA 模型,在分布式系統(tǒng)中不存在。因為舍棄 P,意味著舍棄分布式系統(tǒng),
保 CP 棄 A
如果一個分布式場景需要很強的數(shù)據(jù)一致性,或者該場景可以容忍系統(tǒng)長時間無響應(yīng)的情況下,保 CP 棄 A 這個策略就比較適合。這種策略通常用在涉及金錢交易的分布式場景下,因為它任何時候都不允許出現(xiàn)數(shù)據(jù)不一致的情況,否則就會給用戶造成損失。因此,這種場景下必須保證 CP。
保 AP 棄 C
如果一個分布式場景需要很高的可用性,或者說在網(wǎng)絡(luò)狀況不太好的情況下,該場景允許數(shù)據(jù)暫時不一致,那這種情況下就可以犧牲一定的一致性了。比如,很多查詢網(wǎng)站、電商系統(tǒng)中的商品查詢等,用戶體驗非常重要,所以大多會保證系統(tǒng)的可用性,而犧牲一定的數(shù)據(jù)一致性。
目前,采用保 AP 棄 C 的系統(tǒng)也有很多,比如 CoachDB、Eureka、Cassandra、DynamoDB 等。