CAP的含義:
C:Consistency 一致性
同一數(shù)據(jù)的多個(gè)副本是否實(shí)時(shí)相同。
A:Availability 可用性
可用性:一定時(shí)間內(nèi) & 系統(tǒng)返回一個(gè)明確的結(jié)果 則稱為該系統(tǒng)可用窥岩。
P:Partition tolerance 分區(qū)容錯(cuò)性
將同一服務(wù)分布在多個(gè)系統(tǒng)中棵帽,從而保證某一個(gè)系統(tǒng)宕機(jī)笙以,仍然有其他系統(tǒng)提供相同的服務(wù)。
CAP理論告訴我們,在分布式系統(tǒng)中揍诽,C愉适、A犯助、P三個(gè)條件中我們最多只能選擇兩個(gè)。那么問題來了维咸,究竟選擇哪兩個(gè)條件較為合適呢剂买?
對(duì)于一個(gè)業(yè)務(wù)系統(tǒng)來說惠爽,可用性和分區(qū)容錯(cuò)性是必須要滿足的兩個(gè)條件,并且這兩者是相輔相成的瞬哼。業(yè)務(wù)系統(tǒng)之所以使用分布式系統(tǒng)婚肆,主要原因有兩個(gè):
提升整體性能
當(dāng)業(yè)務(wù)量猛增,單個(gè)服務(wù)器已經(jīng)無法滿足我們的業(yè)務(wù)需求的時(shí)候坐慰,就需要使用分布式系統(tǒng)旬痹,使用多個(gè)節(jié)點(diǎn)提供相同的功能,從而整體上提升系統(tǒng)的性能讨越,這就是使用分布式系統(tǒng)的第一個(gè)原因两残。
實(shí)現(xiàn)分區(qū)容錯(cuò)性
單一節(jié)點(diǎn) 或 多個(gè)節(jié)點(diǎn)處于相同的網(wǎng)絡(luò)環(huán)境下,那么會(huì)存在一定的風(fēng)險(xiǎn)把跨,萬一該機(jī)房斷電人弓、該地區(qū)發(fā)生自然災(zāi)害,那么業(yè)務(wù)系統(tǒng)就全面癱瘓了着逐。為了防止這一問題崔赌,采用分布式系統(tǒng),將多個(gè)子系統(tǒng)分布在不同的地域耸别、不同的機(jī)房中健芭,從而保證系統(tǒng)高可用性。
這說明分區(qū)容錯(cuò)性是分布式系統(tǒng)的根本秀姐,如果分區(qū)容錯(cuò)性不能滿足慈迈,那使用分布式系統(tǒng)將失去意義。
此外省有,可用性對(duì)業(yè)務(wù)系統(tǒng)也尤為重要痒留。在大談?dòng)脩趔w驗(yàn)的今天,如果業(yè)務(wù)系統(tǒng)時(shí)常出現(xiàn)“系統(tǒng)異炒姥兀”伸头、響應(yīng)時(shí)間過長等情況,這使得用戶對(duì)系統(tǒng)的好感度大打折扣舷蟀,在互聯(lián)網(wǎng)行業(yè)競(jìng)爭(zhēng)激烈的今天恤磷,相同領(lǐng)域的競(jìng)爭(zhēng)者不甚枚舉,系統(tǒng)的間歇性不可用會(huì)立馬導(dǎo)致用戶流向競(jìng)爭(zhēng)對(duì)手野宜。因此扫步,我們只能通過犧牲一致性來換取系統(tǒng)的可用性和分區(qū)容錯(cuò)性。這也就是下面要介紹的BASE理論速缨。
CAP理論告訴我們一個(gè)悲慘但不得不接受的事實(shí)——我們只能在C锌妻、A、P中選擇兩個(gè)條件旬牲。而對(duì)于業(yè)務(wù)系統(tǒng)而言仿粹,我們往往選擇犧牲一致性來換取系統(tǒng)的可用性和分區(qū)容錯(cuò)性搁吓。不過這里要指出的是,所謂的“犧牲一致性”并不是完全放棄數(shù)據(jù)一致性吭历,而是犧牲強(qiáng)一致性換取弱一致性堕仔。下面來介紹下BASE理論。
BA:Basic Available 基本可用
整個(gè)系統(tǒng)在某些不可抗力的情況下晌区,仍然能夠保證“可用性”摩骨,即一定時(shí)間內(nèi)仍然能夠返回一個(gè)明確的結(jié)果。只不過“基本可用”和“高可用”的區(qū)別是:
“一定時(shí)間”可以適當(dāng)延長
當(dāng)舉行大促時(shí)朗若,響應(yīng)時(shí)間可以適當(dāng)延長
給部分用戶返回一個(gè)降級(jí)頁面
給部分用戶直接返回一個(gè)降級(jí)頁面恼五,從而緩解服務(wù)器壓力。但要注意哭懈,返回降級(jí)頁面仍然是返回明確結(jié)果灾馒。
S:Soft State:柔性狀態(tài)
同一數(shù)據(jù)的不同副本的狀態(tài),可以不需要實(shí)時(shí)一致遣总。
E:Eventual Consisstency:最終一致性
同一數(shù)據(jù)的不同副本的狀態(tài)睬罗,可以不需要實(shí)時(shí)一致,但一定要保證經(jīng)過一定時(shí)間后仍然是一致的旭斥。
酸堿平衡
ACID能夠保證事務(wù)的強(qiáng)一致性容达,即數(shù)據(jù)是實(shí)時(shí)一致的。這在本地事務(wù)中是沒有問題的垂券,在分布式事務(wù)中花盐,強(qiáng)一致性會(huì)極大影響分布式系統(tǒng)的性能,因此分布式系統(tǒng)中遵循BASE理論即可圆米。但分布式系統(tǒng)的不同業(yè)務(wù)場(chǎng)景對(duì)一致性的要求也不同卒暂。如交易場(chǎng)景下啄栓,就要求強(qiáng)一致性娄帖,此時(shí)就需要遵循ACID理論,而在注冊(cè)成功后發(fā)送短信驗(yàn)證碼等場(chǎng)景下昙楚,并不需要實(shí)時(shí)一致近速,因此遵循BASE理論即可。因此要根據(jù)具體業(yè)務(wù)場(chǎng)景堪旧,在ACID和BASE之間尋求平衡削葱。