CAP原則又稱CAP定理臼婆,指的是在一個分布式系統(tǒng)中亿遂, Consistency(一致性)桶蛔、 Availability(可用性)哈蝇、Partition tolerance(分區(qū)容錯性),三者不可得兼。
一致性(C):在分布式系統(tǒng)中的所有數(shù)據(jù)備份,在同一時刻是否同樣的值言秸。(等同于所有節(jié)點訪問同一份最新的數(shù)據(jù)副本)
可用性(A):在集群中一部分節(jié)點故障后,集群整體是否還能響應(yīng)客戶端的讀寫請求迎捺。(對數(shù)據(jù)更新具備高可用性)
分區(qū)容忍性(P):以實際效果而言举畸,分區(qū)相當(dāng)于對通信的時限要求。系統(tǒng)如果不能在時限內(nèi)達(dá)成數(shù)據(jù)一致性凳枝,就意味著發(fā)生了分區(qū)的情況抄沮,必須就當(dāng)前操作在C和A之間做出選擇。
CAP原則的精髓就是要么AP岖瑰,要么CP叛买,要么AC,但是不存在CAP锭环。如果在某個分布式系統(tǒng)中數(shù)據(jù)無副本聪全, 那么系統(tǒng)必然滿足強一致性條件泊藕, 因為只有獨一數(shù)據(jù)辅辩,不會出現(xiàn)數(shù)據(jù)不一致的情況,此時C和P兩要素具備娃圆,但是如果系統(tǒng)發(fā)生了網(wǎng)絡(luò)分區(qū)狀況或者宕機玫锋,必然導(dǎo)致某些數(shù)據(jù)不可以訪問,此時可用性條件就不能被滿足讼呢,即在此情況下獲得了CP系統(tǒng)撩鹿,但是CAP不可同時滿足。
因此在進(jìn)行分布式架構(gòu)設(shè)計時悦屏,必須做出取舍节沦。當(dāng)前一般是通過分布式緩存中各節(jié)點的最終一致性來提高系統(tǒng)的性能键思,通過使用多節(jié)點之間的數(shù)據(jù)異步復(fù)制技術(shù)來實現(xiàn)集群化的數(shù)據(jù)一致性。通常使用類似 memcached 之類的 NOSQL 作為實現(xiàn)手段甫贯。雖然 memcached 也可以是分布式集群環(huán)境的吼鳞,但是對于一份數(shù)據(jù)來說,它總是存儲在某一臺 memcached 服務(wù)器上叫搁。如果發(fā)生網(wǎng)絡(luò)故障或是服務(wù)器死機赔桌,則存儲在這臺服務(wù)器上的所有數(shù)據(jù)都將不可訪問。由于數(shù)據(jù)是存儲在內(nèi)存中的渴逻,重啟服務(wù)器疾党,將導(dǎo)致數(shù)據(jù)全部丟失。當(dāng)然也可以自己實現(xiàn)一套機制惨奕,用來在分布式 memcached 之間進(jìn)行數(shù)據(jù)的同步和持久化雪位,但是實現(xiàn)難度是非常大的。