Zookeeper的底層是一套數(shù)據(jù)儲存結(jié)構(gòu),其中的節(jié)點,我們稱之為znode。Zookeeper中數(shù)據(jù)存儲的結(jié)構(gòu)和標(biāo)準(zhǔn)文件系統(tǒng)非常類似,擁有一個層次的命名空間,也是使用斜杠(/)進(jìn)行分割,兩者都是采用樹形層次結(jié)構(gòu)。不同的是,標(biāo)準(zhǔn)文件系統(tǒng)是由文件夾和文件來組成的樹,而Zookeeper是由什么來組成的樹呢?下面我們來看一下Zookeeper數(shù)據(jù)存儲結(jié)構(gòu),如圖1所示。
圖1 Zookeeper數(shù)據(jù)模型
從圖2可知,Zookeeper是由節(jié)點組成的樹,樹中的每個節(jié)點被稱為—Znode。每個節(jié)點都可以擁有子節(jié)點。每一個Znode默認(rèn)能夠存儲1MB的數(shù)據(jù),每個Znode都可以通過其路徑唯一標(biāo)識,如圖5-2中第三層的第一個Znode~~,~~,它的路徑是/app1/p_1。Zookeeper數(shù)據(jù)模型中的每個Znode都是由三部分組成,分別是stat(狀態(tài)信息,描述該Znode的版本,權(quán)限信息等組成)、data(與該Znode關(guān)聯(lián)的數(shù)據(jù))、children(該Znode下的子節(jié)點)。
Znode有兩種類型,分別是臨時節(jié)點和永久節(jié)點。
臨時節(jié)點,該生命周期依賴于創(chuàng)建它們的會話,一旦會話結(jié)束,臨時節(jié)點將會被自動刪除,當(dāng)然也可以手動刪除。雖然每個臨時的Znode都會綁定到一個客戶端,但它們對所有的客戶端還是可見的。另外,需要注意的是臨時節(jié)點不允許擁有子節(jié)點。
永久節(jié)點,該生命周期不依賴于會話,并且只有在客戶端顯示執(zhí)行刪除操作的時候,它們才能被刪除。
由于Znode的序列化特性,在創(chuàng)建節(jié)點時,用戶可以請求在該Znode的路徑結(jié)尾添加一個不斷增加的序列號,序列號對于此節(jié)點的父節(jié)點來說是唯一的,這樣便會記錄每個子節(jié)點創(chuàng)建的先后順序。它的格式為“%010d”(10位數(shù)字,沒有數(shù)值的數(shù)位用0補(bǔ)充,例如“0000000001”)。當(dāng)計數(shù)值大于232-1時,計數(shù)器將會溢出。這樣便會存在四種類型的目錄節(jié)點,分別對應(yīng)如下:
PERSISTENT:永久節(jié)點
EPHEMERAL:臨時節(jié)點
PERSISTENT_SEQUENTIAL:序列化永久節(jié)點
EPHEMERAL_SEQUENTIAL:序列化臨時節(jié)點
猜你喜歡:
Zookeeper分布式系統(tǒng)的集群架構(gòu)介紹
Spark的集群安裝與配置簡介【大數(shù)據(jù)技術(shù)文章】
簡單舉例,MapReduce是如何進(jìn)行計算的