分布式系统基础--CAP理论
CAP理論(一個分布式系統(tǒng)至多只能滿足三項中的兩項)
一致性(Consistency)? ? 所有節(jié)點在同一時間訪問到的數(shù)據(jù)完全一致
可用性(Availability)? ?非故障節(jié)點對每一個請求能做出響應(yīng)
分區(qū)容錯性(Partition Tolerance)? ?當(dāng)集群中的某些結(jié)點無法聯(lián)系時仍能正常提供服務(wù)
說說一致性:
一致性是因為多個數(shù)據(jù)拷貝下并發(fā)讀寫才有的問題
若從客戶端和服務(wù)端兩個不同的視角來看
- 客戶端:一致性主要指的是數(shù)據(jù)更新后,在多并發(fā)訪問時如何獲取
- 服務(wù)端:指更新如何分布到整個系統(tǒng),以保證數(shù)據(jù)最終一致
一致性,可以分為強/弱/最終一致性三類
從客戶端角度,多進程并發(fā)訪問時,更新過的數(shù)據(jù)在不同進程如何獲取的不同策略,決定了不同的一致性。
- 強一致性:關(guān)系型數(shù)據(jù)庫,要求更新過的數(shù)據(jù)能被后續(xù)的訪問都能看到
- 弱一致性:能容忍后續(xù)的部分或者全部訪問不到
- 最終一致性:經(jīng)過一段時間后要求能訪問到更新后的數(shù)據(jù)
CAP的證明
上圖是證明CAP的基本場景,網(wǎng)絡(luò)中有兩個節(jié)點N1和N2,他們之間網(wǎng)絡(luò)可以連通,N1、N2中均有一個應(yīng)用程序A/B,和一個數(shù)據(jù)庫V。兩個V0是分布式系統(tǒng)的數(shù)據(jù)存儲的兩個子數(shù)據(jù)庫
在滿足一致性的時候,N1和N2中的數(shù)據(jù)是一樣的,V0=V0
在滿足可用性的時候,用戶不管是請求N1或者N2,都會得到立即響應(yīng)
在滿足分區(qū)容錯性的情況下,N1和N2有任何一方宕機,或者網(wǎng)絡(luò)不通的時候,都不會影響N1和N2彼此之間的正常運作
如上圖,分布式系統(tǒng)正常運轉(zhuǎn)下,用戶向N1機器請求數(shù)據(jù)更新,程序A更新數(shù)據(jù)庫V0為V1,分布式系統(tǒng)將數(shù)據(jù)進行同步操作M,將V1同步到N2中的V0,使得N2中的數(shù)據(jù)V0也更新為V1,N2此時響應(yīng)讀數(shù)據(jù)請求則與N1中一致
?
現(xiàn)在假設(shè)一種極端情況,N1和N2之間的網(wǎng)絡(luò)斷開了,分布式系統(tǒng)要支持這種網(wǎng)絡(luò)異常,相當(dāng)于要滿足分區(qū)容錯性,能不能同時滿足一致性和響應(yīng)性呢?
假設(shè)在N1和N2之間網(wǎng)絡(luò)斷開的時候,有用戶向N1發(fā)送寫數(shù)據(jù)請求,那N1中的數(shù)據(jù)V0將被更新為V1,由于網(wǎng)絡(luò)斷開,分布式系統(tǒng)無法同步操作M,故N2中的數(shù)據(jù)依舊是V0
此時,有用戶向N2發(fā)送讀數(shù)據(jù)請求,由于數(shù)據(jù)還沒有進行同步,應(yīng)用程序沒辦法立即給用戶返回最新的數(shù)據(jù)V1,怎么辦呢?有二種選擇:
第一,犧牲一致性,響應(yīng)舊的數(shù)據(jù)V0給用戶
第二,犧牲可用性,阻塞等待,直到網(wǎng)絡(luò)連接恢復(fù),數(shù)據(jù)更新操作M完成之后,再給用戶響應(yīng)最新的數(shù)據(jù)V1
這個過程,證明了要滿足分區(qū)容錯性的分布式系統(tǒng),只能在一致性和可用性兩者中,選擇其中一個
CAP權(quán)衡
CA without P:舍棄P(不允許分區(qū)容錯),則C(強一致性)和A(可用性)是可以保證的。但其實分區(qū)不是想不想的問題,而是始終會存在,因此CA的系統(tǒng)更多的是允許分區(qū)后各子系統(tǒng)依然保持CA
CP without A:舍棄A(可用性),相當(dāng)于每個請求都需要在Server之間強一致,而P(分區(qū))會導(dǎo)致同步時間無限延長。很多傳統(tǒng)的數(shù)據(jù)庫分布式事務(wù)都屬于這種模式
AP wihtout C:舍棄C(一致性),要高可用并允許分區(qū),一旦分區(qū)發(fā)生,節(jié)點之間可能會失去聯(lián)系,為了高可用,每個節(jié)點只能用本地數(shù)據(jù)提供服務(wù),而這樣會導(dǎo)致全局數(shù)據(jù)的不一致性,現(xiàn)在眾多的NoSQL都屬于此類
高可用性:指系統(tǒng)無中斷地執(zhí)行其功能的能力,代表系統(tǒng)的可用性程度
其度量方式,是根據(jù)系統(tǒng)損害、無法使用的時間,以及由無法運作恢復(fù)到可運作狀況的時間,與系統(tǒng)總運作時間的比較。計算公式為:?
A(可用性),MTBF(平均故障間隔),MDT(平均修復(fù)時間)
在線系統(tǒng)和執(zhí)行關(guān)鍵任務(wù)的系統(tǒng)通常要求其可用性要達到5個9標準(99.999%)---年故障時間為5分15秒
總結(jié)
以上是生活随笔為你收集整理的分布式系统基础--CAP理论的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 代理猎手找大学代理
- 下一篇: windows系统常用运行命令大全