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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

zookeeper是如何实现数据一致性的?

發(fā)布時間:2024/2/28 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 zookeeper是如何实现数据一致性的? 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

轉(zhuǎn)載自?https://blog.csdn.net/qqqq0199181/article/details/80865828

眾所周知,zookeeper是一個開源的分布式協(xié)調(diào)服務(wù),很多分布式的應(yīng)用都是基于zookeeper來實(shí)現(xiàn)分布式鎖,服務(wù)管理,服務(wù)發(fā)現(xiàn),通知訂閱等功能。那么。zookeeper自身是如何在分布式環(huán)境下實(shí)現(xiàn)數(shù)據(jù)的一致性的呢。

結(jié)構(gòu)
既然zookeeper是在分布式環(huán)境下提供服務(wù)的,那么它必須要解決的問題就是單點(diǎn)問題,因此zookeeper是一個主備的結(jié)構(gòu)。zookeeper 存在leader,follower,observer三種角色,這三種角色在實(shí)際服務(wù)集群中都是服務(wù)節(jié)點(diǎn)。

leader:處理所有請求,為客戶的提供讀和寫服務(wù)
follower:只提供讀服務(wù),有機(jī)會通過選舉成為leader
observer:只提供讀服務(wù)?
由以上三種角色的介紹可知,zookeeper中所有請求都是交給leader處理的,因此,如果leader掛了,zookeeper就無法再提供服務(wù),這就是單點(diǎn)問題。所幸在leader掛了之后,follower能夠通過選舉成為新的leader。?
那么問題來了,follower是如何被選舉成為新的leader的?新的leader又是如何保證數(shù)據(jù)的一致性的?這些問題的答案都在于zookeeper所用的分布式一致性協(xié)議ZAB。
ZAB協(xié)議
ZAB協(xié)議是為zookeeper專門設(shè)計(jì)的一種支持奔潰恢復(fù)的原子廣播協(xié)議。雖然它不像Paxos算法那樣通用通用,但是它卻比Paxos算法易于理解。在我看來ZAB協(xié)議主要的作用在于三個方面1、選舉出leader;2、同步節(jié)點(diǎn)之間的狀態(tài)達(dá)到數(shù)據(jù)一致;3、數(shù)據(jù)的廣播。

幾個概念的定義
在了解ZAB協(xié)議具體過程之前不要先了解幾個概念。

事務(wù)
zookeeper作為一個分布式協(xié)調(diào)服務(wù),需要leader節(jié)點(diǎn)去接受外部請求,轉(zhuǎn)化為內(nèi)部操作(比如創(chuàng)建,修改,刪除節(jié)點(diǎn)),需要原子性執(zhí)行的幾個操作就組成了事務(wù),這里用T代表。zookeeper要求有序的處理事務(wù),因此給每個事務(wù)一個編號,每進(jìn)來一個事務(wù)編號加1,假設(shè)leader節(jié)點(diǎn)中進(jìn)來n個事務(wù),可以表示為T1,T2,T3…Tn。為了防止單點(diǎn)問題導(dǎo)致事務(wù)數(shù)據(jù)丟失,leader節(jié)點(diǎn)會把事務(wù)數(shù)據(jù)同步到follower節(jié)點(diǎn)中。

事務(wù)隊(duì)列
leader和follower都會保存一個事務(wù)隊(duì)列,用L表示,L=T1,T2,T3…Tn,leader的事務(wù)隊(duì)列是接受請求保存下來的,follower的事務(wù)隊(duì)列是leader同步過來的,因此leader的事務(wù)隊(duì)列是最新,最全的。

任期
在zookeeper的工作過程中,leader節(jié)點(diǎn)奔潰,重新選舉出新的leader是很正常的事情,所以zookeeper的運(yùn)行歷史中會產(chǎn)生多個leader,就好比一個國家的歷史中會相繼出現(xiàn)多為領(lǐng)導(dǎo)人。為了區(qū)分各個leader,ZAB協(xié)議用一個整數(shù)來表示任期,我們假設(shè)用E表示任務(wù)。zookeeper剛運(yùn)行時選舉出的第一個leader的任期為E=1;第一個leader奔潰后,下面選舉出來的leader,任期會加1,E=2;一次類推。加入任期概念的事務(wù)應(yīng)該表示為T(E,n)

協(xié)議過程
選舉leader
每個follower廣播自己事務(wù)隊(duì)列中最大事務(wù)編號maxId
獲取集群中其他follower發(fā)出來的maxId,選取出最大的maxId所屬的follower,投票給改follower,選它為leader。
統(tǒng)計(jì)所有投票,獲取投票數(shù)超過一半的follower被推選為leader
同步數(shù)據(jù)
各個follower向leader發(fā)送自己保存的任期E
leader,比較所有的任期,選取最大的E,加1后作為當(dāng)前的任期E=E+1
將任務(wù)E廣播給所有follower
follower將任期改為leader發(fā)過來的值,并且返回給leader事務(wù)隊(duì)列L
leader從隊(duì)列集合中選取任期最大的隊(duì)列,如果有多個隊(duì)列任期都是最大,則選取事務(wù)編號n最大的隊(duì)列Lmax。將Lmax最為leader隊(duì)列,并且廣播給各個follower。
follower接收隊(duì)列替換自己的事務(wù)隊(duì)列,并且執(zhí)行提交隊(duì)列中的事務(wù)。?
至此各個節(jié)點(diǎn)的數(shù)據(jù)達(dá)成一致,zookeeper恢復(fù)正常服務(wù)。
廣播
leader節(jié)點(diǎn)接收到請求,將事務(wù)加入事務(wù)隊(duì)列,并且將事務(wù)廣播給各個follower。
follower接收事務(wù)并加入都事務(wù)隊(duì)列,然后給leader發(fā)送準(zhǔn)備提交請求。
leader 接收到半數(shù)以上的準(zhǔn)備提交請求后,提交事務(wù)同時向follower 發(fā)送提交事務(wù)請求
follower提交事務(wù)。
?

總結(jié)

以上是生活随笔為你收集整理的zookeeper是如何实现数据一致性的?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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