天天看點

【ZooKeeper Notes 14】資料模型

轉載請注明:@ni掌櫃 [email protected]

本文主要講述ZooKeeper的資料模型,包括ZooKeeper的資料視圖,節點的層次結構以及節點類型等基本屬性。Zookeeper的視圖結構類似标準的Unix檔案系統,但是沒有引入檔案系統相關概念:目錄和檔案,而是使用了自己特有的節點(node)概念,稱為znode。Znode是ZooKeeper中資料的最小單元,每個znode上都可以儲存資料,同時還可以挂載子節點,也構成了一個階層化的命名空間,我們稱之為樹。

首先我們來看下面這張圖,對ZooKeeper上的資料節點有一個大概的認識。這個圖來自zookeeper官方文檔中,相信很多開發者在網上也都看到過很多次了。在ZK中,每一個資料節點稱為一個znode,所有znode按階層化進行組織,形成一棵樹。znode是一個跟Unix檔案系統路徑相似的節點,由一系列由斜杠(/ )進行分割的路徑表示。可以向這個節點中寫入資料,也可以在節點下面建立子節點。

【ZooKeeper Notes 14】資料模型

節點類型

每個節點是有生命周期的,這取決于節點的類型。在ZooKeeper中,節點類型可以分為持久節點(PERSISTENT )、臨時節點(EPHEMERAL),以及時序節點(SEQUENTIAL ),具體在節點建立過程中,一般是組合使用,可以生成以下4種節點類型:

持久節點(PERSISTENT)

所謂持久節點,是指在節點建立後,就一直存在,直到有删除操作來主動清除這個節點——不會因為建立該節點的用戶端會話失效而消失。

持久順序節點(PERSISTENT_SEQUENTIAL )

這類節點的基本特性和上面的節點類型是一緻的。額外的特性是,在ZK中,每個父節點會為他的第一級子節點維護一份時序,會記錄每個子節點建立的先後順序。基于這個特性,在建立子節點的時候,可以設定這個屬性,那麼在建立節點過程中,ZK會自動為給定節點名加上一個數字字尾,作為新的節點名。這個數字字尾的上限是整型的最大值。

臨時節點(EPHEMERAL )

和持久節點不同的是,臨時節點的生命周期和用戶端會話綁定。也就是說,如果用戶端會話失效,那麼這個節點就會自動被清除掉。注意,這裡提到的是會話失效,而非連接配接斷開。另外,在臨時節點下面不能建立子節點。

臨時順序節點(EPHEMERAL_SEQUENTIAL)

節點資訊

  1. [zk: localhost:2181(CONNECTED) 4] get /YINSHI.MONITOR.ALIVE.CHECK
  2. ?t 10.232.102.191:21811353595654255
  3. cZxid = 0x300000002
  4. ctime = Thu Dec 08 23:29:53 CST 2011
  5. mZxid = 0xe00008bbf
  6. mtime = Thu Jul 28 07:17:34 CST 2012
  7. pZxid = 0x300000002
  8. cversion = 0
  9. dataVersion = 2164293
  10. aclVersion = 0
  11. ephemeralOwner = 0x0