分布式理论(一)CAP 理论
分布式理論(一) CAP理論
一.CAP理論前言
??????CAP原則又稱為CAP理論,主要思想是在任何一個分布式系統(tǒng)中都無法同時滿足CAP。
C(Consistency):表示一致性,所有的節(jié)點同一時間看到的是相同的數(shù)據(jù)。
A(Avaliablity):表示可用性,不管是否成功,確保一個請求都能接收到響應(yīng)。
P(Partion Tolerance):分區(qū)容錯性,系統(tǒng)任意分區(qū)后,在網(wǎng)絡(luò)故障時,仍能操作。
?
?
如上所述,正如Gilbert認(rèn)為,一致性其實就是關(guān)系型數(shù)據(jù)庫所講的ACID,一個用戶請求要么是成功,要么是失敗的,不能有處于一個中間狀態(tài);一旦一個事務(wù)完成,將來所有事務(wù)都必須基于這個完成后的狀態(tài);未完成的事務(wù)不會互相影響;一旦一個事務(wù)完成,就是持戒的。可用性其實就是對于一個系統(tǒng)而言,所有的請求都應(yīng)該“成功”并且收到“響應(yīng)”。分區(qū)容錯性其實就是指分布式系統(tǒng)的容錯性,一個節(jié)點出現(xiàn)了故障,不影響整個集群的正常使用。
?
二.CAP理論介紹
??????如圖,在一個網(wǎng)絡(luò)中,N1和N2即分布式系統(tǒng)中的兩個節(jié)點,他們都共享數(shù)據(jù)塊V,其中有一個值是為V0。
?
?
l?在滿足一致性的時候,A中的V0應(yīng)該和B中的V0保持一致的,即V0=V0
l?在滿足可用性的時候,無論請求訪問A或者是B都應(yīng)該得到響應(yīng)。
l?在滿足分區(qū)可用性的時候,A和B隨便一個出現(xiàn)宕機或者網(wǎng)絡(luò)不通的情況下,都不應(yīng)該影響整個系統(tǒng)的可用性。
上述描述如果A程序更新V0值為V1,然后在更新B上的副本為V1,當(dāng)一個請求訪問B時,得到的結(jié)果是V1。如下圖所示:
?
?
但是分布式系統(tǒng)中,有些時候這些并不能按照你想的這樣進行,在分布式系統(tǒng)中通常情況下網(wǎng)絡(luò)是分區(qū)的,如果出現(xiàn)了網(wǎng)絡(luò)延遲,導(dǎo)致N1上更新的消息無法到達N2上,即N2上的數(shù)據(jù)副本依然是V0,當(dāng)一個請求訪問B時,獲取到的結(jié)果是V0,而訪問A時,獲取到的結(jié)果是V1,這就導(dǎo)致了在用戶看來是同一個請求,得到的結(jié)果是不一樣的。如下圖
?
?
在這個時候,方案的設(shè)計者就應(yīng)該在這里做出兩種選擇:
(1)犧牲數(shù)據(jù)一致性,保證可用性。響應(yīng)舊的數(shù)據(jù)V0給用戶。
(2)犧牲可用性,保證數(shù)據(jù)一致性。阻塞等待,直到網(wǎng)絡(luò)連接恢復(fù),數(shù)據(jù)更新操作M完成之后,再給用戶響應(yīng)最新的數(shù)據(jù)V1
?
三.CAP之間取舍
接下來我們就談一談CAP,這三者之間是如何取舍的:
(1)CA without P
如果不要求P(不允許分區(qū)),則C(強一致性)和A(可用性)是可以保證的。但其實分區(qū)不是你想不想的問題,而是始終會存在,因此CA的系統(tǒng)更多的是允許分區(qū)后各子系統(tǒng)依然保持CA。
常見模型例子:
單站點數(shù)據(jù)庫;集群數(shù)據(jù)庫等,網(wǎng)上找的還有:LDAP協(xié)議,xFS文件系統(tǒng)
實現(xiàn)方式:
兩階段提交;緩存驗證協(xié)議
(2) CP without A
如果不要求A(可用),相當(dāng)于每個請求都需要在節(jié)點之間強一致,而P(分區(qū))會導(dǎo)致同步時間無限延長,如此CP也是可以保證的。很多傳統(tǒng)的數(shù)據(jù)庫分布式事務(wù)都屬于這種模式,以及Zookeeper等中間件
常見模型例子:
分布式數(shù)據(jù)庫;分布式鎖;大部分的協(xié)議;Zookeeper
實現(xiàn)方式:
悲觀鎖;少數(shù)分區(qū)不可用
?
(3) AP wihtout C
要高可用并允許分區(qū),則需放棄一致性。一旦分區(qū)發(fā)生,節(jié)點之間可能會失去聯(lián)系,為了高可用,每個節(jié)點只能用本地數(shù)據(jù)提供服務(wù),而這樣會導(dǎo)致全局?jǐn)?shù)據(jù)的不一致性。現(xiàn)在眾多的NoSQL都屬于。
?????常見模型例子:
?????Web緩存;DNS;NoSQL;
?????實現(xiàn)方式:
?????到期或者租賃;解決沖突;樂觀鎖
?
CAP的意義:
在系統(tǒng)架構(gòu)時,應(yīng)該根據(jù)具體的業(yè)務(wù)場景來權(quán)衡CAP,就拿大多數(shù)的門戶網(wǎng)站來說,因為機器數(shù)量龐大,部署節(jié)點分散,網(wǎng)絡(luò)故障時常態(tài),可用性是必須要保證的,所以在設(shè)計的時候就會考慮舍棄一些一致性而選擇AP模型。但是對于數(shù)據(jù)一致性較高的銀行系統(tǒng)來說,可以用于系統(tǒng)臨時不可用,但是數(shù)據(jù)必須要保持一致來說,選擇CP模型無可厚非。
轉(zhuǎn)載于:https://www.cnblogs.com/lovegrace/p/11391842.html
總結(jié)
以上是生活随笔為你收集整理的分布式理论(一)CAP 理论的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: windows下mysql安装配置启动
- 下一篇: Kubernetes的初始化容器init