更新時(shí)間:2023-06-09 來(lái)源:黑馬程序員 瀏覽量:
2000年,Eric Brewer在ACM PODC分布式計(jì)算原理專題討論會(huì)上首次提出CAP原則。后來(lái),麻省理工學(xué)院的兩位科學(xué)家(賽斯·吉爾伯特和南希·林奇)證明了CAP原則的正確性。目前,CAP原則被大型公司廣泛采納,例如Amazon公司。
CAP原則又稱CAP定理,它包括一致性(Consistency)、可用性(Availability)和分區(qū)容錯(cuò)性(Partition Tolerance)三大要素,三大要素的介紹具體如下;
·一致性:系統(tǒng)在執(zhí)行過(guò)某項(xiàng)操作后,仍然處于一致的狀態(tài)。在分布式系統(tǒng)中,更新操作執(zhí)行成功后所有的用戶都應(yīng)該讀取到最新的值,這樣的系統(tǒng)被認(rèn)為具有一致性。
·可用性:每一個(gè)操作總是能夠在一定的時(shí)間內(nèi)返回結(jié)果,這里需要注意的是“一定時(shí)間內(nèi)”和“返回結(jié)果”,也就是說(shuō)系統(tǒng)的結(jié)果必須在給定的時(shí)間內(nèi)返回,若超時(shí),則被認(rèn)為是不可用的。
·分區(qū)容錯(cuò)性:系統(tǒng)存在網(wǎng)絡(luò)分區(qū)的情況下,仍然可以接受請(qǐng)求(即滿足一致性和可用性)。網(wǎng)絡(luò)分區(qū)指的是由于某種原因網(wǎng)絡(luò)被分成若干個(gè)孤立的區(qū)域,而區(qū)域之間互不相通。分區(qū)容錯(cuò)性可理解為系統(tǒng)對(duì)結(jié)點(diǎn)動(dòng)態(tài)加人和離開(kāi)的處理能力,因?yàn)榻Y(jié)點(diǎn)的加入和離開(kāi)可認(rèn)為是集群內(nèi)部的網(wǎng)絡(luò)分區(qū)。
CAP原則中,一個(gè)分布式系統(tǒng)中最多可同時(shí)實(shí)現(xiàn)上述的兩個(gè)要素,不可同時(shí)實(shí)現(xiàn)三個(gè)要素,具體如圖所示。
從圖中可以看出,CAP原則最多可以同時(shí)實(shí)現(xiàn)兩個(gè)要素,即AP、CP或AC,不存在同時(shí)實(shí)現(xiàn)三個(gè)要素的情形,即CAP。若是分布式系統(tǒng)中的數(shù)據(jù)無(wú)副本的話,系統(tǒng)必然會(huì)滿足一致性(因?yàn)橹挥袉为?dú)的數(shù)據(jù),不會(huì)出現(xiàn)數(shù)據(jù)不一致的情況);若是分布式系統(tǒng)中出現(xiàn)了網(wǎng)絡(luò)分區(qū)狀況或者宕機(jī),則必然會(huì)導(dǎo)致某些數(shù)據(jù)不可以訪問(wèn),此時(shí)就不能滿足可用性要素,即在此情況下獲得了CP系統(tǒng),但是CAP是不可同時(shí)滿足的。
接下來(lái),我們通過(guò)一張表來(lái)描述CAP原則的取舍策略與應(yīng)用場(chǎng)景,具體如表所示。
選擇CA策略,意味著放棄P,也就是說(shuō),保證了系統(tǒng)的一致性和可用性,卻違背了分布式系統(tǒng)的分區(qū)容錯(cuò)性;選擇CP策略,意味著放棄A,也就是說(shuō),保證了系統(tǒng)的一致性和分區(qū)容錯(cuò)性,但用戶的體驗(yàn)較差,即當(dāng)系統(tǒng)宕機(jī)時(shí),需要等待所有結(jié)點(diǎn)的數(shù)據(jù)一致時(shí),用戶才可訪問(wèn)系統(tǒng);選擇AP策略,意味著放棄C.也就是說(shuō),保證了系統(tǒng)的可用性和分區(qū)容錯(cuò)性,但是結(jié)點(diǎn)之間的數(shù)據(jù)會(huì)出現(xiàn)不一致的現(xiàn)象。因此,我們可以根據(jù)自已的需求,選擇對(duì)應(yīng)的策略。