溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

zookeeper高級特性有哪些

發(fā)布時間:2021-12-23 12:01:06 來源:億速云 閱讀:144 作者:iii 欄目:云計算

這篇文章主要講解了“zookeeper高級特性有哪些”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“zookeeper高級特性有哪些”吧!

一、三個概念

1.CreateMode

在create的時候可以設(shè)置znode的類型

主要有四種:

PERSISTENT (持續(xù)的,相對于EPHEMERAL,不會隨著client的斷開而消失)

PERSISTENT_SEQUENTIAL(持久的且?guī)ы樞虻模?/p>

EPHEMERAL (短暫的,生命周期依賴于client session)

EPHEMERAL_SEQUENTIAL  (短暫的,帶順序的)

2.Watcher

Watcher是一種反向推送機制,即zonde(包括他的child)有改變的時候會通知客戶端。

可以自定義Watcher,注冊給zonde。

watcher分為兩大類:data watches和child watches。前者監(jiān)聽數(shù)據(jù)的變動,后者監(jiān)聽子node的變動。

Watcher是一次性的!一旦被調(diào)用,則需要重新注冊。

3.ACL

acl即access control。zookeeper通過ACL機制來控制權(quán)限。創(chuàng)建znode的時候可以指定。前邊我們講過,一套zookeeper會被多個程序使用。就像linux支持多用戶一樣。所以需要有一套權(quán)限控制:不然自己創(chuàng)建的節(jié)點,被別的應(yīng)用程序無緣無故刪了,那找誰去?

Zookeeper的權(quán)限級別:

READ: 允許獲取該節(jié)點的值和列出子節(jié)點。

WRITE: 允許設(shè)置該節(jié)點的值。

CREATE: 允許創(chuàng)建子節(jié)點。

DELETE: 可以刪除子節(jié)點。

ADMIN: 超級權(quán)限。相當(dāng)于root

從上到下遞次增強,后面的權(quán)限包含前面的權(quán)限。

zookeeper的很多高級特性,都是基于以上三個概念來實現(xiàn)的。特別是CreateMode和Watcher

二、java客戶端

zookeeper官方提供了java客戶端。提供的接口也比較基礎(chǔ)。比前一篇測試用到的telnet客戶端唯一強的一點就是:我們可以在代碼里實現(xiàn)Watcher接口實現(xiàn)擴展的業(yè)務(wù)!在命令行可是做不到這點的。。

maven依賴:

<dependency>
	<groupId>org.apache.zookeeper</groupId>
	<artifactId>zookeeper</artifactId>
	<version>3.4.6</version>
</dependency>



下面是一些重要的接口列表。


zookeeper高級特性有哪些
 

 接口都很直觀,描述也很詳細。就不做額外的說明了。

三、一些高級特性實現(xiàn)原理。

1.Name Service:有點類似JNDI,樹形目錄天生的就有全局唯一名稱。這功能實踐中也沒什么用,而且替代方案也很多。略。

2.配置推送:比如某個前端網(wǎng)站有100臺機器,我們要做的是在每臺機器上都有一個main程序連zookeeper,注冊好Watcher。在本地連zookeeper把配置寫入,zookeeper就會通過Watcher,自動把配置推送到這些機器上。而不需要去手動去更新。(相當(dāng)于運維的腳本。)


zookeeper高級特性有哪些
 

3.集群管理:

每個Server起來之后都在 Zookeeper 上創(chuàng)建一個 EPHEMERAL 類型的znode,假設(shè)他們都有一個共同的父GroupMembers!我們在每個Server上調(diào)用getChildren(GroupMembers)方法,并注冊一個 Child Watcher。由于是 EPHEMERAL 的znode,當(dāng)創(chuàng)建它的 Server 死去,這個znode也隨之被刪除,所以 Children 將會變化,這時 getChildren上的 Watcher 將會被調(diào)用,所以其它 Server 就知道已經(jīng)有某臺 Server 死去了。新增 Server 也是同樣的原理。

4.Leader選舉

和集群管理的設(shè)計基本一樣,不同的地方是,這次創(chuàng)建的znone類型是EPHEMERAL_SEQUENTIAL ,不僅僅隨著member的同生同滅,而且是有順序的。我們只要把編號最小的member認為是Master,就可以做到Leader的動態(tài)選舉!


zookeeper高級特性有哪些
 

5.全局鎖

     zookeeper可以利用他優(yōu)秀的數(shù)據(jù)一致性算法來提供可靠的全局鎖服務(wù)。

獲得鎖是一個遞歸的過程

1.創(chuàng)建znode "/distributed_lock"

2.在distributed_lock下新建子節(jié)點"/distributed_lock/xxxxxx",EPHEMERAL_SEQUENTIAL 模式,當(dāng)前序號假如是i。

3.對distributed_lock調(diào)用getChildren(),如果i是children列表里最小的,則獲得鎖;否則進入第4步

4.等待children列表里緊跟在i后邊的那個節(jié)點被刪除的通知(exists()方法)。記為j。而j又依賴于僅比j小的節(jié)點k。一直遞歸等待最小的znode的被刪除。。

注:雖然EPHEMERAL_SEQUENTIAL是遞增的,但仍然不能粗暴的認為緊跟在i后邊的節(jié)點j=i-1。這是因為釋放鎖的順序并不是完全按照節(jié)點順序!

釋放鎖:

刪除自己創(chuàng)建的子節(jié)點即可

6.分布式隊列

類似于上邊全局鎖的設(shè)計。只要確保每次消費的時候編號都是最小的。就能做到先進先出。

7 。。。略  根據(jù)zookeeper創(chuàng)建節(jié)點類型的不同,再結(jié)合Watcher特性。還可以提供其他很多的功能。比如各種類型queue,各種類型的Lock(上面僅僅介紹了write鎖),barriers,信號量Semaphore  原子類型AtomicInteger等等。。。

所有的這些都是分布式的,高可靠的。

更多更全的功能在netflix 公司開源的 zookeeper客戶端Curator中有實現(xiàn)。作為普通開發(fā)者,直接使用Curator是最高效的!

感謝各位的閱讀,以上就是“zookeeper高級特性有哪些”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對zookeeper高級特性有哪些這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI