zookeeper數據模型

ZooKeeper的最小數據單元ZNode,ZNode可以保存數據,也可以掛載子節點,依次構成一個層次化的結構,可以看作是樹。

ZNode的節點路徑由一系列使用斜槓(/)進行分割的路徑表示,可以向節點中寫入數據,也可以在節點下面創建子節點。

事務ID:在ZooKeeper中事務是指能夠改變服務器狀態的操作,也稱爲事務操作和更新操作,一般包括數據節點的創建與刪除,數據節點內容更新和客戶端會話

創建與失效操作。對於每一個事務請求,ZooKeeper都會爲其分配一個全局唯一的事務ID,用ZXID來表示,通常爲64位的數字,前32位(epoch)標記 leader信息,後32位

爲當前leader下的事務替增序列號,ZXID可以間接的識別出ZooKeeper處理這些更新操作的全局順序

一個epoch號對應一個leader,新的leader有新的epoch號


ZooKeeper的數據節點分爲四種類型: PERSISTENT(持久性),PERSISTENT_SEQUENTIAL(持久順序節點),EPHEMERAL(臨時節點),

EPHEMERAL_SEQUENTIAL(臨時順序節點)

順序節點在創建節點時候ZooKeeper會自動在節點名稱後面加上一個數字後綴,做爲一個新的完整的節點名字,上限爲整型的最大值。

臨時節點下面不能創建子節點


每個數據節點除了存儲節點的數據內容外,還包含了節點的相關狀態信息。


數據節點Stat對象的信息

czxid:ZNode創建節點時候的事務ID(ZXID)

mzxid:ZNode最後修改節點的事務ID(ZXID)

ctime:ZNode創建時間的絕對毫秒數

mtime:ZNode最後修改時間的絕對毫秒數

version:ZNode版本號(修改次數)

cversion:子節點修改次數

aversion:權限修改次數

ephemeralOwner:臨時節點的擁有者session id,非臨時節點爲0

dataLength:Znode的數據長度

numChildren:子節點數

pzxid:表示該節點子節點列表最後一次修改時的事務ID,只有子節點列表修改纔會更新,子節點數據內容變更不會更新


版本號:客戶端對節點內容進行變更時候 會校驗版本號,當前版本號與需要更新的版本號一致才進行更新,否則更新失敗,如果客戶端傳入version爲-1表示

按當前版本號更新


ZooKeeper Sessions

客戶端通過創建一個handle和服務端建立session連接,一旦創建成功,handle就進入CONNECTING狀態,客戶端連接一臺服務端,進入CONNECTED狀態,當客戶端斷開 如session中止,鑑權失敗或者應用直接結束handle,handle則進入CLOSED狀態

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