ZooKeeper介紹(二)——Znode

新創建集團 技術 程序猿新路歷程 2017-03-31

ZooKeeper的Znode,既可以理解為一個目錄結構,也可以理解為一個節點。在這個Znode裡面,調用者可以來查看數據、存儲數據、修改數據、刪除數據。每一個Znode靠路徑代表其唯一性,在ZooKeeper的單臺Server上不會出現重複路徑的Znode節點。下面就詳細介紹一下Znode裡面的內容。

ZooKeeper的數據模型

ZooKeeper的數據模型是基於文件的方式,並沒有涉及成數據庫形式的。每一個節點既可以是文件節點本身,也可以是目錄。節點裡面會保存著元信息、數據、ACL、時間戳等信息。可以對保存的信息進行查詢、修改,但前提是必須有權限。

Znode是具有原子性的,每次存儲的數據不大隻有幾KB,目的是用來進行數據的調度,而不是像數據庫一樣。因為原子性的特點,Znode節點在被寫入時,會保證一次性寫成功。ZooKeeper的服務端和客戶端對節點大小,會有一定的限制,正常使用時,不會超過1M大小。既然ZooKeeper實現了數據的調度,因此可以用來支持分佈式配置的存儲、狀態信息、位置信息的存儲。

Znode的身份標識是靠路徑做區分,反斜槓/分割目錄路徑。每一個Znode節點都只有一個唯一的路徑。如下圖:

ZooKeeper介紹(二)——Znode

ZooKeeper節點Znode

每個Znode節點都包含了該節點的數據、狀態信息、子節點。狀態信息用來記錄每次節點變更後的時間戳、版本等信息。因此,當版本發生變更的時候,ZooKeeper會同步修改該節點的狀態信息。

客戶端在訪問ZooKeeper的時候,主要是對Znode訪問。可以有如下特徵:

  1. 監視(Watch)

    客戶端可以在Znode上面增加監視事件,當Znode發生變化的時候,ZooKeeper就會觸發watch,並向客戶端發送且僅通知一次,watch只能被觸發一次。

  2. 數據訪問

    節點數據訪問是原子性,每個節點都有ACL(權限列表),規定了用戶的權限,可以劃分權限設定。

  3. 節點類型

    節點類型分為兩種,永久性和臨時性。臨時性節點在每次會話結束的時候,自動刪除。也可以手動刪除臨時節點,而且臨時節點沒法建立子節點。

  4. 順序節點

    每個節點創建的時候,都會給新創建的節點增加1個身份數字,從1開始。它的格式“%10d”,計數超過2^32-1時,會有溢出風險。

    Znode類型有4種:永久性節點、臨時性節點、永久性有序節點、臨時性有序節點

ZooKeeper的時間

  1. Zxid

    Znode節點每次變更,ZooKeeper都會給Znode節點增加一個zxid的時間戳。zxid時間戳越小,對應的事件則發生在之前。zxid分為3種類型:cZxid(創建時間)、mZxid(修改時間)、pZxid(最新時間)

  2. 版本號

    每個節點操作都有自己的版本號。分為3種版本號:

    version 子節點數據版本號;cversion 子節點版本號;aversion 節點所擁有的的ACL版本號;

節點的屬性結構

除了剛才提到的6種狀態屬性外,還有ephemeralOwner(會話ID,如果為臨時節點,則為節點擁有者的會話ID,否則為0)、datalength節點數長度、numChildren子節點長度。

(完)

下一篇:ZooKeeper介紹(三)---部署安裝