日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

最近在研究分布式系統(tǒng)的一些理論概念,例如關(guān)于分布式系統(tǒng)一致性的討論,看了一些文章我有一些不解。大多數(shù)對(duì)分布式系統(tǒng)一致性的劃分是將其分為三類(lèi):強(qiáng)一致性,順序一致性以及弱一致性。強(qiáng)一致性(Strict Consistency)也稱為:原子一致性(Atomic Consistency)、線性一致性(Linearizable Consistency)。

分布式系統(tǒng):Zookeeper一致性級(jí)別分析

 

在談到Zookeeper的一致性是哪種級(jí)別的一致性問(wèn)題,以及CAP原則中的C是哪一種一致性級(jí)別時(shí)有些疑惑。

下面是大多數(shù)文章中提到的一致性級(jí)別

1. 一致性(Consistency)

一致性(Consistency)是指多副本(Replications)問(wèn)題中的數(shù)據(jù)一致性。可以分為強(qiáng)一致性、順序一致性與弱一致性。

1.1 強(qiáng)一致性(Strict Consistency)

也稱為: 原子一致性(Atomic Consistency) 線性一致性(Linearizable Consistency)

強(qiáng)一致性有兩個(gè)要求:

  • 任何一次讀都能讀到某個(gè)數(shù)據(jù)的最近一次寫(xiě)的數(shù)據(jù)。
  • 系統(tǒng)中的所有進(jìn)程,看到的操作順序,都和全局時(shí)鐘下的順序一致。

簡(jiǎn)言之,在任意時(shí)刻,所有節(jié)點(diǎn)中的數(shù)據(jù)都是一樣的。

例如,對(duì)于關(guān)系型數(shù)據(jù)庫(kù),要求更新過(guò)的數(shù)據(jù)能被后續(xù)的訪問(wèn)都能看到,這是強(qiáng)一致性。

1.2 順序一致性(Sequential Consistency)

the result of any execution is the same as if the operations of all the processors were executed in some sequential order, and the operations of each individual processor Appear in this sequence in the order specified by its program. - - Lamport

兩個(gè)要求:

  • 任何一次讀都能讀到某個(gè)數(shù)據(jù)的最近一次寫(xiě)的數(shù)據(jù)。
  • 系統(tǒng)的所有進(jìn)程的順序一致,而且是合理的。即不需要和全局時(shí)鐘下的順序一致,錯(cuò)的話一起錯(cuò),對(duì)的話一起對(duì)。

舉個(gè)例子:

分布式系統(tǒng):Zookeeper一致性級(jí)別分析

 

Write(x, 4):寫(xiě)入x=4

Read(x, 0):讀出x=0

1)圖a是滿足順序一致性,但是不滿足強(qiáng)一致性的。原因在于,從全局時(shí)鐘的觀點(diǎn)來(lái)看,P2進(jìn)程對(duì)變量X的讀操作在P1進(jìn)程對(duì)變量X的寫(xiě)操作之后,然而讀出來(lái)的卻是舊的數(shù)據(jù)。但是這個(gè)圖卻是滿足順序一致性的,因?yàn)閮蓚€(gè)進(jìn)程P1,P2的一致性并沒(méi)有沖突。從這兩個(gè)進(jìn)程的角度來(lái)看,順序應(yīng)該是這樣的:Write(y,2) , Read(x,0) , Write(x,4), Read(y,2),每個(gè)進(jìn)程內(nèi)部的讀寫(xiě)順序都是合理的,但是這個(gè)順序與全局時(shí)鐘下看到的順序并不一樣。

2)圖b滿足強(qiáng)一致性,因?yàn)槊總€(gè)讀操作都讀到了該變量的最新寫(xiě)的結(jié)果,同時(shí)兩個(gè)進(jìn)程看到的操作順序與全局時(shí)鐘的順序一樣,都是Write(y,2) ,Write(x,4), Read(x,4) , Read(y,2)。

3)圖c不滿足順序一致性,當(dāng)然也就不滿足強(qiáng)一致性了。因?yàn)閺倪M(jìn)程P1的角度看,它對(duì)變量Y的讀操作返回了結(jié)果0。那么就是說(shuō),P1進(jìn)程的對(duì)變量Y的讀操作在P2進(jìn)程對(duì)變量Y的寫(xiě)操作之前,這意味著它認(rèn)為的順序是這樣的:Write(x,4) , Read(y,0) , Write(y,2), Read(x,0),顯然這個(gè)順序又是不能被滿足的,因?yàn)樽詈笠粋€(gè)對(duì)變量x的讀操作讀出來(lái)也是舊的數(shù)據(jù)。因此這個(gè)順序是有沖突的,不滿足順序一致性。

1.3 弱一致性

數(shù)據(jù)更新后,如果能容忍后續(xù)的訪問(wèn)只能訪問(wèn)到部分或者全部訪問(wèn)不到,則是弱一致性。

最終一致性就屬于弱一致性。

最終一致性

不保證在任意時(shí)刻任意節(jié)點(diǎn)上的同一份數(shù)據(jù)都是相同的,但是隨著時(shí)間的遷移,不同節(jié)點(diǎn)上的同一份數(shù)據(jù)總是在向趨同的方向變化。

簡(jiǎn)單說(shuō),就是在一段時(shí)間后,節(jié)點(diǎn)間的數(shù)據(jù)會(huì)最終達(dá)到一致?tīng)顟B(tài)。

最終一致性 根據(jù)更新數(shù)據(jù)后各進(jìn)程訪問(wèn)到數(shù)據(jù)的時(shí)間和方式的不同 ,又可以區(qū)分為:

因果一致性(Casual Consistency)。如果進(jìn)程A通知進(jìn)程B它已更新了一個(gè)數(shù)據(jù)項(xiàng),那么進(jìn)程B的后續(xù)訪問(wèn)將返回更新后的值,且一次寫(xiě)入將保證取代前一次寫(xiě)入。與進(jìn)程A無(wú)因果關(guān)系的進(jìn)程C的訪問(wèn),遵守一般的最終一致性規(guī)則。

“讀己之所寫(xiě)(read-your-writes)”一致性。當(dāng)進(jìn)程A自己更新一個(gè)數(shù)據(jù)項(xiàng)之后,它總是訪問(wèn)到更新過(guò)的值,絕不會(huì)看到舊值。這是因果一致性模型的一個(gè)特例。

會(huì)話(Session)一致性。這是上一個(gè)模型的實(shí)用版本,它把訪問(wèn)存儲(chǔ)系統(tǒng)的進(jìn)程放到會(huì)話的上下文中。只要會(huì)話還存在,系統(tǒng)就保證“讀己之所寫(xiě)”一致性。如果由于某些失敗情形令會(huì)話終止,就要建立新的會(huì)話,而且系統(tǒng)的保證不會(huì)延續(xù)到新的會(huì)話。

單調(diào)(Monotonic)讀一致性。如果進(jìn)程已經(jīng)看到過(guò)數(shù)據(jù)對(duì)象的某個(gè)值,那么任何后續(xù)訪問(wèn)都不會(huì)返回在那個(gè)值之前的值。

單調(diào)寫(xiě)一致性。系統(tǒng)保證來(lái)自同一個(gè)進(jìn)程的寫(xiě)操作順序執(zhí)行。要是系統(tǒng)不能保證這種程度的一致性,就非常難以編程了。

另外一種劃分一致性級(jí)別的:

一致性是指從系統(tǒng)外部讀取系統(tǒng)內(nèi)部的數(shù)據(jù)時(shí),在一定約束條件下相同,即數(shù)據(jù)變動(dòng)在系統(tǒng)內(nèi)部各節(jié)點(diǎn)應(yīng)該是同步的。 根據(jù)一致性的強(qiáng)弱程度不同 ,可以將一致性級(jí)別分為如下幾種:

①?gòu)?qiáng)一致性(strong consistency)。任何時(shí)刻,任何用戶都能讀取到最近一次成功更新的數(shù)據(jù)。

②單調(diào)一致性(monotonic consistency)。任何時(shí)刻,任何用戶一旦讀到某個(gè)數(shù)據(jù)在某次更新后的值,那么就不會(huì)再讀到比這個(gè)值更舊的值。也就是說(shuō),獲取的數(shù)據(jù)順序必是單調(diào)遞增的。

③會(huì)話一致性(session consistency)。任何用戶在某次會(huì)話中,一旦讀到某個(gè)數(shù)據(jù)在某次更新后的值,那么在本次會(huì)話中就不會(huì)再讀到比這值更舊的值。會(huì)話一致性是在單調(diào)一致性的基礎(chǔ)上進(jìn)一步放松約束,只保證單個(gè)用戶單個(gè)會(huì)話內(nèi)的單調(diào)性,在不同用戶或同一用戶不同會(huì)話間則沒(méi)有保障。示例case:php的session概念。

分布式系統(tǒng):Zookeeper一致性級(jí)別分析

 

④最終一致性(eventual consistency)。用戶只能讀到某次更新后的值,但系統(tǒng)保證數(shù)據(jù)將最終達(dá)到完全一致的狀態(tài),只是所需時(shí)間不能保障。

⑤弱一致性(weak consistency)。用戶無(wú)法在確定時(shí)間內(nèi)讀到最新更新的值。

2. 共識(shí)(Consensus)

共識(shí)問(wèn)題中所有的節(jié)點(diǎn)要最終達(dá)成共識(shí),由于最終目標(biāo)是所有節(jié)點(diǎn)都要達(dá)成一致,所以根本不存在一致性強(qiáng)弱之分。

例如,Paxos是共識(shí)(Consensus)算法而不是強(qiáng)一致性(Consistency)協(xié)議。共識(shí)算法沒(méi)有一致性級(jí)別的區(qū)分。

疑惑

關(guān)于線性一致性的觀點(diǎn), 《線性一致性(Linearizability)是并發(fā)控制的基礎(chǔ)》 中提到,Zookeeper是線性一致性的,再比如分布式領(lǐng)域著名的CAP定理中的C,也是指線性一致性。

在 《如何理解Zookeeper的順序一致性》 中闡述的觀點(diǎn)是Zookeeper是順序一致性的,不是最終一致性也不是強(qiáng)一致性。

又有人在某文章下評(píng)論說(shuō)順序一致性和最終一致性不是同一個(gè)維度的概念。

3.線性化和可串行化的區(qū)別

另外在一篇英文文章 《 Linearizability versus Serializabilit y》 講述了線性化和可串行化的區(qū)別

Linearizability for read and write operations is synonymous with the term “atomic consistency” and is the “C,” or “consistency,” in Gilbert and Lynch’s proof of the CAP Theorem . We say linearizability is composable (or “local”) because, if operations on each object in a system are linearizable, then all operations in the system are linearizable.

翻譯:讀寫(xiě)操作的線性化與術(shù)語(yǔ)“原子一致性”同義,并且是Gilbert和Lynch 對(duì)CAP定理 的 證明中的 “C”或“一致性” 。 我們說(shuō)線性化是 可組合的 (或“本地”),因?yàn)槿绻到y(tǒng)中每個(gè)對(duì)象的操作是可線性化的,那么系統(tǒng)中的所有操作都是可線性化的。

Serializability is the traditional “I,” or isolation, in ACID . If users’ transactions each preserve application correctness (“C,” or consistency, in ACID), a serializable execution also preserves correctness. Therefore, serializability is a mechanism for guaranteeing database correctness. 1

Unlike linearizability, serializability does not—by itself—impose any real-time constraints on the ordering of transactions. Serializability is also not composable. Serializability does not imply any kind of deterministic order—it simply requires that some equivalent serial execution exists.

翻譯: 可串行性是 ACID中 的傳統(tǒng)“I”或隔離 。 如果用戶的事務(wù)各自保持應(yīng)用程序的正確性(ACID中的 “C”或 一致性),則可序列化執(zhí)行也保持正確性。 因此,可串行化是一種保證數(shù)據(jù)庫(kù)正確性的機(jī)制。

與線性化不同,可串行化本身不會(huì)對(duì)事務(wù)的排序施加任何實(shí)時(shí)約束。 可序列化也是不可組合的。 可串行化并不意味著任何類(lèi)型的確定性順序 - 它只需要存在 一些 等效的串行執(zhí)行。

One of the reasons these definitions are so confusing is that linearizability hails from the distributed systems and concurrent programming communities, and serializability comes from the database community. Today, almost everyone uses both distributed systems and databases, which often leads to overloaded terminology (e.g., “consistency,” “atomicity”).

翻譯: 這些定義如此混亂的原因之一是線性化來(lái)自分布式系統(tǒng)和并發(fā)編程社區(qū), 可串行化 來(lái)自數(shù)據(jù)庫(kù)社區(qū)。 如今,幾乎每個(gè)人都使用 分布式系統(tǒng)和數(shù)據(jù)庫(kù),這往往會(huì)導(dǎo)致過(guò)載的術(shù)語(yǔ)(例如,“一致性”,“原子”)。

4、zookeeper的一致性分析-單調(diào)一致性

很多文章和博客里提到,zookeeper是一種提供強(qiáng)一致性的服務(wù),在分區(qū)容錯(cuò)性和可用性上做了一定折中,這和CAP理論是吻合的。但實(shí)際上Zookeeper提供的只是單調(diào)一致性。

原因:

1. 假設(shè)有2n+1個(gè)server,在同步流程中,leader向follower同步數(shù)據(jù),當(dāng)同步完成的follower數(shù)量大于 n+1時(shí)同步流程結(jié)束,系統(tǒng)可接受client的連接請(qǐng)求。如果client連接的并非同步完成的follower,那么得到的并非最新數(shù)據(jù),但可以保證單調(diào)性,也就是說(shuō),可獲取的數(shù)據(jù)順序是單調(diào)遞增的。

分布式系統(tǒng):Zookeeper一致性級(jí)別分析

 

2. 假設(shè)是follower接收到的寫(xiě)請(qǐng)求,則會(huì)轉(zhuǎn)發(fā)給leader處理;leader完成兩階段提交的機(jī)制。向所有server發(fā)起提案,當(dāng)提案獲得超過(guò)半數(shù)(n+1)的server的ACK后,將對(duì)整個(gè)集群進(jìn)行同步,超過(guò)半數(shù)(n+1)的server同步完成后,該寫(xiě)請(qǐng)求完成。如果client連接的并非同步完成follower,那么得到的并非最新數(shù)據(jù),但可以保證單調(diào)性,也就是說(shuō),可獲取的數(shù)據(jù)順序是單調(diào)遞增的。

用分布式系統(tǒng)的CAP原則來(lái)分析Zookeeper:

(1) C : Zookeeper保證了最終一致性,在十幾秒可以Sync到各個(gè)節(jié)點(diǎn)

(2) A : Zookeeper保證了可用性,數(shù)據(jù)總是可用的,沒(méi)有鎖.并且有一大半的節(jié)點(diǎn)所擁有的數(shù)據(jù)是最新的,實(shí)時(shí)的. 如果想保證取得是數(shù)據(jù)一定是最新的,需要手工調(diào)用Sync()

(3) P : 有2點(diǎn)需要分析的

  • 節(jié)點(diǎn)多了會(huì)導(dǎo)致寫(xiě)數(shù)據(jù)延時(shí)非常大,因?yàn)樾枰鄠€(gè)節(jié)點(diǎn)同步.
  • 節(jié)點(diǎn)多了Leader選舉非常耗時(shí), 就會(huì)放大網(wǎng)絡(luò)的問(wèn)題. 可以通過(guò)引入 observer節(jié)點(diǎn)緩解這個(gè)問(wèn)題.

5、 結(jié)論

可以的出的結(jié)論是Zookeeper的一致性保證的是單調(diào)一致性,CAP原則中的C是強(qiáng)一致性。

分享到:
標(biāo)簽:Zookeeper
用戶無(wú)頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過(guò)答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫(kù),初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定