這可能是全網(wǎng)講得最清楚的ZooKeeper概念文章了-創(chuàng)新互聯(lián)

這可能是全網(wǎng)講得最清楚的 ZooKeeper 概念文章了

成都創(chuàng)新互聯(lián)是創(chuàng)新、創(chuàng)意、研發(fā)型一體的綜合型網(wǎng)站建設(shè)公司,自成立以來(lái)公司不斷探索創(chuàng)新,始終堅(jiān)持為客戶提供滿意周到的服務(wù),在本地打下了良好的口碑,在過(guò)去的十年時(shí)間我們累計(jì)服務(wù)了上千家以及全國(guó)政企客戶,如成都辦公空間設(shè)計(jì)等企業(yè)單位,完善的項(xiàng)目管理流程,嚴(yán)格把控項(xiàng)目進(jìn)度與質(zhì)量監(jiān)控加上過(guò)硬的技術(shù)實(shí)力獲得客戶的一致贊譽(yù)。

前言

相信大家對(duì) ZooKeeper 應(yīng)該不算陌生。但是你真的了解 ZooKeeper 是個(gè)什么東西嗎?如果別人/面試官讓你給他講講 ?ZooKeeper 是個(gè)什么東西,你能回答到什么地步呢?

我本人曾經(jīng)使用過(guò) ZooKeeper 作為 Dubbo 的注冊(cè)中心,另外在搭建 solr 集群的時(shí)候,我使用到了 ?ZooKeeper 作為 solr 集群的管理工具。前幾天,總結(jié)項(xiàng)目經(jīng)驗(yàn)的時(shí)候,我突然問(wèn)自己 ZooKeeper 到底是個(gè)什么東西?想了半天,腦海中只是簡(jiǎn)單的能浮現(xiàn)出幾句話:“①Zookeeper 可以被用作注冊(cè)中心。 ②Zookeeper 是 Hadoop 生態(tài)系統(tǒng)的一員;③構(gòu)建 Zookeeper 集群的時(shí)候,使用的服務(wù)器最好是奇數(shù)臺(tái)?!?可見(jiàn),我對(duì)于 Zookeeper 的理解僅僅是停留在了表面。

所以,通過(guò)本文,希望帶大家稍微詳細(xì)的了解一下 ZooKeeper 。如果沒(méi)有學(xué)過(guò) ZooKeeper ,那么本文將會(huì)是你進(jìn)入 ZooKeeper 大門(mén)的墊腳磚。如果你已經(jīng)接觸過(guò) ZooKeeper ,那么本文將帶你回顧一下 ZooKeeper 的一些基礎(chǔ)概念。

最后,本文只涉及 ZooKeeper 的一些概念,并不涉及 ZooKeeper 的使用以及 ZooKeeper 集群的搭建。網(wǎng)上有介紹 ZooKeeper 的使用以及搭建 ZooKeeper 集群的文章,大家有需要可以自行查閱。

一 什么是 ZooKeeper

ZooKeeper 的由來(lái)

下面這段內(nèi)容摘自《從Paxos到Zookeeper 》第四章第一節(jié)的某段內(nèi)容,推薦大家閱讀一下:

Zookeeper最早起源于雅虎研究院的一個(gè)研究小組。在當(dāng)時(shí),研究人員發(fā)現(xiàn),在雅虎內(nèi)部很多大型系統(tǒng)基本都需要依賴(lài)一個(gè)類(lèi)似的系統(tǒng)來(lái)進(jìn)行分布式協(xié)調(diào),但是這些系統(tǒng)往往都存在分布式單點(diǎn)問(wèn)題。所以,雅虎的開(kāi)發(fā)人員就試圖開(kāi)發(fā)一個(gè)通用的無(wú)單點(diǎn)問(wèn)題的分布式協(xié)調(diào)框架,以便讓開(kāi)發(fā)人員將精力集中在處理業(yè)務(wù)邏輯上。

關(guān)于“ZooKeeper”這個(gè)項(xiàng)目的名字,其實(shí)也有一段趣聞。在立項(xiàng)初期,考慮到之前內(nèi)部很多項(xiàng)目都是使用動(dòng)物的名字來(lái)命名的(例如著名的Pig項(xiàng)目),雅虎的工程師希望給這個(gè)項(xiàng)目也取一個(gè)動(dòng)物的名字。時(shí)任研究院的首席科學(xué)家RaghuRamakrishnan開(kāi)玩笑地說(shuō):“在這樣下去,我們這兒就變成動(dòng)物園了!”此話一出,大家紛紛表示就叫動(dòng)物園管理員吧一一一因?yàn)楦鱾€(gè)以動(dòng)物命名的分布式組件放在一起,雅虎的整個(gè)分布式系統(tǒng)看上去就像一個(gè)大型的動(dòng)物園了,而Zookeeper正好要用來(lái)進(jìn)行分布式環(huán)境的協(xié)調(diào)一一于是,Zookeeper的名字也就由此誕生了。

1.1 ZooKeeper 概覽

ZooKeeper 是一個(gè)開(kāi)源的分布式協(xié)調(diào)服務(wù),ZooKeeper框架最初是在“Yahoo!"上構(gòu)建的,用于以簡(jiǎn)單而穩(wěn)健的方式訪問(wèn)他們的應(yīng)用程序。 后來(lái),Apache ZooKeeper成為Hadoop,HBase和其他分布式框架使用的有組織服務(wù)的標(biāo)準(zhǔn)。 例如,Apache HBase使用ZooKeeper跟蹤分布式數(shù)據(jù)的狀態(tài)。ZooKeeper 的設(shè)計(jì)目標(biāo)是將那些復(fù)雜且容易出錯(cuò)的分布式一致性服務(wù)封裝起來(lái),構(gòu)成一個(gè)高效可靠的原語(yǔ)集,并以一系列簡(jiǎn)單易用的接口提供給用戶使用。

原語(yǔ):操作系統(tǒng)或計(jì)算機(jī)網(wǎng)絡(luò)用語(yǔ)范疇。是由若干條指令組成的,用于完成一定功能的一個(gè)過(guò)程。具有不可分割性·即原語(yǔ)的執(zhí)行必須是連續(xù)的,在執(zhí)行過(guò)程中不允許被中斷。

ZooKeeper 是一個(gè)典型的分布式數(shù)據(jù)一致性解決方案,分布式應(yīng)用程序可以基于 ZooKeeper 實(shí)現(xiàn)諸如數(shù)據(jù)發(fā)布/訂閱、負(fù)載均衡、命名服務(wù)、分布式協(xié)調(diào)/通知、集群管理、Master 選舉、分布式鎖和分布式隊(duì)列等功能。

Zookeeper 一個(gè)最常用的使用場(chǎng)景就是用于擔(dān)任服務(wù)生產(chǎn)者和服務(wù)消費(fèi)者的注冊(cè)中心。服務(wù)生產(chǎn)者將自己提供的服務(wù)注冊(cè)到Zookeeper中心,服務(wù)的消費(fèi)者在進(jìn)行服務(wù)調(diào)用的時(shí)候先到Zookeeper中查找服務(wù),獲取到服務(wù)生產(chǎn)者的詳細(xì)信息之后,再去調(diào)用服務(wù)生產(chǎn)者的內(nèi)容與數(shù)據(jù)。如下圖所示,在 Dubbo架構(gòu)中 Zookeeper 就擔(dān)任了注冊(cè)中心這一角色。

這可能是全網(wǎng)講得最清楚的 ZooKeeper 概念文章了

1.2 結(jié)合個(gè)人使用的情況講一下 ZooKeeper

在我自己做過(guò)的項(xiàng)目中,主要使用到了 ZooKeeper 作為 Dubbo 的注冊(cè)中心(Dubbo 官方推薦使用 ZooKeeper注冊(cè)中心)。另外在搭建 solr 集群的時(shí)候,我使用 ?ZooKeeper 作為 solr 集群的管理工具。這時(shí),ZooKeeper 主要提供下面幾個(gè)功能:1、集群管理、容錯(cuò)、負(fù)載均衡。2、配置文件的集中管理。3、集群的入口。

我個(gè)人覺(jué)得在使用 ZooKeeper 的時(shí)候,最好是使用 集群版的 ZooKeeper 而不是單機(jī)版的。官網(wǎng)給出的架構(gòu)圖就描述的是一個(gè)集群版的 ZooKeeper 。通常 3 臺(tái)服務(wù)器就可以構(gòu)成一個(gè) ?ZooKeeper ?集群了。

為什么最好使用奇數(shù)臺(tái)服務(wù)器構(gòu)成 ZooKeeper 集群?

所謂的zookeeper容錯(cuò)是指,當(dāng)宕掉幾個(gè)zookeeper服務(wù)器之后,剩下的個(gè)數(shù)必須大于宕掉的個(gè)數(shù)的話整個(gè)zookeeper才依然可用。假如我們的集群中有n臺(tái)zookeeper服務(wù)器,那么也就是剩下的服務(wù)數(shù)必須大于n/2。先說(shuō)一下結(jié)論,2n和2n-1的容忍度是一樣的,都是n-1,大家可以先自己仔細(xì)想一想,這應(yīng)該是一個(gè)很簡(jiǎn)單的數(shù)學(xué)問(wèn)題了。 比如假如我們有3臺(tái),那么大允許宕掉1臺(tái)zookeeper服務(wù)器,如果我們有4臺(tái)的的時(shí)候也同樣只允許宕掉1臺(tái)。 假如我們有5臺(tái),那么大允許宕掉2臺(tái)zookeeper服務(wù)器,如果我們有6臺(tái)的的時(shí)候也同樣只允許宕掉2臺(tái)。

綜上,何必增加那一個(gè)不必要的zookeeper呢?

二 關(guān)于 ZooKeeper ?的一些重要概念

2.1 重要概念總結(jié)

  • ZooKeeper ?本身就是一個(gè)分布式程序(只要半數(shù)以上節(jié)點(diǎn)存活,ZooKeeper ?就能正常服務(wù))。

  • 為了保證高可用,最好是以集群形態(tài)來(lái)部署 ZooKeeper,這樣只要集群中大部分機(jī)器是可用的(能夠容忍一定的機(jī)器故障),那么 ZooKeeper 本身仍然是可用的。

  • ZooKeeper ?將數(shù)據(jù)保存在內(nèi)存中,這也就保證了 高吞吐量和低延遲(但是內(nèi)存限制了能夠存儲(chǔ)的容量不太大,此限制也是保持znode中存儲(chǔ)的數(shù)據(jù)量較小的進(jìn)一步原因)。

  • ZooKeeper 是高性能的。 在“讀”多于“寫(xiě)”的應(yīng)用程序中尤其地高性能,因?yàn)椤皩?xiě)”會(huì)導(dǎo)致所有的服務(wù)器間同步狀態(tài)。(“讀”多于“寫(xiě)”是協(xié)調(diào)服務(wù)的典型場(chǎng)景。)

  • ZooKeeper有臨時(shí)節(jié)點(diǎn)的概念。 當(dāng)創(chuàng)建臨時(shí)節(jié)點(diǎn)的客戶端會(huì)話一直保持活動(dòng),瞬時(shí)節(jié)點(diǎn)就一直存在。而當(dāng)會(huì)話終結(jié)時(shí),瞬時(shí)節(jié)點(diǎn)被刪除。持久節(jié)點(diǎn)是指一旦這個(gè)ZNode被創(chuàng)建了,除非主動(dòng)進(jìn)行ZNode的移除操作,否則這個(gè)ZNode將一直保存在Zookeeper上。

  • ZooKeeper 底層其實(shí)只提供了兩個(gè)功能:①管理(存儲(chǔ)、讀?。┯脩舫绦蛱峤坏臄?shù)據(jù);②為用戶程序提交數(shù)據(jù)節(jié)點(diǎn)監(jiān)聽(tīng)服務(wù)。

下面關(guān)于會(huì)話(Session)、 Znode、版本、Watcher、ACL概念的總結(jié)都在《從Paxos到Zookeeper 》第四章第一節(jié)以及第七章第八節(jié)有提到,感興趣的可以看看!

2.2 會(huì)話(Session)

Session 指的是 ZooKeeper ?服務(wù)器與客戶端會(huì)話。在 ZooKeeper 中,一個(gè)客戶端連接是指客戶端和服務(wù)器之間的一個(gè) TCP 長(zhǎng)連接。客戶端啟動(dòng)的時(shí)候,首先會(huì)與服務(wù)器建立一個(gè) TCP 連接,從第一次連接建立開(kāi)始,客戶端會(huì)話的生命周期也開(kāi)始了。通過(guò)這個(gè)連接,客戶端能夠通過(guò)心跳檢測(cè)與服務(wù)器保持有效的會(huì)話,也能夠向Zookeeper服務(wù)器發(fā)送請(qǐng)求并接受響應(yīng),同時(shí)還能夠通過(guò)該連接接收來(lái)自服務(wù)器的Watch事件通知。Session的sessionTimeout值用來(lái)設(shè)置一個(gè)客戶端會(huì)話的超時(shí)時(shí)間。當(dāng)由于服務(wù)器壓力太大、網(wǎng)絡(luò)故障或是客戶端主動(dòng)斷開(kāi)連接等各種原因?qū)е驴蛻舳诉B接斷開(kāi)時(shí),只要在sessionTimeout規(guī)定的時(shí)間內(nèi)能夠重新連接上集群中任意一臺(tái)服務(wù)器,那么之前創(chuàng)建的會(huì)話仍然有效。

在為客戶端創(chuàng)建會(huì)話之前,服務(wù)端首先會(huì)為每個(gè)客戶端都分配一個(gè)sessionID。由于 sessionID 是 Zookeeper 會(huì)話的一個(gè)重要標(biāo)識(shí),許多與會(huì)話相關(guān)的運(yùn)行機(jī)制都是基于這個(gè) sessionID 的,因此,無(wú)論是哪臺(tái)服務(wù)器為客戶端分配的 sessionID,都務(wù)必保證全局唯一。

2.3 Znode

在談到分布式的時(shí)候,我們通常說(shuō)的“節(jié)點(diǎn)"是指組成集群的每一臺(tái)機(jī)器。然而,在Zookeeper中,“節(jié)點(diǎn)"分為兩類(lèi),第一類(lèi)同樣是指構(gòu)成集群的機(jī)器,我們稱(chēng)之為機(jī)器節(jié)點(diǎn);第二類(lèi)則是指數(shù)據(jù)模型中的數(shù)據(jù)單元,我們稱(chēng)之為數(shù)據(jù)節(jié)點(diǎn)一一ZNode。

Zookeeper將所有數(shù)據(jù)存儲(chǔ)在內(nèi)存中,數(shù)據(jù)模型是一棵樹(shù)(Znode Tree),由斜杠(/)的進(jìn)行分割的路徑,就是一個(gè)Znode,例如/foo/path2。每個(gè)上都會(huì)保存自己的數(shù)據(jù)內(nèi)容,同時(shí)還會(huì)保存一系列屬性信息。

在Zookeeper中,node可以分為持久節(jié)點(diǎn)和臨時(shí)節(jié)點(diǎn)兩類(lèi)。所謂持久節(jié)點(diǎn)是指一旦這個(gè)ZNode被創(chuàng)建了,除非主動(dòng)進(jìn)行ZNode的移除操作,否則這個(gè)ZNode將一直保存在Zookeeper上。而臨時(shí)節(jié)點(diǎn)就不一樣了,它的生命周期和客戶端會(huì)話綁定,一旦客戶端會(huì)話失效,那么這個(gè)客戶端創(chuàng)建的所有臨時(shí)節(jié)點(diǎn)都會(huì)被移除。另外,ZooKeeper還允許用戶為每個(gè)節(jié)點(diǎn)添加一個(gè)特殊的屬性:SEQUENTIAL.一旦節(jié)點(diǎn)被標(biāo)記上這個(gè)屬性,那么在這個(gè)節(jié)點(diǎn)被創(chuàng)建的時(shí)候,Zookeeper會(huì)自動(dòng)在其節(jié)點(diǎn)名后面追加上一個(gè)整型數(shù)字,這個(gè)整型數(shù)字是一個(gè)由父節(jié)點(diǎn)維護(hù)的自增數(shù)字。

2.4 版本

在前面我們已經(jīng)提到,Zookeeper 的每個(gè) ZNode 上都會(huì)存儲(chǔ)數(shù)據(jù),對(duì)應(yīng)于每個(gè)ZNode,Zookeeper 都會(huì)為其維護(hù)一個(gè)叫作?Stat的數(shù)據(jù)結(jié)構(gòu),Stat中記錄了這個(gè) ZNode 的三個(gè)數(shù)據(jù)版本,分別是version(當(dāng)前ZNode的版本)、cversion(當(dāng)前ZNode子節(jié)點(diǎn)的版本)和 cversion(當(dāng)前ZNode的ACL版本)。

2.5 Watcher

Watcher(事件監(jiān)聽(tīng)器),是Zookeeper中的一個(gè)很重要的特性。Zookeeper允許用戶在指定節(jié)點(diǎn)上注冊(cè)一些Watcher,并且在一些特定事件觸發(fā)的時(shí)候,ZooKeeper服務(wù)端會(huì)將事件通知到感興趣的客戶端上去,該機(jī)制是Zookeeper實(shí)現(xiàn)分布式協(xié)調(diào)服務(wù)的重要特性。

2.6 ACL

Zookeeper采用ACL(AccessControlLists)策略來(lái)進(jìn)行權(quán)限控制,類(lèi)似于 UNIX 文件系統(tǒng)的權(quán)限控制。Zookeeper 定義了如下5種權(quán)限。

這可能是全網(wǎng)講得最清楚的 ZooKeeper 概念文章了

其中尤其需要注意的是,CREATE和DELETE這兩種權(quán)限都是針對(duì)子節(jié)點(diǎn)的權(quán)限控制。

三 ZooKeeper 特點(diǎn)

  • 順序一致性:從同一客戶端發(fā)起的事務(wù)請(qǐng)求,最終將會(huì)嚴(yán)格地按照順序被應(yīng)用到 ZooKeeper 中去。

  • 原子性:所有事務(wù)請(qǐng)求的處理結(jié)果在整個(gè)集群中所有機(jī)器上的應(yīng)用情況是一致的,也就是說(shuō),要么整個(gè)集群中所有的機(jī)器都成功應(yīng)用了某一個(gè)事務(wù),要么都沒(méi)有應(yīng)用。

  • 單一系統(tǒng)映像 :無(wú)論客戶端連到哪一個(gè) ZooKeeper 服務(wù)器上,其看到的服務(wù)端數(shù)據(jù)模型都是一致的。

  • 可靠性:一旦一次更改請(qǐng)求被應(yīng)用,更改的結(jié)果就會(huì)被持久化,直到被下一次更改覆蓋。

四 ZooKeeper 設(shè)計(jì)目標(biāo)

4.1 簡(jiǎn)單的數(shù)據(jù)模型

ZooKeeper 允許分布式進(jìn)程通過(guò)共享的層次結(jié)構(gòu)命名空間進(jìn)行相互協(xié)調(diào),這與標(biāo)準(zhǔn)文件系統(tǒng)類(lèi)似。 名稱(chēng)空間由 ZooKeeper 中的數(shù)據(jù)寄存器組成 - 稱(chēng)為znode,這些類(lèi)似于文件和目錄。 與為存儲(chǔ)設(shè)計(jì)的典型文件系統(tǒng)不同,ZooKeeper數(shù)據(jù)保存在內(nèi)存中,這意味著ZooKeeper可以實(shí)現(xiàn)高吞吐量和低延遲。

這可能是全網(wǎng)講得最清楚的 ZooKeeper 概念文章了

4.2 可構(gòu)建集群

為了保證高可用,最好是以集群形態(tài)來(lái)部署 ZooKeeper,這樣只要集群中大部分機(jī)器是可用的(能夠容忍一定的機(jī)器故障),那么zookeeper本身仍然是可用的。客戶端在使用 ZooKeeper 時(shí),需要知道集群機(jī)器列表,通過(guò)與集群中的某一臺(tái)機(jī)器建立 TCP 連接來(lái)使用服務(wù),客戶端使用這個(gè)TCP鏈接來(lái)發(fā)送請(qǐng)求、獲取結(jié)果、獲取監(jiān)聽(tīng)事件以及發(fā)送心跳包。如果這個(gè)連接異常斷開(kāi)了,客戶端可以連接到另外的機(jī)器上。

ZooKeeper 官方提供的架構(gòu)圖:

這可能是全網(wǎng)講得最清楚的 ZooKeeper 概念文章了

上圖中每一個(gè)Server代表一個(gè)安裝Zookeeper服務(wù)的服務(wù)器。組成 ZooKeeper 服務(wù)的服務(wù)器都會(huì)在內(nèi)存中維護(hù)當(dāng)前的服務(wù)器狀態(tài),并且每臺(tái)服務(wù)器之間都互相保持著通信。集群間通過(guò) Zab 協(xié)議(Zookeeper Atomic Broadcast)來(lái)保持?jǐn)?shù)據(jù)的一致性。

4.3 順序訪問(wèn)

對(duì)于來(lái)自客戶端的每個(gè)更新請(qǐng)求,ZooKeeper 都會(huì)分配一個(gè)全局唯一的遞增編號(hào),這個(gè)編號(hào)反應(yīng)了所有事務(wù)操作的先后順序,應(yīng)用程序可以使用 ZooKeeper 這個(gè)特性來(lái)實(shí)現(xiàn)更高層次的同步原語(yǔ)。這個(gè)編號(hào)也叫做時(shí)間戳——zxid(Zookeeper Transaction Id)

4.4 高性能

ZooKeeper 是高性能的。 在“讀”多于“寫(xiě)”的應(yīng)用程序中尤其地高性能,因?yàn)椤皩?xiě)”會(huì)導(dǎo)致所有的服務(wù)器間同步狀態(tài)。(“讀”多于“寫(xiě)”是協(xié)調(diào)服務(wù)的典型場(chǎng)景。)

五 ZooKeeper 集群角色介紹

最典型集群模式: Master/Slave 模式(主備模式)。在這種模式中,通常 Master服務(wù)器作為主服務(wù)器提供寫(xiě)服務(wù),其他的 Slave 服務(wù)器從服務(wù)器通過(guò)異步復(fù)制的方式獲取 Master 服務(wù)器最新的數(shù)據(jù)提供讀服務(wù)。

但是,在 ZooKeeper 中沒(méi)有選擇傳統(tǒng)的 ?Master/Slave 概念,而是引入了Leader、Follower 和 Observer 三種角色。如下圖所示

這可能是全網(wǎng)講得最清楚的 ZooKeeper 概念文章了

ZooKeeper 集群中的所有機(jī)器通過(guò)一個(gè) Leader 選舉過(guò)程來(lái)選定一臺(tái)稱(chēng)為 “Leader” 的機(jī)器,Leader 既可以為客戶端提供寫(xiě)服務(wù)又能提供讀服務(wù)。除了 Leader 外,F(xiàn)ollower 和 ?Observer 都只能提供讀服務(wù)。Follower 和 ?Observer 唯一的區(qū)別在于 Observer 機(jī)器不參與 Leader 的選舉過(guò)程,也不參與寫(xiě)操作的“過(guò)半寫(xiě)成功”策略,因此 Observer 機(jī)器可以在不影響寫(xiě)性能的情況下提升集群的讀性能。

這可能是全網(wǎng)講得最清楚的 ZooKeeper 概念文章了

當(dāng) Leader 服務(wù)器出現(xiàn)網(wǎng)絡(luò)中斷、崩潰退出與重啟等異常情況時(shí),ZAB 協(xié)議就會(huì)進(jìn)人恢復(fù)模式并選舉產(chǎn)生新的Leader服務(wù)器。這個(gè)過(guò)程大致是這樣的:

  1. Leader election(選舉階段):節(jié)點(diǎn)在一開(kāi)始都處于選舉階段,只要有一個(gè)節(jié)點(diǎn)得到超半數(shù)節(jié)點(diǎn)的票數(shù),它就可以當(dāng)選準(zhǔn) leader。

  2. Discovery(發(fā)現(xiàn)階段):在這個(gè)階段,followers 跟準(zhǔn) leader 進(jìn)行通信,同步 followers 最近接收的事務(wù)提議。

  3. Synchronization(同步階段):同步階段主要是利用 leader 前一階段獲得的最新提議歷史,同步集群中所有的副本。同步完成之后 準(zhǔn) leader 才會(huì)成為真正的 leader。

  4. Broadcast(廣播階段):到了這個(gè)階段,Zookeeper 集群才能正式對(duì)外提供事務(wù)服務(wù),并且 leader 可以進(jìn)行消息廣播。同時(shí)如果有新的節(jié)點(diǎn)加入,還需要對(duì)新節(jié)點(diǎn)進(jìn)行同步。

六 ZooKeeper &ZAB 協(xié)議&Paxos算法

6.1 ZAB 協(xié)議&Paxos算法

Paxos 算法應(yīng)該可以說(shuō)是 ?ZooKeeper 的靈魂了。但是,ZooKeeper 并沒(méi)有完全采用 Paxos算法 ,而是使用 ZAB 協(xié)議作為其保證數(shù)據(jù)一致性的核心算法。另外,在ZooKeeper的官方文檔中也指出,ZAB協(xié)議并不像 Paxos 算法那樣,是一種通用的分布式一致性算法,它是一種特別為Zookeeper設(shè)計(jì)的崩潰可恢復(fù)的原子消息廣播算法。

6.2 ZAB 協(xié)議介紹

ZAB(ZooKeeper Atomic Broadcast 原子廣播) 協(xié)議是為分布式協(xié)調(diào)服務(wù) ZooKeeper 專(zhuān)門(mén)設(shè)計(jì)的一種支持崩潰恢復(fù)的原子廣播協(xié)議。 在 ZooKeeper 中,主要依賴(lài) ZAB 協(xié)議來(lái)實(shí)現(xiàn)分布式數(shù)據(jù)一致性,基于該協(xié)議,ZooKeeper 實(shí)現(xiàn)了一種主備模式的系統(tǒng)架構(gòu)來(lái)保持集群中各個(gè)副本之間的數(shù)據(jù)一致性。

6.3 ZAB 協(xié)議兩種基本的模式:崩潰恢復(fù)和消息廣播

ZAB協(xié)議包括兩種基本的模式,分別是?崩潰恢復(fù)和消息廣播。當(dāng)整個(gè)服務(wù)框架在啟動(dòng)過(guò)程中,或是當(dāng) Leader 服務(wù)器出現(xiàn)網(wǎng)絡(luò)中斷、崩潰退出與重啟等異常情況時(shí),ZAB 協(xié)議就會(huì)進(jìn)人恢復(fù)模式并選舉產(chǎn)生新的Leader服務(wù)器。當(dāng)選舉產(chǎn)生了新的 Leader 服務(wù)器,同時(shí)集群中已經(jīng)有過(guò)半的機(jī)器與該Leader服務(wù)器完成了狀態(tài)同步之后,ZAB協(xié)議就會(huì)退出恢復(fù)模式。其中,所謂的狀態(tài)同步是指數(shù)據(jù)同步,用來(lái)保證集群中存在過(guò)半的機(jī)器能夠和Leader服務(wù)器的數(shù)據(jù)狀態(tài)保持一致。

當(dāng)集群中已經(jīng)有過(guò)半的Follower服務(wù)器完成了和Leader服務(wù)器的狀態(tài)同步,那么整個(gè)服務(wù)框架就可以進(jìn)人消息廣播模式了。當(dāng)一臺(tái)同樣遵守ZAB協(xié)議的服務(wù)器啟動(dòng)后加人到集群中時(shí),如果此時(shí)集群中已經(jīng)存在一個(gè)Leader服務(wù)器在負(fù)責(zé)進(jìn)行消息廣播,那么新加人的服務(wù)器就會(huì)自覺(jué)地進(jìn)人數(shù)據(jù)恢復(fù)模式:找到Leader所在的服務(wù)器,并與其進(jìn)行數(shù)據(jù)同步,然后一起參與到消息廣播流程中去。正如上文介紹中所說(shuō)的,ZooKeeper設(shè)計(jì)成只允許唯一的一個(gè)Leader服務(wù)器來(lái)進(jìn)行事務(wù)請(qǐng)求的處理。Leader服務(wù)器在接收到客戶端的事務(wù)請(qǐng)求后,會(huì)生成對(duì)應(yīng)的事務(wù)提案并發(fā)起一輪廣播協(xié)議;而如果集群中的其他機(jī)器接收到客戶端的事務(wù)請(qǐng)求,那么這些非Leader服務(wù)器會(huì)首先將這個(gè)事務(wù)請(qǐng)求轉(zhuǎn)發(fā)給Leader服務(wù)器。

創(chuàng)新互聯(lián)www.cdcxhl.cn,專(zhuān)業(yè)提供香港、美國(guó)云服務(wù)器,動(dòng)態(tài)BGP最優(yōu)骨干路由自動(dòng)選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡(luò)助力業(yè)務(wù)部署。公司持有工信部辦法的idc、isp許可證, 機(jī)房獨(dú)有T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確進(jìn)行流量調(diào)度,確保服務(wù)器高可用性。佳節(jié)活動(dòng)現(xiàn)已開(kāi)啟,新人活動(dòng)云服務(wù)器買(mǎi)多久送多久。

文章題目:這可能是全網(wǎng)講得最清楚的ZooKeeper概念文章了-創(chuàng)新互聯(lián)
文章網(wǎng)址:http://muchs.cn/article36/eejsg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作、微信公眾號(hào)品牌網(wǎng)站建設(shè)、電子商務(wù)面包屑導(dǎo)航、定制網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

小程序開(kāi)發(fā)