CAP原理指的是,在分布式系統(tǒng)中這三個要素最多只能同時實現(xiàn)兩點,不可能三者兼顧。因此在進(jìn)行分布式架構(gòu)設(shè)計時,必須做出取舍。而對于分布式數(shù)據(jù)系統(tǒng),分區(qū)容忍性是基本要求,否則就失去了價值。因此設(shè)計分布式數(shù)據(jù)系統(tǒng),就是在一致性和可用性之間取一個平衡。對于大多數(shù)Web應(yīng)用,其實并不需要強(qiáng)一致性,因此犧牲一致性而換取高可用性,是目前多數(shù)分布式數(shù)據(jù)庫產(chǎn)品的方向。
1. 一致性(Consistency):數(shù)據(jù)在多個副本之間是否能夠保持一致的特性。(當(dāng)一個系統(tǒng)在一致狀態(tài)下更新后,應(yīng)保持系統(tǒng)中所有數(shù)據(jù)仍處于一致的狀態(tài))
2. 可用性(Availability):系統(tǒng)提供的服務(wù)必須一直處于可用狀態(tài),對每一個操作的請求必須在有限時間內(nèi)返回結(jié)果。
3. 分區(qū)容錯性(Tolerance of network Partition):分布式系統(tǒng)在遇到網(wǎng)絡(luò)分區(qū)故障時,仍然需要保證對外提供一致性和可用性的服務(wù),除非整個網(wǎng)絡(luò)都發(fā)生故障。
為什么只能同時滿足兩個?
例如,服務(wù)器中原本存儲的value=0,當(dāng)客戶端A修改value=1時,為了保證數(shù)據(jù)的一致性,要寫到3個服務(wù)器中,當(dāng)服務(wù)器C故障時,數(shù)據(jù)無法寫入服務(wù)器C,則導(dǎo)致了此時服務(wù)器A、B和C的value是不一致的。這時候要保證分區(qū)容錯性,即當(dāng)服務(wù)器C故障時,仍然能保持良好的一致性和可用性服務(wù),則Consistency和Availability不能同時滿足。為什么呢?
如果滿足了一致性,則客戶端A的寫操作value=1不能成功,這時服務(wù)器中所有value=0。
如果滿足可用性,即所有客戶端都可以提交操作并得到返回的結(jié)果,則此時允許客戶端A寫入服務(wù)器A和B,客戶端C將得到未修改之前的value=0結(jié)果。