Apache ZooKeeper:ZooKeeper數據模型_數據結構圖_節點類型與屬性

ZooKeeper數據模型

ZooKeeper的數據模型,在結構上和標準文件系統的非常相似,擁有一個層次的命名空間,都是採用樹形層次結構,ZooKeeper樹中的每個節點被稱爲—Znode。和文件系統的目錄樹一樣,ZooKeeper樹中的每個節點可以擁有子節點。但也有不同之處:

  1. Znode兼具文件和目錄兩種特點。既像文件一樣維護着數據、元信息、ACL、時間戳等數據結構,又像目錄一樣可以作爲路徑標識的一部分,並可以具有子Znode。用戶對Znode具有增、刪、改、查等操作(權限允許的情況下)。
  2. Znode具有原子性操作,讀操作將獲取與節點相關的所有數據,寫操作也將替換掉節點的所有數據。另外,每一個節點都擁有自己的ACL(訪問控制列表),這個列表規定了用戶的權限,即限定了特定用戶對目標節點可以執行的操作。
  3. Znode存儲數據大小有限制。ZooKeeper雖然可以關聯一些數據,但並沒有被設計爲常規的數據庫或者大數據存儲,相反的是,它用來管理調度數據,比如分佈式應用中的配置文件信息、狀態信息、彙集位置等等。這些數據的共同特性就是它們都是很小的數據,通常以KB爲大小單位。ZooKeeper的服務器和客戶端都被設計爲嚴格檢查並限制每個Znode的數據大小至多1M,當時常規使用中應該遠小於此值。
  4. Znode通過路徑引用,如同Unix中的文件路徑。路徑必須是絕對的,因此他們必須由斜槓字符來開頭。除此以外,他們必須是唯一的,也就是說每一個路徑只有一個表示,因此這些路徑不能改變。在ZooKeeper中,路徑由Unicode字符串組成,並且有一些限制。字符串"/zookeeper"用以保存管理信息,比如關鍵配額信息。

數據結構圖

在這裏插入圖片描述
圖中的每個節點稱爲一個Znode。 每個Znode由3部分組成:
stat:此爲狀態信息, 描述該Znode的版本, 權限等信息
data:與該Znode關聯的數據
children:該Znode下的子節點

節點類型

Znode有兩種,分別爲臨時節點永久節點
節點的類型在創建時即被確定,並且不能改變。
臨時節點:該節點的生命週期依賴於創建它們的會話。一旦會話結束,臨時節點將被自動刪除,當然可以也可以手動刪除。臨時節點不允許擁有子節點

永久節點:該節點的生命週期不依賴於會話,並且只有在客戶端顯示執行刪除操作的時候,他們才能被刪除。
  
Znode還有一個序列化的特性,如果創建的時候指定的話,該Znode的名字後面會自動追加一個不斷增加的序列號。序列號對於此節點的父節點來說是唯一的,這樣便會記錄每個子節點創建的先後順序。它的格式爲“%10d”(10位數字,沒有數值的數位用0補充,例如“0000000001”)。

在這裏插入圖片描述
這樣便會存在四種類型的Znode節點,分別對應:

  • PERSISTENT:永久節點
  • EPHEMERAL:臨時節點
  • PERSISTENT_SEQUENTIAL:永久節點、序列化
  • EPHEMERAL_SEQUENTIAL:臨時節點、序列化

節點屬性

每個znode都包含了一系列的屬性,通過命令get,可以獲得節點的屬性。在這裏插入圖片描述
dataVersion:數據版本號,每次對節點進行set操作,dataVersion的值都會增加1(即使設置的是相同的數據),可有效避免了數據更新時出現的先後順序問題。

cversion :子節點的版本號。當znode的子節點有變化時,cversion 的值就會增加1。

cZxid :Znode創建的事務id。

mZxid :Znode被修改的事務id,即每次對znode的修改都會更新mZxid。
對於zk來說,每次的變化都會產生一個唯一的事務id,zxid(ZooKeeper Transaction Id)。通過zxid,可以確定更新操作的先後順序。例如,如果zxid1小於zxid2,說明zxid1操作先於zxid2發生,zxid對於整個zk都是唯一的,即使操作的是不同的znode。

ctime:節點創建時的時間戳.

mtime:節點最新一次更新發生時的時間戳.

ephemeralOwner:如果該節點爲臨時節點, ephemeralOwner值表示與該節點綁定的session id. 如果不是, ephemeralOwner值爲0.
在client和server通信之前,首先需要建立連接,該連接稱爲session。連接建立後,如果發生連接超時、授權失敗,或者顯式關閉連接,連接便處於CLOSED狀態, 此時session結束。

發佈了134 篇原創文章 · 獲贊 317 · 訪問量 25萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章