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