欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

目錄

柚子快報(bào)激活碼778899分享:CAP與BASE分布式理論

柚子快報(bào)激活碼778899分享:CAP與BASE分布式理論

http://yzkb.51969.com/

一、分布式理論

1.CAP理論

CAP理論是說(shuō)對(duì)于分布式數(shù)據(jù)存儲(chǔ),最多只能同時(shí)滿足一致性(C,Consistency)、可用性(A, Availability)、分區(qū)容忍性(P,Partition Tolerance)中的兩者。

CAP 理論又叫 Brewer 理論,這是加州大學(xué)伯克利分校的埃里克 · 布魯爾(Eric Brewer)教授,在 2000 年 7 月“ACM 分布式計(jì)算原理研討會(huì)(PODC)”上提出的一個(gè)猜想。

然后到了 2002 年,麻省理工學(xué)院的賽斯 · 吉爾伯特(Seth Gilbert)和南希 · 林奇(Nancy Lynch)就以嚴(yán)謹(jǐn)?shù)臄?shù)學(xué)推理證明了這個(gè) CAP 猜想。在這之后,CAP 理論就正式成為了分布式計(jì)算領(lǐng)域公認(rèn)的著名定理。

1.一致性

是指對(duì)于每一次讀操作,都能夠讀到最新寫(xiě)入的數(shù)據(jù),且每個(gè)節(jié)點(diǎn)讀取到的數(shù)據(jù)是一致的。

對(duì)于客戶端來(lái)說(shuō),一致性指的是并發(fā)訪問(wèn)更新過(guò)的數(shù)據(jù)如何獲取的問(wèn)題。

從服務(wù)端來(lái)看,則是更新如何復(fù)制分布到整個(gè)節(jié)點(diǎn),以保證數(shù)據(jù)最終一致。

從多個(gè)應(yīng)用系統(tǒng)來(lái)看,是保證各個(gè)業(yè)務(wù)系統(tǒng)冗余的數(shù)據(jù)和主數(shù)據(jù)系統(tǒng)的數(shù)據(jù)一致性。

1.一致性級(jí)別

1、強(qiáng)一致性

這種一致性級(jí)別是最符合用戶直覺(jué)的,它要求系統(tǒng)寫(xiě)入什么,讀出來(lái)的也會(huì)是什么,用戶體驗(yàn)好,但實(shí)現(xiàn)起來(lái)往往對(duì)系統(tǒng)的性能影響大

2、弱一致性

這種一致性級(jí)別約束了系統(tǒng)在寫(xiě)入成功后,不承諾立即可以讀到寫(xiě)入的值,也不承諾多久之后數(shù)據(jù)能夠達(dá)到一致,但會(huì)盡可能地保證到某個(gè)時(shí)間級(jí)別(比如秒級(jí)別)后,數(shù)據(jù)能夠達(dá)到一致?tīng)顟B(tài)

3、最終一致性

最終一致性是弱一致性的一個(gè)特例,系統(tǒng)會(huì)保證在一定時(shí)間內(nèi),能夠達(dá)到一個(gè)數(shù)據(jù)一致的狀態(tài)。這里之所以將最終一致性單獨(dú)提出來(lái),是因?yàn)樗侨跻恢滦灾蟹浅M瞥绲囊环N一致性模型,也是業(yè)界在大型分布式系統(tǒng)的數(shù)據(jù)一致性上比較推崇的模型。

在實(shí)踐中,多個(gè)系統(tǒng)要實(shí)現(xiàn)最終一致性的兜底解決辦法多數(shù)是通過(guò)數(shù)據(jù)比對(duì)來(lái)實(shí)現(xiàn)的,如多個(gè)業(yè)務(wù)系統(tǒng)通過(guò)比對(duì)將生產(chǎn)者數(shù)據(jù)備份的大數(shù)據(jù)平臺(tái)進(jìn)行比對(duì),從而實(shí)現(xiàn)各個(gè)業(yè)務(wù)系統(tǒng)的最終一致性。

2.可用性

可用性:是指對(duì)于每一次請(qǐng)求,都能夠得到一個(gè)及時(shí)的、非錯(cuò)的響應(yīng)。 系統(tǒng)能夠很好的為用戶服務(wù),不出現(xiàn)用戶訪問(wèn)服務(wù)時(shí)服務(wù)器不可用,或者訪問(wèn)超時(shí)等用戶體驗(yàn)不好的情況。

3.分區(qū)容忍性

The system will continue to function when network partitions occur.

即分布式系統(tǒng)在遇到某節(jié)點(diǎn)或網(wǎng)絡(luò)分區(qū)故障的時(shí)候,仍然能夠?qū)ν馓峁M足一致性和可用性的服務(wù)。

分區(qū)容錯(cuò)性要求能夠使應(yīng)用雖然是一個(gè)分布式系統(tǒng),而看上去卻好像是在一個(gè)可以運(yùn)轉(zhuǎn)正常的整體。

它跟趨向于單機(jī)模式的對(duì)比,如一臺(tái)機(jī)器宕機(jī)了,其他機(jī)器一樣能夠提供同等的服務(wù)。但機(jī)器部署得越多,一致性和可用性就越難保證。

比如現(xiàn)在的分布式系統(tǒng)中有某一個(gè)或者幾個(gè)機(jī)器宕掉了,其他剩下的機(jī)器還能夠正常運(yùn)轉(zhuǎn)滿足系統(tǒng)需求,對(duì)于用戶而言并沒(méi)有什么體驗(yàn)上的影響。

2. CAP的選型

當(dāng)然,單純只看這個(gè)概念的話,CAP 是比較抽象的,我還是事例場(chǎng)景來(lái)說(shuō)明一下,這三種特性對(duì)分布式系統(tǒng)來(lái)說(shuō)都意味著什么。

事例場(chǎng)景:Fenix's Bookstore 是一個(gè)在線書(shū)店。一份商品成功售出,需要確保以下三件事情被正確地處理:

1.用戶的賬號(hào)扣減相應(yīng)的商品款項(xiàng);

2.商品倉(cāng)庫(kù)中扣減庫(kù)存,將商品標(biāo)識(shí)為待配送狀態(tài);

3.商家的賬號(hào)增加相應(yīng)的商品款項(xiàng)。

假設(shè),F(xiàn)enix's Bookstore 的服務(wù)拓?fù)淙缦聢D所示,一個(gè)來(lái)自最終用戶的交易請(qǐng)求,將交由賬號(hào)、商家和倉(cāng)庫(kù)服務(wù)集群中的某一個(gè)節(jié)點(diǎn)來(lái)完成響應(yīng):

你可以看到,在這套系統(tǒng)中,每一個(gè)單獨(dú)的服務(wù)節(jié)點(diǎn)都有著自己的數(shù)據(jù)庫(kù)。

假設(shè)某次交易請(qǐng)求分別由“賬號(hào)節(jié)點(diǎn) 1”“商家節(jié)點(diǎn) 2”“倉(cāng)庫(kù)節(jié)點(diǎn) N”來(lái)進(jìn)行響應(yīng),當(dāng)用戶購(gòu)買(mǎi)一件價(jià)值 100 元的商品后,賬號(hào)節(jié)點(diǎn) 1 首先應(yīng)該給用戶賬號(hào)扣減 100 元貨款。賬號(hào)節(jié)點(diǎn) 1 在自己的數(shù)據(jù)庫(kù)扣減 100 元是很容易的,但它還要把這次交易變動(dòng)告知賬號(hào)節(jié)點(diǎn) 2 到 N,以及確保能正確變更商家和倉(cāng)庫(kù)集群其他賬號(hào)節(jié)點(diǎn)中的關(guān)聯(lián)數(shù)據(jù)。

那么此時(shí),我們可能會(huì)面臨以下幾種情況:?

1.如果該變動(dòng)信息沒(méi)有及時(shí)同步給其他賬號(hào)節(jié)點(diǎn),那么當(dāng)用戶購(gòu)買(mǎi)其他商品時(shí),會(huì)被分配給另一個(gè)節(jié)點(diǎn)處理,因?yàn)闆](méi)有及時(shí)同步,此時(shí)系統(tǒng)會(huì)看到用戶賬戶上有不正確的余額,從而錯(cuò)誤地發(fā)生了原本無(wú)法進(jìn)行的交易。此為一致性問(wèn)題。

2.如果因?yàn)橐言撟儎?dòng)信息同步給其他賬號(hào)節(jié)點(diǎn),就必須暫停對(duì)該用戶的交易服務(wù),直到數(shù)據(jù)同步一致后再重新恢復(fù),那么當(dāng)用戶在下一次購(gòu)買(mǎi)商品時(shí),可能會(huì)因?yàn)橄到y(tǒng)暫時(shí)無(wú)法提供服務(wù)而被拒絕交易。此為可用性問(wèn)題。

3.如果由于賬號(hào)服務(wù)集群中某一部分節(jié)點(diǎn),因出現(xiàn)網(wǎng)絡(luò)問(wèn)題,無(wú)法正常與另一部分節(jié)點(diǎn)交換賬號(hào)變動(dòng)信息,那么此時(shí)的服務(wù)集群中,無(wú)論哪一部分節(jié)點(diǎn)對(duì)外提供的服務(wù),都可能是不正確的,我們需要考慮能否接受由于部分節(jié)點(diǎn)之間的連接中斷,而影響整個(gè)集群的正確性的情況。此為分區(qū)容忍性問(wèn)題。

以上還只是涉及到了賬號(hào)服務(wù)集群自身的 CAP 問(wèn)題,而對(duì)于整個(gè) Bookstore 站點(diǎn)來(lái)說(shuō),它更是面臨著來(lái)自于賬號(hào)、商家和倉(cāng)庫(kù)服務(wù)集群帶來(lái)的 CAP 問(wèn)題。

比如,用戶賬號(hào)扣款后,由于沒(méi)有及時(shí)通知倉(cāng)庫(kù)服務(wù),導(dǎo)致另一次交易中看到倉(cāng)庫(kù)中有不正確的庫(kù)存數(shù)據(jù)而發(fā)生了超售。再比如,因?yàn)閭}(cāng)庫(kù)中某個(gè)商品的交易正在進(jìn)行當(dāng)中,為了同步用戶、商家和倉(cāng)庫(kù)此時(shí)的交易變動(dòng),而暫時(shí)鎖定了該商品的交易服務(wù),導(dǎo)致了可用性問(wèn)題,等等。

不過(guò)既然 CAP 理論已經(jīng)有了數(shù)學(xué)證明,也成為了業(yè)界公認(rèn)的計(jì)算定理,我們就不去討論為何 CAP 特性會(huì)存在不可兼得的問(wèn)題了,直接來(lái)分析下在實(shí)際的應(yīng)用場(chǎng)景中,我們要如何權(quán)衡取舍 CAP,然后看看這些不同取舍都會(huì)帶來(lái)哪些問(wèn)題。

如果放棄分區(qū)容錯(cuò)性(CA without P)

這意味著,我們將假設(shè)節(jié)點(diǎn)之間的通訊永遠(yuǎn)是可靠的??墒怯肋h(yuǎn)可靠的通訊在分布式系統(tǒng)中必定是不成立的,這不是你想不想的問(wèn)題,而是網(wǎng)絡(luò)分區(qū)現(xiàn)象始終會(huì)存在。在現(xiàn)實(shí)場(chǎng)景中,主流的 RDBMS(關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng))集群通常就是采用放棄分區(qū)容錯(cuò)性的工作模式。以 Oracle 的 RAC 集群為例,它的每一個(gè)節(jié)點(diǎn)都有自己的 SGA(系統(tǒng)全局區(qū))、重做日志、回滾日志等,但各個(gè)節(jié)點(diǎn)是共享磁盤(pán)中的同一份數(shù)據(jù)文件和控制文件的,也就是說(shuō),RAC 集群是通過(guò)共享磁盤(pán)的方式來(lái)避免網(wǎng)絡(luò)分區(qū)的出現(xiàn)。

如果放棄可用性(CP without A)

這意味著,我們將假設(shè)一旦發(fā)生分區(qū),節(jié)點(diǎn)之間的信息同步時(shí)間可以無(wú)限制地延長(zhǎng),那么這個(gè)問(wèn)題就相當(dāng)于退化到了上一講所討論的全局事務(wù)的場(chǎng)景之中,即一個(gè)系統(tǒng)可以使用多個(gè)數(shù)據(jù)源。我們可以通過(guò) 2PC/3PC 等手段,同時(shí)獲得分區(qū)容錯(cuò)性和一致性。在現(xiàn)實(shí)中,除了 DTP 模型的分布式數(shù)據(jù)庫(kù)事務(wù)外,著名的 HBase 也是屬于 CP 系統(tǒng)。以它的集群為例,假如某個(gè) RegionServer 宕機(jī)了,這個(gè) RegionServer 持有的所有鍵值范圍都將離線,直到數(shù)據(jù)恢復(fù)過(guò)程完成為止,這個(gè)時(shí)間通常會(huì)是很長(zhǎng)的。

如果放棄一致性(AP without C)

這意味著,我們將假設(shè)一旦發(fā)生分區(qū),節(jié)點(diǎn)之間所提供的數(shù)據(jù)可能不一致。AP 系統(tǒng)目前是分布式系統(tǒng)設(shè)計(jì)的主流選擇,大多數(shù)的 NoSQL 庫(kù)和支持分布式的緩存都是 AP 系統(tǒng)。因?yàn)?P 是分布式網(wǎng)絡(luò)的天然屬性,你不想要也無(wú)法丟棄;而 A 通常是建設(shè)分布式的目的,如果可用性隨著節(jié)點(diǎn)數(shù)量增加反而降低的話,很多分布式系統(tǒng)可能就沒(méi)有存在的價(jià)值了(除非銀行這些涉及到金錢(qián)交易的服務(wù),寧可中斷也不能出錯(cuò))。以 Redis 集群為例,如果某個(gè) Redis 節(jié)點(diǎn)出現(xiàn)網(wǎng)絡(luò)分區(qū),那也不妨礙每個(gè)節(jié)點(diǎn)仍然會(huì)以自己本地的數(shù)據(jù)對(duì)外提供服務(wù)。但這時(shí)有可能出現(xiàn)這種情況,即請(qǐng)求分配到不同節(jié)點(diǎn)時(shí),返回給客戶端的是不同的數(shù)據(jù)。

1.cap無(wú)法同時(shí)滿足原因

CP和AP:分區(qū)容錯(cuò)是必須保證的,當(dāng)發(fā)生網(wǎng)絡(luò)分區(qū)的時(shí)候,如果要繼續(xù)服務(wù),那么強(qiáng)一致性和可用性只能 2 選 1

C A 滿足的情況下,P不能滿足的原因: 數(shù)據(jù)同步?需要時(shí)間,也要正常的時(shí)間內(nèi)響應(yīng)(A),那么機(jī)器數(shù)量就要少,所以P就不滿足。 若p不能滿足,就已經(jīng)趨向于單機(jī)了。

CP 滿足的情況下,A不能滿足的原因: 數(shù)據(jù)同步?需要時(shí)間, 機(jī)器數(shù)量也多§,但是同步數(shù)據(jù)需要時(shí)間,所以不能再正常時(shí)間內(nèi)響應(yīng),所以A就不滿足

AP 滿足的情況下,C不能滿足的原因: 機(jī)器數(shù)量也多§,正常的時(shí)間內(nèi)響應(yīng)(A),那么數(shù)據(jù)就不能及時(shí)同步到其他節(jié)點(diǎn),所以C不滿足 ?

2.CAP 關(guān)注的粒度是數(shù)據(jù),而不是整個(gè)系統(tǒng)。

原文就只有一句話:

C 與 A 之間的取舍可以在同一系統(tǒng)內(nèi)以非常細(xì)小的粒度反復(fù)發(fā)生,而每一次的決策可能因?yàn)榫唧w的操作,乃至因?yàn)闋可娴教囟ǖ臄?shù)據(jù)或用戶而有所不同。

但這句話是理解和應(yīng)用 CAP 理論非常關(guān)鍵的一點(diǎn)。CAP 理論的定義和解釋中,用的都是 system、node 這類(lèi)系統(tǒng)級(jí)的概念,這就給很多人造成了很大的誤導(dǎo),認(rèn)為我們?cè)谶M(jìn)行架構(gòu)設(shè)計(jì)時(shí),整個(gè)系統(tǒng)要么選擇 CP,要么選擇 AP。但在實(shí)際設(shè)計(jì)過(guò)程中,每個(gè)系統(tǒng)不可能只處理一種數(shù)據(jù),而是包含多種類(lèi)型的數(shù)據(jù),有的數(shù)據(jù)必須選擇 CP,有的數(shù)據(jù)必須選擇 AP。而如果我們做設(shè)計(jì)時(shí),從整個(gè)系統(tǒng)的角度去選擇 CP 還是 AP,就會(huì)發(fā)現(xiàn)顧此失彼,無(wú)論怎么做都是有問(wèn)題的。

以一個(gè)最簡(jiǎn)單的用戶管理系統(tǒng)為例,用戶管理系統(tǒng)包含用戶賬號(hào)數(shù)據(jù)(用戶 ID、密碼)、用戶信息數(shù)據(jù)(昵稱(chēng)、興趣、愛(ài)好、性別、自我介紹等)。通常情況下,用戶賬號(hào)數(shù)據(jù)會(huì)選擇 CP,而用戶信息數(shù)據(jù)會(huì)選擇 AP,如果限定整個(gè)系統(tǒng)為 CP,則不符合用戶信息數(shù)據(jù)的應(yīng)用場(chǎng)景;如果限定整個(gè)系統(tǒng)為 AP,則又不符合用戶賬號(hào)數(shù)據(jù)的應(yīng)用場(chǎng)景。

所以在 CAP 理論落地實(shí)踐時(shí),我們需要將系統(tǒng)內(nèi)的數(shù)據(jù)按照不同的應(yīng)用場(chǎng)景和要求進(jìn)行分類(lèi),每類(lèi)數(shù)據(jù)選擇不同的策略(CP 還是 AP),而不是直接限定整個(gè)系統(tǒng)所有數(shù)據(jù)都是同一策略。

正常運(yùn)行情況下,不存在 CP 和 AP 的選擇,可以同時(shí)滿足 CA。

CAP 理論告訴我們分布式系統(tǒng)只能選擇 CP 或者 AP,但其實(shí)這里的前提是系統(tǒng)發(fā)生了“分區(qū)”現(xiàn)象。如果系統(tǒng)沒(méi)有發(fā)生分區(qū)現(xiàn)象,也就是說(shuō) P 不存在的時(shí)候(節(jié)點(diǎn)間的網(wǎng)絡(luò)連接一切正常),我們沒(méi)有必要放棄 C 或者 A,應(yīng)該 C 和 A 都可以保證,這就要求架構(gòu)設(shè)計(jì)的時(shí)候既要考慮分區(qū)發(fā)生時(shí)選擇 CP 還是 AP,也要考慮分區(qū)沒(méi)有發(fā)生時(shí)如何保證 CA。

同樣以用戶管理系統(tǒng)為例,即使是實(shí)現(xiàn) CA,不同的數(shù)據(jù)實(shí)現(xiàn)方式也可能不一樣:用戶賬號(hào)數(shù)據(jù)可以采用“消息隊(duì)列”的方式來(lái)實(shí)現(xiàn) CA,因?yàn)橄㈥?duì)列可以比較好地控制實(shí)時(shí)性,但實(shí)現(xiàn)起來(lái)就復(fù)雜一些;而用戶信息數(shù)據(jù)可以采用“數(shù)據(jù)庫(kù)同步”的方式來(lái)實(shí)現(xiàn) CA,因?yàn)閿?shù)據(jù)庫(kù)的方式雖然在某些場(chǎng)景下可能延遲較高,但使用起來(lái)簡(jiǎn)單。

放棄并不等于什么都不做,需要為分區(qū)恢復(fù)后做準(zhǔn)備,即補(bǔ)償機(jī)制

CAP 理論告訴我們?nèi)咧荒苋蓚€(gè),需要“犧牲”(sacrificed)另外一個(gè),這里的“犧牲”是有一定誤導(dǎo)作用的,因?yàn)椤盃奚弊尯芏嗳死斫獬墒裁炊疾蛔?。?shí)際上,CAP 理論的“犧牲”只是說(shuō)在分區(qū)過(guò)程中我們無(wú)法保證 C 或者 A,但并不意味著什么都不做。因?yàn)樵谙到y(tǒng)整個(gè)運(yùn)行周期中,大部分時(shí)間都是正常的,發(fā)生分區(qū)現(xiàn)象的時(shí)間并不長(zhǎng)。例如,99.99% 可用性(俗稱(chēng) 4 個(gè) 9)的系統(tǒng),一年運(yùn)行下來(lái),不可用的時(shí)間只有 50 分鐘;99.999%(俗稱(chēng) 5 個(gè) 9)可用性的系統(tǒng),一年運(yùn)行下來(lái),不可用的時(shí)間只有 5 分鐘。分區(qū)期間放棄 C 或者 A,并不意味著永遠(yuǎn)放棄 C 和 A,我們可以在分區(qū)期間進(jìn)行一些操作,從而讓分區(qū)故障解決后,系統(tǒng)能夠重新達(dá)到 CA 的狀態(tài)。

最典型的就是在分區(qū)期間記錄一些日志,當(dāng)分區(qū)故障解決后,系統(tǒng)根據(jù)日志進(jìn)行數(shù)據(jù)恢復(fù),使得重新達(dá)到 CA 狀態(tài)。

同樣以用戶管理系統(tǒng)為例,對(duì)于用戶賬號(hào)數(shù)據(jù),假設(shè)我們選擇了 CP,則分區(qū)發(fā)生后,節(jié)點(diǎn) 1 可以繼續(xù)注冊(cè)新用戶,節(jié)點(diǎn) 2 無(wú)法注冊(cè)新用戶(這里就是不符合 A 的原因,因?yàn)楣?jié)點(diǎn) 2 收到注冊(cè)請(qǐng)求后會(huì)返回 error),此時(shí)節(jié)點(diǎn) 1 可以將新注冊(cè)但未同步到節(jié)點(diǎn) 2 的用戶記錄到日志中。當(dāng)分區(qū)恢復(fù)后,節(jié)點(diǎn) 1 讀取日志中的記錄,同步給節(jié)點(diǎn) 2,當(dāng)同步完成后,節(jié)點(diǎn) 1 和節(jié)點(diǎn) 2 就達(dá)到了同時(shí)滿足 CA 的狀態(tài)。

而對(duì)于用戶信息數(shù)據(jù),假設(shè)我們選擇了 AP,則分區(qū)發(fā)生后,節(jié)點(diǎn) 1 和節(jié)點(diǎn) 2 都可以修改用戶信息,但兩邊可能修改不一樣。例如,用戶在節(jié)點(diǎn) 1 中將愛(ài)好改為“旅游、美食、跑步”,然后用戶在節(jié)點(diǎn) 2 中將愛(ài)好改為“美食、游戲”,節(jié)點(diǎn) 1 和節(jié)點(diǎn) 2 都記錄了未同步的愛(ài)好數(shù)據(jù),當(dāng)分區(qū)恢復(fù)后,系統(tǒng)按照某個(gè)規(guī)則來(lái)合并數(shù)據(jù)。例如,按照“最后修改優(yōu)先規(guī)則”將用戶愛(ài)好修改為“美食、游戲”,按照“字?jǐn)?shù)最多優(yōu)先規(guī)則”則將用戶愛(ài)好修改為“旅游,美食、跑步”,也可以完全將數(shù)據(jù)沖突報(bào)告出來(lái),由人工來(lái)選擇具體應(yīng)該采用哪一條。

3.分區(qū)的分布式架構(gòu)

我們可以將用戶 id 為 0 ~ 100 的數(shù)據(jù)存儲(chǔ)在 Node 1,將用戶 id 為 101 ~ 200 的數(shù)據(jù)存儲(chǔ)在 Node 2,Client 根據(jù)用戶 id 來(lái)決定訪問(wèn)哪個(gè) Node。對(duì)于單個(gè)用戶來(lái)說(shuō),讀寫(xiě)操作都只能在某個(gè)節(jié)點(diǎn)上進(jìn)行;對(duì)所有用戶來(lái)說(shuō),有一部分用戶的讀寫(xiě)操作在 Node 1 上,有一部分用戶的讀寫(xiě)操作在 Node 2 上。

這樣的設(shè)計(jì)有一個(gè)很明顯的問(wèn)題就是某個(gè)節(jié)點(diǎn)故障時(shí),這個(gè)節(jié)點(diǎn)上的用戶就無(wú)法進(jìn)行讀寫(xiě)操作了,但站在整體上來(lái)看,這種設(shè)計(jì)可以降低節(jié)點(diǎn)故障時(shí)受影響的用戶的數(shù)量和范圍,畢竟只影響 20% 的用戶肯定要比影響所有用戶要好。這也是為什么挖掘機(jī)挖斷光纜后,支付寶只有一部分用戶會(huì)出現(xiàn)業(yè)務(wù)異常,而不是所有用戶業(yè)務(wù)異常的原因。

即這樣設(shè)計(jì)能夠保證CAP(其實(shí)更多的是CA,因?yàn)榛旧鲜且粋€(gè)節(jié)點(diǎn)進(jìn)行讀寫(xiě)了),但是當(dāng)節(jié)點(diǎn)發(fā)生故障時(shí),會(huì)犧牲一定時(shí)間的無(wú)法寫(xiě)的操作,讀操作當(dāng)發(fā)現(xiàn)系統(tǒng)故障時(shí)可以路由到其他節(jié)點(diǎn)讀取。

3. BASE理論

BASE是Basically Available(基本可用)、Soft state(軟狀態(tài))和Eventually consistent(最終一致性)三個(gè)短語(yǔ)的縮寫(xiě)。 BASE理論是對(duì)CAP中一致性和可用性權(quán)衡的結(jié)果,其來(lái)源于對(duì)大規(guī)?;ヂ?lián)網(wǎng)系統(tǒng)分布式實(shí)踐的總結(jié), 是基于CAP定理逐步演化而來(lái)的。

BASE理論的核心思想是對(duì) CAP 的延伸和補(bǔ)充,更具體地說(shuō),是對(duì) CAP 中 AP 方案的一個(gè)補(bǔ)充。即使無(wú)法做到強(qiáng)一致性,但每個(gè)應(yīng)用都可以根據(jù)自身業(yè)務(wù)特點(diǎn),采用適當(dāng)?shù)姆绞絹?lái)使系統(tǒng)達(dá)到最終一致性。

總的來(lái)說(shuō),BASE理論面向的是大型高可用可擴(kuò)展的分布式系統(tǒng),和傳統(tǒng)的事物ACID特性是相反的,它完全不同于ACID的強(qiáng)一致性模型,而是通過(guò)犧牲強(qiáng)一致性來(lái)獲得可用性,并允許數(shù)據(jù)在一段時(shí)間內(nèi)是不一致的,但最終達(dá)到一致?tīng)顟B(tài)。

但同時(shí),在實(shí)際的分布式場(chǎng)景中,不同業(yè)務(wù)單元和組件對(duì)數(shù)據(jù)一致性的要求是不同的,因此在具體的分布式系統(tǒng)架構(gòu)設(shè)計(jì)過(guò)程中,ACID特性和BASE理論往往又會(huì)結(jié)合在一起。

接下來(lái)看一下BASE中的三要素:

1.基本可用

分布式系統(tǒng)在出現(xiàn)故障時(shí),允許損失部分可用性,即保證核心可用,這意味著,系統(tǒng)可以出現(xiàn)暫時(shí)不可用的狀態(tài),而后面會(huì)快速恢復(fù)。

注意:這絕不等價(jià)于系統(tǒng)不可用。

比如:

(1)響應(yīng)時(shí)間上的損失–超時(shí)機(jī)制。正常情況下,一個(gè)在線搜索引擎需要在0.5秒之內(nèi)返回給用戶相應(yīng)的查詢結(jié)果,但由于出現(xiàn)故障,查詢結(jié)果的響應(yīng)時(shí)間增加了1~2秒

(2)系統(tǒng)功能上的損失–服務(wù)降級(jí)機(jī)制:正常情況下,在一個(gè)電子商務(wù)網(wǎng)站上進(jìn)行購(gòu)物的時(shí)候,消費(fèi)者幾乎能夠順利完成每一筆訂單,但是在一些節(jié)日大促購(gòu)物高峰的時(shí)候,由于消費(fèi)者的購(gòu)物行為激增,為了保護(hù)購(gòu)物系統(tǒng)的穩(wěn)定性,部分消費(fèi)者可能會(huì)被引導(dǎo)到一個(gè)降級(jí)頁(yè)面

這里的關(guān)鍵詞是“部分”和“核心”,具體選擇哪些作為可以損失的業(yè)務(wù),哪些是必須保證的業(yè)務(wù),是一項(xiàng)有挑戰(zhàn)的工作。

例如,對(duì)于一個(gè)用戶管理系統(tǒng)來(lái)說(shuō),“登錄”是核心功能,而“注冊(cè)”可以算作非核心功能。因?yàn)槲醋?cè)的用戶本來(lái)就還沒(méi)有使用系統(tǒng)的業(yè)務(wù),注冊(cè)不了最多就是流失一部分用戶,而且這部分用戶數(shù)量較少。如果用戶已經(jīng)注冊(cè)但無(wú)法登錄,那就意味用戶無(wú)法使用系統(tǒng)。例如,充了錢(qián)的游戲不能玩了、云存儲(chǔ)不能用了……這些會(huì)對(duì)用戶造成較大損失,而且登錄用戶數(shù)量遠(yuǎn)遠(yuǎn)大于新注冊(cè)用戶,影響范圍更大。

2.軟狀態(tài)

軟狀態(tài)指允許系統(tǒng)中的數(shù)據(jù)存在中間狀態(tài),并認(rèn)為該中間狀態(tài)的存在不會(huì)影響系統(tǒng)的整體可用性,且允許系統(tǒng)在不同節(jié)點(diǎn)的數(shù)據(jù)副本之間進(jìn)行數(shù)據(jù)同步的過(guò)程存在延時(shí)。

即數(shù)據(jù)同步允許一定的延遲,此時(shí)可能存在不同節(jié)點(diǎn)的數(shù)據(jù)暫時(shí)不一致情況。

它是我們前面的“有狀態(tài)”和“無(wú)狀態(tài)”的服務(wù)的一種中間狀態(tài)。也就是說(shuō),為了提高性能,我們可以讓服務(wù)暫時(shí)保存一些狀態(tài)或數(shù)據(jù),這些狀態(tài)和數(shù)據(jù)不是強(qiáng)一致性的。

3.最終一致性

最終一致性強(qiáng)調(diào)的是所有的數(shù)據(jù)副本,在經(jīng)過(guò)一段時(shí)間的同步之后,最終都能夠達(dá)到一個(gè)一致的狀態(tài)而不要求實(shí)時(shí)。

因此,最終一致性的本質(zhì)是需要系統(tǒng)保證最終數(shù)據(jù)能夠達(dá)到一致,而不需要實(shí)時(shí)保證系統(tǒng)數(shù)據(jù)的強(qiáng)一致性。

這里的關(guān)鍵詞是“一定時(shí)間” 和 “最終”,“一定時(shí)間”和數(shù)據(jù)的特性是強(qiáng)關(guān)聯(lián)的,不同的數(shù)據(jù)能夠容忍的不一致時(shí)間是不同的。

舉一個(gè)微博系統(tǒng)的例子,用戶賬號(hào)數(shù)據(jù)最好能在 1 分鐘內(nèi)就達(dá)到一致?tīng)顟B(tài),因?yàn)橛脩粼?A 節(jié)點(diǎn)注冊(cè)或者登錄后,1 分鐘內(nèi)不太可能立刻切換到另外一個(gè)節(jié)點(diǎn),但 10 分鐘后可能就重新登錄到另外一個(gè)節(jié)點(diǎn)了;而用戶發(fā)布的最新微博,可以容忍 30 分鐘內(nèi)達(dá)到一致?tīng)顟B(tài),因?yàn)閷?duì)于用戶來(lái)說(shuō),看不到某個(gè)明星發(fā)布的最新微博,用戶是無(wú)感知的,會(huì)認(rèn)為明星沒(méi)有發(fā)布微博?!白罱K”的含義就是不管多長(zhǎng)時(shí)間,最終還是要達(dá)到一致性的狀態(tài)。

4.BASE理論和ACID的應(yīng)用場(chǎng)景分析

舉個(gè)例子,網(wǎng)上賣(mài)書(shū)的場(chǎng)景。

ACID 的玩法就是,大家在買(mǎi)同一本書(shū)的過(guò)程中,每個(gè)用戶的購(gòu)買(mǎi)請(qǐng)求都需要把庫(kù)存鎖住,等減完庫(kù)存后,把鎖釋放出來(lái),后續(xù)的人才能進(jìn)行購(gòu)買(mǎi)。于是,在 ACID 的玩法下,我們?cè)谕粫r(shí)間不可能有多個(gè)用戶下單,我們的訂單流程需要有排隊(duì)的情況,這樣一來(lái),我們就不可能做出性能比較高的系統(tǒng)來(lái)。

BASE 的玩法是,大家都可以同時(shí)下單,這個(gè)時(shí)候不需要去真正地分配庫(kù)存,然后系統(tǒng)異步地處理訂單,而且是批量的處理。因?yàn)橄聠蔚臅r(shí)候沒(méi)有真正去扣減庫(kù)存,所以,有可能會(huì)有超賣(mài)的情況。而后臺(tái)的系統(tǒng)會(huì)異步地處理訂單時(shí),發(fā)現(xiàn)庫(kù)存沒(méi)有了,于是才會(huì)告訴用戶你沒(méi)有購(gòu)買(mǎi)成功。

BASE 這種玩法,其實(shí)就是亞馬遜的玩法,因?yàn)橐鶕?jù)用戶的地址去不同的倉(cāng)庫(kù)查看庫(kù)存,這個(gè)操作非常耗時(shí),所以,不想做成異步的都不行。

在亞馬遜上買(mǎi)東西,你會(huì)收到一封郵件說(shuō),系統(tǒng)收到你的訂單了,然后過(guò)一會(huì)兒你會(huì)收到你的訂單被確認(rèn)的郵件,這時(shí)候才是真正地分配了庫(kù)存。所以,有某些時(shí)候,你會(huì)遇到你先收到了下單的郵件,過(guò)一會(huì)又收到了沒(méi)有庫(kù)存的致歉的郵件。

有趣的是,ACID 的意思是酸,而 BASE 卻是堿的意思,因此這是一個(gè)對(duì)立的東西。其實(shí),從本質(zhì)上來(lái)講,酸(ACID)強(qiáng)調(diào)的是一致性(CAP 中的 C),而堿(BASE)強(qiáng)調(diào)的是可用性(CAP 中的 A)。

柚子快報(bào)激活碼778899分享:CAP與BASE分布式理論

http://yzkb.51969.com/

相關(guān)鏈接

評(píng)論可見(jiàn),查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。

轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/18975328.html

發(fā)布評(píng)論

您暫未設(shè)置收款碼

請(qǐng)?jiān)谥黝}配置——文章設(shè)置里上傳

掃描二維碼手機(jī)訪問(wèn)

文章目錄