分布式系统的概念
文章目錄
- 一、分布式系統(tǒng)的基本概念
- 1、分布式存儲(chǔ)
- 2、分布式系統(tǒng)需要解決的問題
- 二、分布式系統(tǒng)的CAP理論
- 1、CAP理論
- (1)Consistency 一致性
- (2)Availability 可用性
- (3)Partition Tolerance分區(qū)容錯(cuò)性
- 2、CAP的證明
- 3、CAP的權(quán)衡
- (1)CA without P
- (2)CP without A
- (3)AP wihtout C
一、分布式系統(tǒng)的基本概念
??分布式系統(tǒng)即把數(shù)據(jù)放在多個(gè)能獨(dú)立運(yùn)行的計(jì)算機(jī)(稱為結(jié)點(diǎn))上,各個(gè)結(jié)點(diǎn)利用計(jì)算機(jī)網(wǎng)絡(luò)進(jìn)行信息傳遞,合作完成共同的任務(wù)。分布式系統(tǒng)是建立在網(wǎng)絡(luò)之上的軟件系統(tǒng),在多臺(tái)不同的服務(wù)器中部署不同的服務(wù)模塊,通過遠(yuǎn)程調(diào)用協(xié)同工作,對(duì)外提供服務(wù)。【集群(cluster)是指在多臺(tái)不同的服務(wù)器中部署相同應(yīng)用或服務(wù)模塊,構(gòu)成一個(gè)集群,通過負(fù)載均衡設(shè)備對(duì)外提供服務(wù)。】
1、分布式存儲(chǔ)
即通過大量的PC連入互聯(lián)網(wǎng),統(tǒng)一對(duì)外提供存儲(chǔ)服務(wù)。分為以下幾部分:
(1)分布式文件系統(tǒng):以文件的方式進(jìn)行存儲(chǔ),對(duì)外提供文件的操作。
(2)分布式鍵值系統(tǒng):以kv存儲(chǔ),對(duì)外提供GUID操作。
(3)分布式表格系統(tǒng):用大表格的方式存儲(chǔ),對(duì)外提供表格的增刪操作。
(4)分布式數(shù)據(jù)庫:以數(shù)據(jù)庫表的形式存儲(chǔ),對(duì)外提供SQL的相關(guān)語句操作。
2、分布式系統(tǒng)需要解決的問題
(1)數(shù)據(jù)的分布、負(fù)載均衡問題。
(2)主從備份,數(shù)據(jù)一致性問題。
(3)容錯(cuò),故障恢復(fù)問題。
(4)讀寫流程問題。
二、分布式系統(tǒng)的CAP理論
1、CAP理論
??CAP理論:一個(gè)分布式系統(tǒng)最多只能同時(shí)滿足一致性(Consistency)、可用性(Availability)和分區(qū)容錯(cuò)性(Partition tolerance)這三項(xiàng)中的兩項(xiàng)。
(1)Consistency 一致性
??更新操作成功并返回客戶端后,所有節(jié)點(diǎn)在同一時(shí)間的數(shù)據(jù)完全一致(返回給客戶端的數(shù)據(jù)永遠(yuǎn)是最新的),即數(shù)據(jù)一致性,一致性是因?yàn)橛胁l(fā)讀寫才有的問題。
-
對(duì)于關(guān)系型數(shù)據(jù)庫,要求更新過的數(shù)據(jù)能被后續(xù)的訪問都能看到,這是強(qiáng)一致性。
-
如果能容忍后續(xù)的部分或者全部訪問不到,則是弱一致性。
-
如果經(jīng)過一段時(shí)間后要求能訪問到更新后的數(shù)據(jù),則是最終一致性。
??CAP中說,不可能同時(shí)滿足的這個(gè)一致性指的是強(qiáng)一致性。
(2)Availability 可用性
??可用性即服務(wù)一直可用,而且是正常響應(yīng)時(shí)間。對(duì)于一個(gè)可用性的分布式系統(tǒng),每一個(gè)非故障的節(jié)點(diǎn)必須對(duì)每一個(gè)請(qǐng)求作出響應(yīng)。所以,一般我們?cè)诤饬恳粋€(gè)系統(tǒng)的可用性的時(shí)候,都是通過停機(jī)時(shí)間來計(jì)算的。
??通常我們描述一個(gè)系統(tǒng)的可用性時(shí),我們說淘寶的系統(tǒng)可用性可以達(dá)到5個(gè)9,意思就是說他的可用水平是99.999%,即全年停機(jī)時(shí)間不超過 (1-0.99999)36524*60 = 5.256 min,這是一個(gè)極高的要求。
(3)Partition Tolerance分區(qū)容錯(cuò)性
??分區(qū)容錯(cuò)性即分布式系統(tǒng)在遇到某節(jié)點(diǎn)或網(wǎng)絡(luò)分區(qū)故障的時(shí)候,仍然能夠?qū)ν馓峁M足一致性和可用性的服務(wù)。
??分區(qū)容錯(cuò)性和擴(kuò)展性緊密相關(guān)。在分布式應(yīng)用中,可能因?yàn)橐恍┓植际降脑驅(qū)е孪到y(tǒng)無法正常運(yùn)轉(zhuǎn)。好的分區(qū)容錯(cuò)性要求能夠使應(yīng)用雖然是一個(gè)分布式系統(tǒng),而看上去卻好像是在一個(gè)可以運(yùn)轉(zhuǎn)正常的整體。比如現(xiàn)在的分布式系統(tǒng)中有某一個(gè)或者幾個(gè)機(jī)器宕掉了,其他剩下的機(jī)器還能夠正常運(yùn)轉(zhuǎn)滿足系統(tǒng)需求,或者是機(jī)器之間有網(wǎng)絡(luò)異常,將分布式系統(tǒng)分隔未獨(dú)立的幾個(gè)部分,各個(gè)部分還能維持分布式系統(tǒng)的運(yùn)作,這樣就具有好的分區(qū)容錯(cuò)性。
2、CAP的證明
??作為一個(gè)分布式系統(tǒng),它和單機(jī)系統(tǒng)的最大區(qū)別,就在于網(wǎng)絡(luò),現(xiàn)在假設(shè)一種極端情況,N1和N2之間的網(wǎng)絡(luò)斷開了,我們要支持這種網(wǎng)絡(luò)異常,相當(dāng)于要滿足分區(qū)容錯(cuò)性,能不能同時(shí)滿足一致性和響應(yīng)性呢?還是說要對(duì)他們進(jìn)行取舍。
??假設(shè)在N1和N2之間網(wǎng)絡(luò)斷開的時(shí)候,有用戶向N1發(fā)送數(shù)據(jù)更新請(qǐng)求,那N1中的數(shù)據(jù)V0將被更新為V1,由于網(wǎng)絡(luò)是斷開的,所以分布式系統(tǒng)同步操作M,所以N2中的數(shù)據(jù)依舊是V0;這個(gè)時(shí)候,有用戶向N2發(fā)送數(shù)據(jù)讀取請(qǐng)求,由于數(shù)據(jù)還沒有進(jìn)行同步,應(yīng)用程序沒辦法立即給用戶返回最新的數(shù)據(jù)V1,怎么辦呢?有二種選擇:
-
第一,犧牲數(shù)據(jù)一致性,保證可用性。響應(yīng)舊的數(shù)據(jù)V0給用戶(并不是錯(cuò)亂的數(shù)據(jù),而是舊數(shù)據(jù),只不過不是最新的);
-
第二,犧牲可用性,保證數(shù)據(jù)一致性。阻塞等待,直到網(wǎng)絡(luò)連接恢復(fù),數(shù)據(jù)更新操作M完成之后,再給用戶響應(yīng)最新的數(shù)據(jù)V1。
??這個(gè)過程,證明了要滿足分區(qū)容錯(cuò)性的分布式系統(tǒng),只能在一致性和可用性兩者中,選擇其中一個(gè)。
3、CAP的權(quán)衡
(1)CA without P
??這種情況在分布式系統(tǒng)中幾乎是不存在的。首先在分布式環(huán)境下,網(wǎng)絡(luò)分區(qū)是一個(gè)自然的事實(shí)。因?yàn)榉謪^(qū)是必然的,所以如果舍棄P,意味著要舍棄分布式系統(tǒng)。那也就沒有必要再討論CAP理論了。這也是為什么在前面的CAP證明中,我們以系統(tǒng)滿足P為前提論述了無法同時(shí)滿足C和A。
??比如我們熟知的關(guān)系型數(shù)據(jù)庫,如MySql和Oracle就是保證了可用性和數(shù)據(jù)一致性,但是他并不是個(gè)分布式系統(tǒng)。
(2)CP without A
??一個(gè)保證了CP而一個(gè)舍棄了A的分布式系統(tǒng),一旦發(fā)生網(wǎng)絡(luò)故障或者消息丟失等情況,就要犧牲用戶的體驗(yàn),等待所有數(shù)據(jù)全部一致了之后再讓用戶訪問系統(tǒng)。
??設(shè)計(jì)成CP的系統(tǒng)其實(shí)也不少,其中最典型的就是很多分布式數(shù)據(jù)庫,他們都是設(shè)計(jì)成CP的。在發(fā)生極端情況時(shí),優(yōu)先保證數(shù)據(jù)的強(qiáng)一致性,代價(jià)就是舍棄系統(tǒng)的可用性。如Redis、HBase等,還有分布式系統(tǒng)中常用的Zookeeper也是在CAP三者之中選擇優(yōu)先保證CP的。
(3)AP wihtout C
??要高可用并允許分區(qū),則需放棄一致性。一旦網(wǎng)絡(luò)問題發(fā)生,節(jié)點(diǎn)之間可能會(huì)失去聯(lián)系。為了保證高可用,需要在用戶訪問時(shí)可以馬上得到返回,則每個(gè)節(jié)點(diǎn)只能用本地?cái)?shù)據(jù)提供服務(wù),而這樣會(huì)導(dǎo)致全局?jǐn)?shù)據(jù)的不一致性。
??這種舍棄強(qiáng)一致性而保證系統(tǒng)的分區(qū)容錯(cuò)性和可用性的場(chǎng)景和案例非常多。前面我們介紹可用性的時(shí)候說到過,很多系統(tǒng)在可用性方面會(huì)做很多事情來保證系統(tǒng)的全年可用性可以達(dá)到N個(gè)9,所以,對(duì)于很多業(yè)務(wù)系統(tǒng)來說,比如淘寶的購物,12306的買票。都是在可用性和一致性之間舍棄了一致性而選擇可用性。
??但是,我們說很多網(wǎng)站犧牲了一致性,選擇了可用性,這其實(shí)也不準(zhǔn)確的。就比如12306買票的例子,其實(shí)舍棄的只是強(qiáng)一致性,退而求其次保證了最終一致性。也就是說,雖然下單的瞬間,關(guān)于車票的庫存可能存在數(shù)據(jù)不一致的情況,但是過了一段時(shí)間,還是要保證最終一致性的。
參考:https://www.hollischuang.com/archives/666
https://blog.csdn.net/wuxians/article/details/81275441
https://zhuanlan.zhihu.com/p/32052223
總結(jié)
- 上一篇: 分布式系统概念与设计——阅读笔记(一)
- 下一篇: 分布式系统概念与设计学习(01),本书概