日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > windows >内容正文

windows

分布式系统:CAP 理论的前世今生

發(fā)布時(shí)間:2024/8/23 windows 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 分布式系统:CAP 理论的前世今生 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

CAP 理論是分布式系統(tǒng)設(shè)計(jì)中的一個(gè)重要理論,雖然它為系統(tǒng)設(shè)計(jì)提供了非常有用的依據(jù),但是也帶來了很多誤解。本文將從 CAP 誕生的背景說起,然后對(duì)理論進(jìn)行解釋,最后對(duì) CAP 在當(dāng)前背景下的一些新理解進(jìn)行分析,澄清一些對(duì) CAP 的誤解。

CAP 理論誕生的背景

CAP 理論的是在“數(shù)據(jù)一致性 VS 可用性”的爭論中產(chǎn)生。CAP 的作者 Brewer 在 90 年代的時(shí)候就開始研究基于集群的跨區(qū)域系統(tǒng)(實(shí)質(zhì)上是早期的云計(jì)算),對(duì)于這類系統(tǒng)而言,系統(tǒng)可用性是首要目標(biāo),因此他們采用了緩存或者事后更新的方式來優(yōu)化系統(tǒng)的可用性。盡管這些方法提升了系統(tǒng)的可用性,但是犧牲了系統(tǒng)數(shù)據(jù)一致性。

Brewer 在 90 年代提出了 BASE 理論(基本可用、軟狀態(tài)、最終一致性),這在當(dāng)時(shí)還不怎么被接受。因?yàn)榇蠹疫€是比較看重 ACID 的優(yōu)點(diǎn),不愿意放棄強(qiáng)一致性。因此,Brewer 提出了 CAP 理論,目的就是為了開闊分布式系統(tǒng)的設(shè)計(jì)空間,通過“三選二”的公式,解放思想,不要只抓著一致性不放。

理解了 CAP 誕生的背景,我們才能更加深入的理解 CAP 理論,以及它帶來的啟示。“三選二”的觀點(diǎn)雖然幫助大家開拓了設(shè)計(jì)思路,但是也帶來了很多誤解。下面我們會(huì)逐一分析,首先來看一下 CAP 理論的解釋。

CAP 理論的經(jīng)典解釋

CAP 定理是分布式系統(tǒng)設(shè)計(jì)中最基礎(chǔ),也是最為關(guān)鍵的理論。它指出,分布式數(shù)據(jù)存儲(chǔ)不可能同時(shí)滿足以下三個(gè)條件。

  • 一致性(Consistency):每次讀取要么獲得最近寫入的數(shù)據(jù),要么獲得一個(gè)錯(cuò)誤。
  • 可用性(Availability):每次請求都能獲得一個(gè)(非錯(cuò)誤)響應(yīng),但不保證返回的是最新寫入的數(shù)據(jù)。
  • 分區(qū)容忍(Partition tolerance):盡管任意數(shù)量的消息被節(jié)點(diǎn)間的網(wǎng)絡(luò)丟失(或延遲),系統(tǒng)仍繼續(xù)運(yùn)行。

CAP 定理表明,在存在網(wǎng)絡(luò)分區(qū)的情況下,一致性和可用性必須二選一。當(dāng)網(wǎng)絡(luò)發(fā)生分區(qū)(不同節(jié)點(diǎn)之間的網(wǎng)絡(luò)發(fā)生故障或者延遲較大)時(shí),要么失去一致性(允許不同分區(qū)的數(shù)據(jù)寫入),要么失去可用性(識(shí)別到網(wǎng)絡(luò)分區(qū)時(shí)停止服務(wù))。而在沒有發(fā)生網(wǎng)絡(luò)故障時(shí),即分布式系統(tǒng)正常運(yùn)行時(shí),一致性和可用性是可以同時(shí)被滿足的。這里需要注意的是,CAP 定理中的一致性與 ACID 數(shù)據(jù)庫事務(wù)中的一致性截然不同。ACID 的 C 指的是事務(wù)不能破壞任何數(shù)據(jù)庫規(guī)則,如鍵的唯一性。與之相比,CAP 的 C 僅指單一副本這個(gè)意義上的一致性,因此只是 ACID 一致性約束的一個(gè)嚴(yán)格的子集。

CAP 理論看起來難理解,其實(shí)只要抓住一個(gè)核心點(diǎn)就能推導(dǎo)出來,不用死記硬背。在出現(xiàn)網(wǎng)絡(luò)分區(qū)的時(shí)候,

  • 如果系統(tǒng)不允許寫入,那么意味著降低了系統(tǒng)的可用性,但不同分區(qū)的數(shù)據(jù)能夠保持一致,即選擇了一致性。
  • 如果系統(tǒng)允許寫入,那么意味著不同分區(qū)之間的數(shù)據(jù)產(chǎn)生不一致,系統(tǒng)可用性得到保障,即選擇可用性。

CAP 的新理解

CAP 經(jīng)常被誤解,很大程度上是因?yàn)樵谟懻?CAP 的時(shí)候可用性和一致性的作用范圍往往都是含糊不清的。如果不先定義好可用性、一致性、分區(qū)容忍在具體場景下的概念,CAP 實(shí)際上反而會(huì)束縛系統(tǒng)設(shè)計(jì)的思路。首先,由于分區(qū)很少發(fā)生,那么在系統(tǒng)不存在分區(qū)的情況下沒什么理由犧牲 C 或 A。其次,C 與 A 之間的取舍可以在同一系統(tǒng)內(nèi)以非常細(xì)小的粒度反復(fù)發(fā)生,而每一次的決策可能因?yàn)榫唧w的操作,乃至因?yàn)闋可娴教囟ǖ臄?shù)據(jù)或用戶而有所不同。最后,這三種性質(zhì)都可以在程度上都可以進(jìn)行度量,并不是非黑即白的有或無。可用性顯然是在 0% 到 100% 之間連續(xù)變化的,一致性分很多級(jí)別,連分區(qū)也可以細(xì)分為不同含義,如系統(tǒng)內(nèi)的不同部分對(duì)于是否存在分區(qū)可以有不一樣的認(rèn)知。

什么是分區(qū)容忍

在現(xiàn)實(shí)世界中,正常情況下分布式系統(tǒng)各個(gè)節(jié)點(diǎn)之間的通信是可靠的,不會(huì)出現(xiàn)消息丟失或者延遲很高的情況,但是網(wǎng)絡(luò)是不可靠的,總會(huì)偶爾出現(xiàn)消息丟失或者消息延遲很高的情況,這個(gè)時(shí)候不同區(qū)域的節(jié)點(diǎn)之間在一段時(shí)間內(nèi)就會(huì)出現(xiàn)無法通信的情況,也就是發(fā)生了分區(qū)。

分區(qū)容忍就是指分布式系統(tǒng)在出現(xiàn)網(wǎng)絡(luò)分區(qū)的時(shí)候,仍然能繼續(xù)運(yùn)行,對(duì)外提供服務(wù)。注意,這里所說的仍然能夠?qū)ν馓峁┓?wù)跟可用性的要求不一樣,可用性要求的是對(duì)于任意請求都能得到響應(yīng),意味著即使出現(xiàn)網(wǎng)絡(luò)分區(qū)所有節(jié)點(diǎn)都能夠提供服務(wù)。而分區(qū)容忍的重點(diǎn)在于出現(xiàn)網(wǎng)絡(luò)分區(qū)之后,系統(tǒng)仍然是可用的(包括部分可用)。

舉個(gè)例子:使用 Paxos 進(jìn)行數(shù)據(jù)復(fù)制的系統(tǒng)就是典型的 CP 系統(tǒng),即使出現(xiàn)網(wǎng)絡(luò)分區(qū),主分區(qū)也能夠提供服務(wù),所以它是分區(qū)容忍的。再舉個(gè)反例:使用 2PC 進(jìn)行數(shù)據(jù)復(fù)制的系統(tǒng)沒有分區(qū)容忍的特性,當(dāng)出現(xiàn)網(wǎng)絡(luò)分區(qū)時(shí),整個(gè)系統(tǒng)都會(huì)阻塞。

可用性的范圍

可用性其實(shí)很直觀:每次請求都能獲得一個(gè)(非錯(cuò)誤)響應(yīng),但不保證返回的是最新寫入的數(shù)據(jù)。換一個(gè)說法就是對(duì)于分布式系統(tǒng)中的每個(gè)節(jié)點(diǎn),都能夠?qū)ν獠空埱笞龀鲰憫?yīng),但不要求一致性。

經(jīng)常讓我們疑惑的問題是衡量系統(tǒng)可用性的標(biāo)準(zhǔn)是什么?其實(shí)關(guān)鍵點(diǎn)在于可用性的范圍,脫離了具體場景下的可用性范圍是沒有意義的。討論可用性是要有具體場景來劃分邊界的,簡單的認(rèn)為某個(gè)算法是滿足可用性要求其實(shí)并不嚴(yán)謹(jǐn),因?yàn)樵诠こ虒?shí)現(xiàn)中會(huì)有很多的技巧去彌補(bǔ)修正。

舉個(gè)例子:谷歌文檔就是非常典型的 AP 系統(tǒng),它在網(wǎng)絡(luò)斷了的情況下也能夠使用。訣竅在于它在發(fā)現(xiàn)網(wǎng)絡(luò)斷了之后會(huì)進(jìn)入離線模式,允許用戶繼續(xù)進(jìn)行編輯,然后在網(wǎng)絡(luò)恢復(fù)之后再對(duì)修改的內(nèi)容進(jìn)行合并處理。可以發(fā)現(xiàn)對(duì)于谷歌文檔來說,用戶的瀏覽器也是它系統(tǒng)的一個(gè)節(jié)點(diǎn),當(dāng)出現(xiàn)網(wǎng)絡(luò)分區(qū)時(shí),它仍然能夠?yàn)橛脩籼峁┓?wù),但是代價(jià)是放棄了一致性,因?yàn)橛脩糇龅男薷闹挥斜镜刂?#xff0c;服務(wù)端是不清楚的。所以在這個(gè)例子里面,可用性的范圍是包括了用戶瀏覽器在內(nèi)的,不是我們常規(guī)理解的分布式系統(tǒng)的節(jié)點(diǎn)一定就是服務(wù)端的機(jī)器。

值得注意的是在現(xiàn)實(shí)世界中,我們一般不會(huì)去追求完美的可用性,所以一般的說法是高可用,即盡可能保證更多的節(jié)點(diǎn)服務(wù)可用。這也是為什么 Paxos 這類的一致性算法越來越流行的原因之一。

一致性的范圍

討論一致性的時(shí)候必須要明確一致性的范圍,即在一定的邊界內(nèi)狀態(tài)是一致的,超出邊界之外的一致性是無從談起的。比如 Paxos 在發(fā)生網(wǎng)絡(luò)分區(qū)的時(shí)候,在一個(gè)主分區(qū)內(nèi)可以保證完備的一致性和可用性,而在分區(qū)外服務(wù)是不可用的。值得注意的是,當(dāng)系統(tǒng)在分區(qū)的時(shí)候選擇了一致性,也就是 CP,并不意味著完全失去了可用性,這取決于一致性算法的實(shí)現(xiàn)。比如標(biāo)準(zhǔn)的兩階段提交發(fā)生分區(qū)的時(shí)候是完全不可用的,而 Paxos 則保證了主分區(qū)的一致性和可用性。

經(jīng)過上面的討論可以發(fā)現(xiàn),可用性的范圍要求比一致性的范圍要求要更嚴(yán)格,CAP 理論中的可用性要求的是整個(gè)系統(tǒng)的可用性,即使出現(xiàn)部分節(jié)點(diǎn)不可用也算是違反了可用性約束。而一致性的要求則沒有那么高,發(fā)生網(wǎng)絡(luò)分區(qū)的時(shí)候只要保證主分區(qū)數(shù)據(jù)一致性,也認(rèn)為系統(tǒng)是符合一致性約束的。為什么這么說呢?因?yàn)楫?dāng)出現(xiàn)網(wǎng)絡(luò)分區(qū)的時(shí)候,客戶端只要通過訪問主分區(qū)就能得到最新的值(訪問超過半數(shù)以上節(jié)點(diǎn),如果值都相同說明訪問的數(shù)據(jù)是最新的),此時(shí)系統(tǒng)是滿足 CAP 理論中一致性的要求的。

管理分區(qū)

網(wǎng)絡(luò)分區(qū)是分布式系統(tǒng)中必然發(fā)生的事情,經(jīng)典的 CAP 理論是忽略網(wǎng)絡(luò)延遲的,但是在現(xiàn)實(shí)世界中,網(wǎng)絡(luò)延遲跟分區(qū)密切相關(guān)。也就是說當(dāng)系統(tǒng)在有限的時(shí)間內(nèi)無法通信達(dá)成一致(網(wǎng)絡(luò)延遲很高),就意味著發(fā)生了分區(qū)。此時(shí)就需要在一致性和可用性之間做出選擇:選擇繼續(xù)重試就意味著選擇一致性,放棄可用性;放棄數(shù)據(jù)一致性讓操作完成就意味著選擇了可用性。值得注意的是在分區(qū)的時(shí)候放棄數(shù)據(jù)一致性并不是意味著完全不管,一般工程實(shí)現(xiàn)會(huì)采用重試的方式達(dá)到最終一致性。

通過上面的分析可以發(fā)現(xiàn),平衡分區(qū)期間可用性和一致性的影響是分布式系統(tǒng)設(shè)計(jì)中的關(guān)鍵問題。因此,管理分區(qū)不僅是需要主動(dòng)發(fā)現(xiàn)分區(qū),還需要針對(duì)分區(qū)期間產(chǎn)生的影響準(zhǔn)備恢復(fù)過程。也就是說我們可以從另一個(gè)角度來應(yīng)用 CAP 理論:系統(tǒng)進(jìn)入分區(qū)模式的時(shí)候,如何在一致性和可用性之間做出選擇。

管理分區(qū)有三個(gè)步驟:

  • 檢測到分區(qū)開始
  • 明確進(jìn)入分區(qū)模式,限制某些操作
  • 當(dāng)通信恢復(fù)后啟動(dòng)分區(qū)恢復(fù)過程

當(dāng)系統(tǒng)進(jìn)入分區(qū)模式之后,有兩種選擇:

  • 選擇一致性:例如 Paxos 算法,只有大多數(shù)的主分區(qū)能夠進(jìn)行操作,其他分區(qū)不可用,當(dāng)網(wǎng)絡(luò)恢復(fù)之后少數(shù)節(jié)點(diǎn)跟多數(shù)節(jié)點(diǎn)同步數(shù)據(jù)。
  • 選擇可用性:例如谷歌文檔,出現(xiàn)分區(qū)時(shí)進(jìn)入離線模式,等網(wǎng)絡(luò)恢復(fù)了客戶端跟服務(wù)端數(shù)據(jù)進(jìn)行合并恢復(fù)。

總結(jié)

理論抽象于現(xiàn)實(shí),服務(wù)于現(xiàn)實(shí),但絕不等于現(xiàn)實(shí)。對(duì) CAP 理論“三選二”的誤解就源于我們經(jīng)常把理論等同于現(xiàn)實(shí)。CAP 的誕生主要是為了拓寬設(shè)計(jì)思路,不要局限在強(qiáng)一致性的約束中。簡單的把“三選二”進(jìn)行套用反而限制了設(shè)計(jì)思路。在現(xiàn)實(shí)世界中,不同業(yè)務(wù)場景對(duì)可用性和一致性的要求不一樣,并且一致性和可用性的范圍和區(qū)間是動(dòng)態(tài)變化的,并不是非此即彼。因此,準(zhǔn)確理解 CAP 理論,從管理分區(qū)的角度出發(fā),結(jié)合具體的業(yè)務(wù)場景,才能做出更好的系統(tǒng)設(shè)計(jì)。


原文鏈接
本文為云棲社區(qū)原創(chuàng)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載。

總結(jié)

以上是生活随笔為你收集整理的分布式系统:CAP 理论的前世今生的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。