什么是CAP
CAP原則又稱CAP定理,指的是在一個分布式系統(tǒng)中,Consistency(一致性)、 Availability(可用性)、Partition tolerance(分區(qū)容錯性)這三個基本需求,最多只能同時滿足其中的2個。
一致性 :數(shù)據(jù)在多個副本之間能夠保持一致的特性。
可用性:系統(tǒng)提供的服務(wù)一直處于可用的狀態(tài),每次請求都能獲得正確的響應(yīng)。
分區(qū)容錯性:分布式系統(tǒng)在遇到任何網(wǎng)絡(luò)分區(qū)故障的時候,仍然能夠?qū)ν馓峁M足一致性和可用性的服務(wù)。
什么是分區(qū)?
在分布式系統(tǒng)中,不同的節(jié)點分布在不同的子網(wǎng)絡(luò)中,由于一些特殊的原因,這些子節(jié)點之間出現(xiàn)了網(wǎng)絡(luò)不通的狀態(tài),但他們的內(nèi)部子網(wǎng)絡(luò)是正常的。從而導(dǎo)致了整個系統(tǒng)的環(huán)境被切分成了若干個孤立的區(qū)域,這就是分區(qū)。
為什么三者不可得兼
首先,我們得知道,分布式系統(tǒng),是避免不了分區(qū)的,分區(qū)容錯性是一定要滿足的,我們看看在滿足分區(qū)容錯的基礎(chǔ)上,能不能同時滿足一致性和可用性?
假如現(xiàn)在有兩個分區(qū)N1和N2,N1和N2分別有不同的分區(qū)存儲D1和D2,以及不同的服務(wù)S1和S2。
- 在滿足一致性 的時候,N1和N2的數(shù)據(jù)要求值一樣的,D1=D2。
- 在滿足可用性的時候,無論訪問N1還是N2,都能獲取及時的響應(yīng)。
好的,現(xiàn)在有這樣的場景:
-
用戶訪問了N1,修改了D1的數(shù)據(jù)。
-
用戶再次訪問,請求落在了N2。此時D1和D2的數(shù)據(jù)不一致。
接下來: -
保證一致性:此時D1和D2數(shù)據(jù)不一致,要保證一致性就不能返回不一致的數(shù)據(jù),可用性無法保證。
-
保證可用性:立即響應(yīng),可用性得到了保證,但是此時響應(yīng)的數(shù)據(jù)和D1不一致,一致性無法保證。
所以,可以看出,分區(qū)容錯的前提下,一致性和可用性是矛盾的。
CAP原則權(quán)衡
CAP三者不可同得,那么必須得做一些權(quán)衡。
CA without P?
如果不要求P(不允許分區(qū)),則C(強(qiáng)一致性)和A(可用性)是可以保證的。但是對于分布式系統(tǒng),分區(qū)是客觀存在的,其實分布式系統(tǒng)理論上是不可選CA的。
CP without A
如果不要求A(可用),相當(dāng)于每個請求都需要在Server之間強(qiáng)一致,而P(分區(qū))會導(dǎo)致同步時間無限延長,如此CP也是可以保證的。很多傳統(tǒng)的數(shù)據(jù)庫分布式事務(wù)都屬于這種模式。
AP wihtout C
要高可用并允許分區(qū),則需放棄一致性。一旦分區(qū)發(fā)生,節(jié)點之間可能會失去聯(lián)系,為了高可用,每個節(jié)點只能用本地數(shù)據(jù)提供服務(wù),而這樣會導(dǎo)致全局?jǐn)?shù)據(jù)的不一致性?,F(xiàn)在眾多的NoSQL都屬于此類。文章來源:http://www.zghlxwxcb.cn/news/detail-755220.html
CAP原則實際應(yīng)用
我們應(yīng)該都接觸過微服務(wù),常見的可以作為注冊中心的組件有:ZooKeeper、Eureka、Nacos…。文章來源地址http://www.zghlxwxcb.cn/news/detail-755220.html
- ZooKeeper 保證的是 CP
任何時刻對 ZooKeeper 的讀請求都能得到一致性的結(jié)果,但是, ZooKeeper 不保證每次請求的可用性比如在 Leader 選舉過程中或者半數(shù)以上的機(jī)器不可用的時候服務(wù)就是不可用的。 - Redis集群 保證AP
Redis通過AOF和RDB將數(shù)據(jù)同步到子節(jié)點。如果Master節(jié)點掛了,可以很迅速的將Slave提升為Master,盡可能的保證了系統(tǒng)的可用性,但是可能存在數(shù)據(jù)丟失的問題。所以Redis其實并不適合做分布式鎖。 - Eureka 保證的則是 AP
Eureka 在設(shè)計的時候就是優(yōu)先保證 A (可用性)。在 Eureka 中不存在什么 Leader 節(jié)點,每個節(jié)點都是一樣的、平等的。因此 Eureka 不會像 ZooKeeper 那樣出現(xiàn)選舉過程中或者半數(shù)以上的機(jī)器不可用的時候服務(wù)就是不可用的情況。 Eureka 保證即使大部分節(jié)點掛掉也不會影響正常提供服務(wù),只要有一個節(jié)點是可用的就行了。只不過這個節(jié)點上的數(shù)據(jù)可能并不是最新的。 - Nacos 不僅支持 CP 也支持 AP。
到了這里,關(guān)于分布式理論基礎(chǔ):CAP定理的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!