CAP理論
2000年7月,加州大學(xué)伯克利分校的Eric Brewer教授在ACM PODC會(huì)議上提出CAP猜想。2年后,麻省理工學(xué)院的Seth Gilbert和Nancy Lynch從理論上證明了CAP。之后,CAP理論正式成為分布式計(jì)算領(lǐng)域的公認(rèn)定理。
CAP理論為:一個(gè)分布式系統(tǒng)最多只能同時(shí)滿足一致性(Consistency)、可用性(Availability)和分區(qū)容錯(cuò)性(Partition tolerance)這三項(xiàng)中的兩項(xiàng)。
一致性(Consistency)
一致性指“all nodes see the same data at the same time”,即更新操作成功并返回客戶端完成后,所有節(jié)點(diǎn)在同一時(shí)間的數(shù)據(jù)完全一致。
可用性(Availability)
可用性指“Reads and writes always succeed”,即服務(wù)一直可用,而且是正常響應(yīng)時(shí)間。
分區(qū)容錯(cuò)性(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ù)。
BASE理論
eBay的架構(gòu)師Dan Pritchett源于對(duì)大規(guī)模分布式系統(tǒng)的實(shí)踐總結(jié),在ACM上發(fā)表文章提出BASE理論,BASE理論是對(duì)CAP理論的延伸,核心思想是即使無(wú)法做到強(qiáng)一致性(Strong Consistency,CAP的一致性就是強(qiáng)一致性),但應(yīng)用可以采用適合的方式達(dá)到最終一致性(Eventual Consitency)。
BASE是指基本可用(Basically Available)、軟狀態(tài)( Soft State)、最終一致性( Eventual Consistency)。
基本可用(Basically Available)
基本可用是指分布式系統(tǒng)在出現(xiàn)故障的時(shí)候,允許損失部分可用性,即保證核心可用。
電商大促時(shí),為了應(yīng)對(duì)訪問(wèn)量激增,部分用戶可能會(huì)被引導(dǎo)到降級(jí)頁(yè)面,服務(wù)層也可能只提供降級(jí)服務(wù)。這就是損失部分可用性的體現(xiàn)。
軟狀態(tài)( Soft State)
軟狀態(tài)是指允許系統(tǒng)存在中間狀態(tài),而該中間狀態(tài)不會(huì)影響系統(tǒng)整體可用性。分布式存儲(chǔ)中一般一份數(shù)據(jù)至少會(huì)有三個(gè)副本,允許不同節(jié)點(diǎn)間副本同步的延時(shí)就是軟狀態(tài)的體現(xiàn)。mysql replication的異步復(fù)制也是一種體現(xiàn)。
最終一致性( Eventual Consistency)
最終一致性是指系統(tǒng)中的所有數(shù)據(jù)副本經(jīng)過(guò)一定時(shí)間后,最終能夠達(dá)到一致的狀態(tài)。弱一致性和強(qiáng)一致性相反,最終一致性是弱一致性的一種特殊情況。
ACID原則
ACID也是一種比較出名的描述一致性的原則,通常出現(xiàn)在分布式數(shù)據(jù)庫(kù)領(lǐng)域。具體來(lái)說(shuō),ACID原則描述了分布式數(shù)據(jù)庫(kù)需要滿足的一致性需求,同時(shí)允許付出可用性的代價(jià)。
Atomicity(原子性)
每次操作是原子的,要么成功,要么不執(zhí)行;
Consistency(一致性)
數(shù)據(jù)庫(kù)的狀態(tài)是一致的,無(wú)中間狀態(tài);
Isolation(隔離性)
各種操作彼此之間互相不影響;
Durability(持久性)
狀態(tài)的改變是持久的,不會(huì)失效。
ACID和BASE的區(qū)別與聯(lián)系
ACID是傳統(tǒng)數(shù)據(jù)庫(kù)常用的設(shè)計(jì)理念,追求強(qiáng)一致性模型。
BASE支持的是大型分布式系統(tǒng),犧牲掉對(duì)一致性的約束(但實(shí)現(xiàn)最終一致性),來(lái)?yè)Q取一定的可用性。
ACID和BASE代表了兩種截然相反的設(shè)計(jì)哲學(xué)。
在英文中,ACID和BASE分別是“酸”和“堿”,看似對(duì)立,實(shí)則是分別對(duì)CAP三特性的不同取舍。在分布式系統(tǒng)設(shè)計(jì)的場(chǎng)景中,系統(tǒng)組件對(duì)一致性要求是不同的,因此ACID和BASE又會(huì)結(jié)合使用。
CAP理論概述
一個(gè)分布式系統(tǒng)最多只能同時(shí)滿足一致性(Consistency)、可用性(Availability)和分區(qū)容忍性(Partition tolerance)這三項(xiàng)中的兩項(xiàng)。

CAP權(quán)衡
通過(guò)CAP理論,我們知道無(wú)法同時(shí)滿足一致性、可用性和分區(qū)容錯(cuò)性這三個(gè)特性,那要舍棄哪個(gè)呢?
對(duì)于多數(shù)大型互聯(lián)網(wǎng)應(yīng)用的場(chǎng)景,主機(jī)眾多、部署分散,而且現(xiàn)在的集群規(guī)模越來(lái)越大,所以節(jié)點(diǎn)故障、網(wǎng)絡(luò)故障是常態(tài),而且要保證服務(wù)可用性達(dá)到N個(gè)9,即保證P和A,舍棄C(退而求其次保證最終一致性)。雖然某些地方會(huì)影響客戶體驗(yàn),但沒(méi)達(dá)到造成用戶流程的嚴(yán)重程度。
對(duì)于涉及到錢財(cái)這樣不能有一絲讓步的場(chǎng)景,C必須保證。網(wǎng)絡(luò)發(fā)生故障寧可停止服務(wù),這是保證CA,舍棄P。貌似這幾年國(guó)內(nèi)銀行業(yè)發(fā)生了不下10起事故,但影響面不大,報(bào)到也不多,廣大群眾知道的少。還有一種是保證CP,舍棄A。例如網(wǎng)絡(luò)故障事只讀不寫。
孰優(yōu)孰略,沒(méi)有定論,只能根據(jù)場(chǎng)景定奪,適合的才是最好的。