成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

我對(duì)分布式一致性協(xié)議的學(xué)習(xí)心得 - CAP、BASE、NWR

Tecode / 2307人閱讀

摘要:當(dāng)發(fā)生網(wǎng)絡(luò)分區(qū)時(shí),你將面臨兩個(gè)選擇如果堅(jiān)持保持各節(jié)點(diǎn)之間的數(shù)據(jù)一致性選擇,你需要等待網(wǎng)絡(luò)分區(qū)恢復(fù)后,將數(shù)據(jù)復(fù)制完成,才可以向外部提供服務(wù)。期間發(fā)生網(wǎng)絡(luò)分區(qū)將不能對(duì)外提供服務(wù),因?yàn)樗WC不了數(shù)據(jù)一致性。則強(qiáng)調(diào)是高可用,對(duì)數(shù)據(jù)一致性要求更低。

這篇文章著重點(diǎn)不在于科普,畢竟關(guān)于CAP、BASE的理論的文章,網(wǎng)上很多。所以本文科普篇幅盡量小(只包含概念描述)。主要從幾個(gè)側(cè)面的問題來描述CAP,進(jìn)而描述ACID、BASE理念。然后加入一點(diǎn)點(diǎn)調(diào)料,如何動(dòng)態(tài)的切換一致性強(qiáng)度。

本文通過以下幾個(gè)問題,從側(cè)面描述。文中個(gè)人觀點(diǎn)較多,看官理性對(duì)待。

  • 為什么CAP三者不可兼得?
  • 為什么總把ACID與CP、BASE與AP放在一起,它們有什么關(guān)聯(lián)?
  • eureka屬于AP系統(tǒng)嗎?它明明沒有放棄一致性???
  • 不考慮一致性的系統(tǒng),有什么存在的意義呢?

CAP定理科普
CAP定理,指的是在一個(gè)分布式系統(tǒng)中,一致性(Consistency)、可用性(Availability)、分區(qū)容錯(cuò)性(Partition tolerance)。這三個(gè)要素最多只能同時(shí)實(shí)現(xiàn)兩點(diǎn),不可能三者兼顧。

一致性(C):這里是指強(qiáng)一致性。在分布式系統(tǒng)中的所有數(shù)據(jù)備份,在同一時(shí)刻是否同樣的值。并不是指整個(gè)系統(tǒng)能提供最新的一致的數(shù)據(jù)。
可用性(A):這里是指100%可用性??蛻舳藷o論訪問到哪個(gè)沒有宕機(jī)的節(jié)點(diǎn)上,都能在有限的時(shí)間內(nèi)返回結(jié)果,并不是指整個(gè)系統(tǒng)處于可用狀態(tài)。
分區(qū)容錯(cuò)性(P):網(wǎng)絡(luò)中允許丟失一個(gè)節(jié)點(diǎn)發(fā)給另一個(gè)節(jié)點(diǎn)的任意多的消息,即對(duì)網(wǎng)絡(luò)分區(qū)的容忍。在發(fā)生網(wǎng)絡(luò)分區(qū)時(shí),能繼續(xù)保持可用性或者一致性。一個(gè)系統(tǒng)要求在運(yùn)行過程中不能發(fā)生網(wǎng)絡(luò)分區(qū),那么這個(gè)系統(tǒng)就不具備分區(qū)容錯(cuò)性。
CAP定理中的可用性和一致性與用戶感知的可用性和一致性不是一個(gè)概念。我們追求的應(yīng)該是用戶感知的可用性,CAP中可用性和一致性給我們只是起到指導(dǎo)性的作用。

2017 年,Google 公司的第一代 Spanner 系統(tǒng)已經(jīng)誕生。Brewer 寫了一篇文章講述了 Google 公司的 Spanner 系統(tǒng),并且近一步闡述了按照 CAP 定理 Spanner 是一個(gè)什么樣特性的系統(tǒng)。在文中,Brewer 指出 Spanner 系統(tǒng)說是"實(shí)際上的 CA"(effectively CA)系統(tǒng)。從架構(gòu)上來講,Spanner 是一個(gè) CP 系統(tǒng),也就是說當(dāng)出現(xiàn)網(wǎng)絡(luò)分區(qū)時(shí),Spanner 選擇的是保證數(shù)據(jù)的一致性,放棄可用性的。但實(shí)際上,Spanner 是具有非常高可用性效果的一個(gè)系統(tǒng),從架構(gòu)上 Spanner 沒有達(dá)到 CAP 定理要求的那種完全可用性,但是也達(dá)到非常高的可用性,由于采用多副本的設(shè)計(jì),個(gè)別副本出現(xiàn)網(wǎng)絡(luò)分區(qū),并不影響用戶能感知到的可用性。按 CAP 定理的定義,當(dāng)這些個(gè)別副本出現(xiàn)網(wǎng)絡(luò)分區(qū)時(shí),這些節(jié)點(diǎn)是不可用的,也就是系統(tǒng)沒有達(dá)到完全可用性。但是此時(shí)的用戶請(qǐng)求是可以被其他副本服務(wù)的,此時(shí)服務(wù)是可用的,也就是說用戶仍然感知到 Spanner 是可用的。所以說用戶感知的可用性和 CAP 定理中的可用性不是一個(gè)概念。我們追求的應(yīng)該是用戶感知的可用性。

BASE定理科普
BASE是對(duì)一致性和可用性權(quán)衡所得的結(jié)果。其核心思想是:在某些場(chǎng)景中,無需做到強(qiáng)一致性,以保證系統(tǒng)的可用性,同時(shí)每個(gè)應(yīng)用可以采用適當(dāng)?shù)姆绞绞瓜到y(tǒng)數(shù)據(jù)達(dá)到最終一致性。

BASE分別是指:Basically Available, Soft State, Eventual Consistency

基本可用(Basically Available):分布式系統(tǒng)在出現(xiàn)故障的時(shí)候,允許損失部分可用性,但不等于系統(tǒng)不可用。例如:響應(yīng)時(shí)間的損失,功能上降級(jí)。
軟狀態(tài)(Soft State):允許系統(tǒng)中的數(shù)據(jù)存在中間狀態(tài),并認(rèn)為該狀態(tài)不會(huì)影響系統(tǒng)整體可用性。即允許節(jié)點(diǎn)之間數(shù)據(jù)同步存在延時(shí)
最終一致性(Eventually Consistent):本質(zhì)是指系統(tǒng)需要使數(shù)據(jù)最終達(dá)到一致性,而不需要實(shí)時(shí)使數(shù)據(jù)達(dá)到一致性

ACID科普
對(duì)于ACID中一致性描述,可能理解都不一樣,需要先統(tǒng)一下概念。

ACID中的C(一致性)的定義是:如果事務(wù)執(zhí)行前數(shù)據(jù)庫處于一致狀態(tài),那么當(dāng)事務(wù)結(jié)束的時(shí)候,數(shù)據(jù)庫也會(huì)處于一致性狀態(tài)。這個(gè)一致性狀態(tài)包含兩層意思:

第一層意思是指,數(shù)據(jù)庫內(nèi)部的完整性,包含實(shí)體完整性、域完整性、參照完整性、用戶自定義完整性。使用外鍵、檢查約束等,來保證事務(wù)執(zhí)行中不會(huì)產(chǎn)生違背數(shù)據(jù)完整性的數(shù)據(jù)。例如:使用唯一約束的列不會(huì)出現(xiàn)兩個(gè)一樣的值。A transaction must preserve database consistency - if a transaction is run atomically in isolation starting from a consistent database, the database must again be consistent at the end of the transaction.
第二層意思是對(duì)開發(fā)者的要求,數(shù)據(jù)庫中的每一行和每個(gè)值必須與其所描述的現(xiàn)實(shí)保持一致。例如:銀行轉(zhuǎn)賬,不能只一方扣錢或者一方加錢,我們的代碼應(yīng)該是,一方加錢一方扣錢。Ensuring consistency for an individual transaction is the responsibility of the application programmer who codes the transaction.

為什么CAP三者不可兼得?
在分布式系統(tǒng)中,各個(gè)組建必然部署在不同的節(jié)點(diǎn)上,因此必然出現(xiàn)子網(wǎng)絡(luò),同時(shí)網(wǎng)絡(luò)本身又是不可靠的,一定存在延遲和數(shù)據(jù)丟失,即網(wǎng)絡(luò)分區(qū)是必然存在的。所以P(分區(qū)容錯(cuò)性)是分布式系統(tǒng)必須要面對(duì)和解決的問題(你無法要求在永遠(yuǎn)不發(fā)生網(wǎng)絡(luò)分區(qū)的環(huán)境下運(yùn)行分布式系統(tǒng))。

因此CAP三者不可兼得,變成如何在C(一致性)、A(可用性)二者進(jìn)行抉擇,可以舉個(gè)例子來說明:在分布式環(huán)境中,為了確保系統(tǒng)可用性,通常會(huì)采用將數(shù)據(jù)復(fù)制到多個(gè)備份節(jié)點(diǎn),而復(fù)制的過程需要通過網(wǎng)絡(luò)交互。當(dāng)發(fā)生網(wǎng)絡(luò)分區(qū)時(shí),你將面臨兩個(gè)選擇:

如果堅(jiān)持保持各節(jié)點(diǎn)之間的數(shù)據(jù)一致性(選擇C),你需要等待網(wǎng)絡(luò)分區(qū)恢復(fù)后,將數(shù)據(jù)復(fù)制完成,才可以向外部提供服務(wù)。期間發(fā)生網(wǎng)絡(luò)分區(qū)將不能對(duì)外提供服務(wù),因?yàn)樗WC不了數(shù)據(jù)一致性。
如果選擇可用性(選擇A),發(fā)生網(wǎng)絡(luò)分區(qū)的節(jié)點(diǎn),依然需要向外提供服務(wù)。但是由于網(wǎng)絡(luò)分區(qū),它同步不了最新的數(shù)據(jù),所以它返回?cái)?shù)據(jù),可能不是最新的(與其他節(jié)點(diǎn)不一致的)數(shù)據(jù)。
這里需要強(qiáng)調(diào)一句,CAP三者不可兼得,僅僅是指在發(fā)生網(wǎng)絡(luò)分區(qū)情況下,我們才需要在A和C之間進(jìn)行抉擇,選擇保證數(shù)據(jù)一致還是服務(wù)可用。而集群正常運(yùn)行時(shí),A和C是都可以保證的。

CP架構(gòu)在當(dāng)發(fā)生網(wǎng)絡(luò)分區(qū)時(shí),為了保證返回給客戶端數(shù)據(jù)準(zhǔn)確性,為了不破壞一致性,可能會(huì)因?yàn)闊o法響應(yīng)最新數(shù)據(jù),而拒絕響應(yīng)。在網(wǎng)絡(luò)分區(qū)恢復(fù)后,完成數(shù)據(jù)同步,才可處理客戶端請(qǐng)求。
AP架構(gòu)在發(fā)生網(wǎng)絡(luò)分區(qū)時(shí),發(fā)生分區(qū)的節(jié)點(diǎn)不需要等待數(shù)據(jù)完成同步,便可處理客戶端請(qǐng)求,將盡可能的給用戶返回相對(duì)新的數(shù)據(jù)。在網(wǎng)絡(luò)分區(qū)恢復(fù)后,完成數(shù)據(jù)同步。
ACID與CP、BASE與AP,它們的關(guān)聯(lián)關(guān)系?
根據(jù)上一小節(jié)C、A二者不可兼得的原因,我們可以總結(jié)AP和CP架構(gòu)的特性??梢园l(fā)現(xiàn)CP、AP兩者其實(shí)是對(duì)ACID、BASE的延伸。是在發(fā)生網(wǎng)絡(luò)分區(qū)情況下ACID、BASE的表現(xiàn)。

CP和ACID都是為了保證數(shù)據(jù)準(zhǔn)確性(兩者對(duì)準(zhǔn)確性定義不同,參考前文科普)。但是兩者解決的問題不一樣:CP描述的是在發(fā)生網(wǎng)絡(luò)分區(qū)時(shí),保證數(shù)據(jù)準(zhǔn)確性。ACID解決的是多個(gè)事務(wù)并發(fā)下,保證數(shù)據(jù)準(zhǔn)確性。
AP和BASE都是對(duì)可用性的研究,BASE要求的只是基本可用,而AP對(duì)一致性的要求更低,所以能保證的可用性更高。

ACID與CP區(qū)別
ACID解決的問題是數(shù)據(jù)庫系統(tǒng)中并發(fā)執(zhí)行多個(gè)事務(wù)時(shí)的問題,是數(shù)據(jù)庫領(lǐng)域的傳統(tǒng)問題。那么多個(gè)事務(wù)并發(fā)會(huì)存在哪些問題?

臟讀:事務(wù)T1讀取了T2更改的x,但是T2在實(shí)際存儲(chǔ)數(shù)據(jù)時(shí)可能出錯(cuò)回滾了,這時(shí)T1讀取的實(shí)際是無效的數(shù)據(jù),這種情況下就是臟讀
不可重復(fù)讀:是說在T1讀取x時(shí),由于中間T2更改了x,所以T1前后兩次讀取的x值不相同,這就是所謂的不可重復(fù)讀
幻讀:在T1讀取符合某個(gè)條件的所有記錄時(shí),T2增加了一條符合該條件的記錄,這就導(dǎo)致T1執(zhí)行過程中前后讀取的記錄可能不一致,即T2之后讀取時(shí)會(huì)多出一條記錄。
為了解決這些問題,事務(wù)提出四種隔離級(jí)別來規(guī)避上述問題。而解決的就是ACID中的C(一致性),所以ACID中的C(一致性)可以理解為不出現(xiàn)臟讀、幻讀、不可重復(fù)讀的問題??梢园阉Q為“內(nèi)部一致性”,解決的是數(shù)據(jù)庫內(nèi)部的一致性問題。

CP中的C(一致性),相對(duì)好理解,我把它理解為“外部一致性”。就分布式系統(tǒng)而言的,針對(duì)客戶端的請(qǐng)求,無論訪問那個(gè)節(jié)點(diǎn),都能獲得最新的相同的值。

BASE與AP區(qū)別
BASE強(qiáng)調(diào)的是基本可用,允許損失部分可用性。這里的損失是指:

響應(yīng)時(shí)間上的損失:在發(fā)生故障時(shí),允許在限定時(shí)間之外給用戶響應(yīng)。搜索引擎正常工作0.5秒內(nèi)給用戶返回?cái)?shù)據(jù)。在部分機(jī)房故障后,查詢時(shí)間增加到1-2秒。
功能上的損失:在請(qǐng)求高峰時(shí),可以選擇一部分請(qǐng)求降級(jí)。
AP則強(qiáng)調(diào)是高可用,對(duì)數(shù)據(jù)一致性要求更低。eureka作為AP系統(tǒng)的代表,在發(fā)生網(wǎng)絡(luò)分區(qū)時(shí),eureka會(huì)移除注冊(cè)列表中長(zhǎng)時(shí)間沒有心跳的服務(wù),但是當(dāng)丟失過多客戶端時(shí),該節(jié)點(diǎn)會(huì)進(jìn)入自我保護(hù),將不會(huì)移除過期的服務(wù),并同時(shí)接收新服務(wù)注冊(cè),但不會(huì)同步到其他節(jié)點(diǎn)。在該種模式下,eureka集群剩下最后一個(gè)節(jié)點(diǎn),也可以向外提供服務(wù)。

eureka屬于AP系統(tǒng)嗎?它明明沒有放棄一致性?。?br>描述AP和CP時(shí),通常都會(huì)以eureka和zookeeper來具體。eureka是AP的代表作,zookeeper則是CP的代表作。二者之所以這樣歸類,是因?yàn)椋?/p>

eureka各節(jié)點(diǎn)互相獨(dú)立、平等的,各節(jié)點(diǎn)都提供查詢和注冊(cè)服務(wù)(讀、寫請(qǐng)求)。當(dāng)發(fā)生網(wǎng)絡(luò)分區(qū),eureka各節(jié)點(diǎn)依舊可以接收和注冊(cè)服務(wù)。并且當(dāng)丟失過多客戶端時(shí),節(jié)點(diǎn)會(huì)進(jìn)入自我保護(hù)(接收新服務(wù)注冊(cè)、不刪除過期服務(wù))。在該種模式下,eureka集群剩下最后一個(gè)節(jié)點(diǎn),也可以向外提供服務(wù)。盡管向外提供的數(shù)據(jù)可能是過期的數(shù)據(jù)。
zookeeper采用的過半原則,由leader處理寫請(qǐng)求。當(dāng)發(fā)生網(wǎng)絡(luò)分區(qū)時(shí),leader由于丟失過半的follower,從而處理不了客戶端的請(qǐng)求,需要重新選舉新leader,期間服務(wù)將不可用。糟糕的是,如果集群中沒有過半的節(jié)點(diǎn)存活,將選舉不出新leader,服務(wù)將一直處于不可用狀態(tài)。
回答eureka沒有放棄一致性的問題,還得回顧A、C之間的抉擇。這二者需要二選一的情況下,一定是發(fā)生了網(wǎng)絡(luò)分區(qū)的情況。eureka集群正常運(yùn)行時(shí),各節(jié)點(diǎn)之間可以正常通訊、保持心跳、復(fù)制數(shù)據(jù),以此保持?jǐn)?shù)據(jù)的一致性。但發(fā)生網(wǎng)絡(luò)分區(qū)時(shí),eureka確實(shí)選擇了可用性,而放棄了一致性。

NWR
NWR是一種在分布式存儲(chǔ)系統(tǒng)中用于控制一致性級(jí)別的一種策略。這個(gè)三個(gè)字母分別代表著:

N:分布式系統(tǒng)中,一個(gè)有多少個(gè)副本數(shù)據(jù)
W:處理一次寫請(qǐng)求,需要更新多少個(gè)副本數(shù)據(jù)
R:處理一次讀請(qǐng)求,需要讀取多少個(gè)副本數(shù)據(jù)
NWR分別設(shè)置不同的值時(shí),將會(huì)產(chǎn)生不同的一致性效果。

W+R>N,整個(gè)系統(tǒng)對(duì)于客戶端的請(qǐng)求能保證強(qiáng)一致性。因?yàn)閷懻?qǐng)求和讀請(qǐng)求一定存在一個(gè)相交的副本,讀取的時(shí)候返回該副本的數(shù)據(jù)即可。
W+R<=N,整個(gè)系統(tǒng)對(duì)于客戶端的請(qǐng)求則不能保證強(qiáng)一致性。
基于NWR的性質(zhì),我們可以動(dòng)態(tài)的調(diào)節(jié)系統(tǒng)的一致性效果。還可以根據(jù)業(yè)務(wù)場(chǎng)景動(dòng)態(tài)調(diào)整響應(yīng)速度。以5節(jié)點(diǎn)集群為例,在保證強(qiáng)一致性的情況下,需要提高讀請(qǐng)求的效率,則可以設(shè)置R=2、W=4或者R=1、W=5。當(dāng)需要提高寫請(qǐng)求效率時(shí),則可以設(shè)置W=2、R=4或者W=1、R=5。

W、R的大小,直接影響其對(duì)應(yīng)的處理效率。主要注意,讀寫請(qǐng)求的效率取決于最慢的副本處理速度。

建議閱讀
CAP爭(zhēng)論及歷史:https://blog.csdn.net/chen77716/article/details/30635543

CAP,ACID,我們能做什么:http://hcoona.github.io/Tips/CAP-ACID-what-can-we-do/

理解數(shù)據(jù)庫的事務(wù),ACID,CAP和一致性:https://www.jianshu.com/p/2c30d1fe5c4e

nosql不應(yīng)該放棄一致性:https://www.infoq.cn/article/rhzs0KI2G*Y2r9PMdeNv

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/125962.html

相關(guān)文章

  • 分布事務(wù)解決方案實(shí)戰(zhàn)

    摘要:對(duì)于設(shè)計(jì)分布式系統(tǒng)來說不僅僅是分布式事務(wù)的架構(gòu)師來說,就是你的入門理論。分布式事務(wù)解決方案有了上面的理論基礎(chǔ)后,這里介紹開始介紹幾種常見的分布式事務(wù)的解決方案。是否真的要分布式事務(wù)在說方案之前,首先你一 事務(wù)的具體定義:事務(wù)提供一種機(jī)制將一個(gè)活動(dòng)涉及的所有操作納入到一個(gè)不可分割的執(zhí)行單元,組成事務(wù)的所有操作只有在所有操作均能正常執(zhí)行的情況下方能提交,只要其中任一操作執(zhí)行失敗,都將導(dǎo)致整...

    i_garfileo 評(píng)論0 收藏0
  • 聊聊分布事務(wù)

    摘要:分布式事務(wù)技術(shù)理論定理。接下來我們看看分布式事務(wù)有哪幾種實(shí)現(xiàn)方案。基于協(xié)調(diào)者與參與者的思想設(shè)定,分別提出了與實(shí)現(xiàn)分布式事務(wù)。 這次使用分布式事務(wù)框架過程中了學(xué)習(xí)了一些分布式事務(wù)知識(shí),所以本文我們就來聊聊分布式事務(wù)那些事。首先我們先回顧下什么是事務(wù)。 事務(wù) 什么是事務(wù)?這個(gè)作為后端開發(fā),日常開發(fā)中只要與數(shù)據(jù)庫有交互,肯定就會(huì)使用過事務(wù)。現(xiàn)在摘抄一段wiki的解釋,解釋下什么是事務(wù)。 是數(shù)...

    wemallshop 評(píng)論0 收藏0

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

0條評(píng)論

閱讀需要支付1元查看
<