面試官問:ZooKeeper 有幾種節點型別?別回答 4 種啦

面試官問:ZooKeeper 有幾種節點型別?別回答 4 種啦

本文作者:HelloGitHub-

老荀

好久沒更新 ZK 的文章了,我想死你們啦。之前釋出的 HelloZooKeeper 系列文章完結後,專案收穫了將近 600 個 star。這遠遠超過了我自己的預期,在這裡感謝大家的支援~

後面會繼續 ZooKeeper 的話題,透過單篇的形式就某個 ZK 的話題繼續聊,今天我們先來看看 ZK 的節點型別。話不多說,我們進入今天的主題~

一、關於 ZK 的節點型別

大家如果刷過 ZK 相關面試題的話,就一定會刷到過 “ZK 有幾種節點型別?”,大家通常背書的答案的話是:4 種!但其實 ZK (3。6。2)服務端支援 7 種節點型別,分別是:

持久

持久順序

臨時

臨時順序

容器

持久 TTL

持久順序 TTL

這 7 種類型之前的文章中也有提到過,但是並沒有展開講。這次更新的單篇想要把這 7 種類型的節點,認認真真的講一遍!Let‘s GO

面試官問:ZooKeeper 有幾種節點型別?別回答 4 種啦

二、簡單介紹

2。1 持久、臨時

持久

不用我多說,是用的最多的一種型別,也是預設的節點型別,

臨時

節點相較於

持久

節點來說,就是它會隨著客戶端會話結束而被刪除,通常可以用在一些特定的場景,例如分散式鎖釋放,健康檢查等。

2。2 持久順序、臨時順序

這兩種我放在一起介紹,因為他們相對於上面兩種的特性就是 ZK 會自動在這兩種節點之後增加一個數字的字尾,而路徑 + 數字字尾是能保證唯一的,這數字字尾的應用場景可以實現諸如分散式佇列,分散式公平鎖等。

2。3 容器

容器

節點是 3。5 以後新增的節點型別,只要在呼叫

create

方法時,指定

CreateMode

CONTAINER

即可建立

容器

的節點型別,

容器

節點的表現形式和持久節點是一樣的,但是區別是 ZK 服務端啟動後,會有一個單獨的執行緒去掃描,所有的容器節點,當發現

容器

節點的子節點數量為 0 時,會自動刪除該節點,除此之外和

持久

節點沒有區別,官方註釋給出的使用場景是

Container nodes are special purpose nodes useful for recipes such as leader, lock, etc。

說可以用在 leader 或者鎖的場景中。

2。4 持久 TTL、持久順序 TTL

關於

持久

順序

這兩個關鍵字,不用我再解釋了,這兩種型別的節點重點是後面的

TTL

TTL

time to live

的縮寫,指帶有存活時間,簡單來說就是當該節點下面沒有子節點的話,超過了

TTL

指定時間後就會被自動刪除,特性跟上面的

容器

節點很像,只是

容器

節點沒有超時時間而已,但是

TTL

啟用是需要額外的配置(這個之前也有提過)配置是

zookeeper。extendedTypesEnabled

需要配置成

true

,否則的話建立

TTL

時會收到

Unimplemented

的報錯

三、原理介紹

單純的

持久

臨時

節點我就不介紹了,之前的系列文章有講

3。1 順序關鍵字

客戶端建立一個

順序

節點的時候,服務端得知當前節點是

順序

節點的時候會自動給路徑加上字尾,字尾就是父節點的 cversion,代表建立子節點的個數

if (createMode。isSequential()) {

path = path + String。format(Locale。ENGLISH, “%010d”, parentCVersion);}

就是這麼簡單~

3。2 容器、TTL 關鍵字

這兩種其實可以放在一起講,服務端在啟動的時候會額外啟動一個定時任務執行緒,會定期的掃描所有的

容器

TTL

的節點,逐一判斷子節點的數量以及一些相關配置,來決定是否刪除,首先整個邏輯是在

ContainerManager

中,定時任務是由

TimeTask

實現的,相關的配置有

面試官問:ZooKeeper 有幾種節點型別?別回答 4 種啦

四、小結

持久

關鍵字:客戶端不主動刪除的話,節點資料會一直存在

臨時

關鍵字:客戶端連線斷開後,節點資料會被一起刪除

順序

關鍵字:服務端會自動為該節點加數字字尾

容器

:服務端會定期掃描這些節點,當該節點下面沒有子節點時(或其他條件時)服務端會自動刪除節點

TTL

:需要額外配置才能啟用,基本和

容器

相同,當超過

TTL

時間節點下面都沒有再建立子節點時會被刪除,但是當建立子節點會重置該超時時間

ZKr~好久沒更了,這次先挑一個簡單的話題。後面大家想學哪些 ZK 的知識可以留言告訴我。

面試官問:ZooKeeper 有幾種節點型別?別回答 4 種啦

關注「HelloGitHub」更多驚喜等著你

相關文章