CAP原理
任何一個(gè)分布式系統(tǒng)飞涂,只能滿足CAP三個(gè)中的兩個(gè)
CAP分別是什么
Consistency 一致性
一致性
"all nodes see the same data at the same time"兩個(gè)視角
客戶端:多并發(fā)訪問(wèn)時(shí)更新過(guò)的數(shù)據(jù)如何獲炔帧镣奋;
服務(wù)端:如何復(fù)制分布到整個(gè)系統(tǒng),保證數(shù)據(jù)最終一致性三種一致性策略
強(qiáng)一致性:對(duì)于關(guān)系型數(shù)據(jù)庫(kù),更新過(guò)的數(shù)據(jù)能立即被后續(xù)訪問(wèn)看到
弱一致性:能容忍后續(xù)部分或全部訪問(wèn)不到
最終一致性:如果經(jīng)過(guò)一段時(shí)間后要求能訪問(wèn)到更新后的數(shù)據(jù)
CAP理論說(shuō)不能同時(shí)滿足的一致性指的是強(qiáng)一致性
Availability 可用性
"Reads and writes always succeed",服務(wù)一直可用
每一個(gè)可用性的分布式系統(tǒng)咆爽,每一個(gè)非故障節(jié)點(diǎn)必須對(duì)每一個(gè)請(qǐng)求作出響應(yīng)。
一般衡量一個(gè)系統(tǒng)的可用性通過(guò)停機(jī)時(shí)間來(lái)計(jì)算隐圾。
5個(gè)9:可用水平99.999%
Partition Tolerance 分區(qū)容錯(cuò)性
"the system continues to operate despite arbitrary message loss or failure of part of the system"伍掀,分布式系統(tǒng)在遇到某節(jié)點(diǎn)或者網(wǎng)絡(luò)分區(qū)故障時(shí),仍然能夠?qū)ν馓峁M足一致性和可用性服務(wù)暇藏。
簡(jiǎn)單來(lái)說(shuō)蜜笤,就是在網(wǎng)絡(luò)中斷,消息丟失的情況下盐碱,系統(tǒng)依然能夠正常工作把兔。
CAP權(quán)衡
CA without P
- 不存在,網(wǎng)絡(luò)分區(qū)是必然的瓮顽,舍棄P意味著舍棄分布式系統(tǒng)
CP without A
一個(gè)分布式系統(tǒng)容許系統(tǒng)停機(jī)或者長(zhǎng)時(shí)間無(wú)響應(yīng)县好,舍棄A保C
一旦發(fā)生網(wǎng)絡(luò)故障或者消息丟失,犧牲用戶體驗(yàn)暖混,等待所有數(shù)據(jù)全部一致后才可以訪問(wèn)
最典型的缕贡,分布式數(shù)據(jù)庫(kù)。一致性是最基本最重要的條件
分布式存儲(chǔ)系統(tǒng)Redis,HBase,分布式協(xié)調(diào)組件Zookeeper
AP without C
為了保證高可用的圆,需要在用戶訪問(wèn)時(shí)可以馬上得到返回,每個(gè)節(jié)點(diǎn)只能用本地?cái)?shù)據(jù)庫(kù)提供服務(wù)谍倦,這樣會(huì)導(dǎo)致全局?jǐn)?shù)據(jù)的不一致性
大多數(shù)大型互聯(lián)網(wǎng)應(yīng)用,由于主機(jī)眾多泪勒,部署分散昼蛀,集群規(guī)模大,因此節(jié)點(diǎn)故障圆存、網(wǎng)絡(luò)故障是常態(tài)叼旋,需要保證可用性,犧牲一點(diǎn)強(qiáng)一致性沦辙,不會(huì)造成嚴(yán)重的用戶流失
比如:淘寶的購(gòu)物夫植,12306的買(mǎi)票。這里犧牲的是強(qiáng)一致性
怎么取舍
沒(méi)有定論怕轿,根據(jù)場(chǎng)景定奪偷崩,適合的才是最好的。
一般撞羽,涉及到錢(qián)的必須保證C阐斜,網(wǎng)絡(luò)故障寧可停止服務(wù),保證CA诀紊,舍棄P
其他場(chǎng)景普遍做法是選擇AP谒出,舍棄強(qiáng)一致性,退而求其次保證最終一致性