1. 程式人生 > >Zookeeper(三)——理論篇(三)

Zookeeper(三)——理論篇(三)

一、Zk資料結構

  1. ZooKeeper資料模型的結構與Unix檔案系統很類似,整體上可以看作是一棵樹,每個節點稱做一個ZNode。
  2. 很顯然zookeeper叢集自身維護了一套資料結構。這個儲存結構是一個樹形結構,其上的每一個節點,我們稱之為"znode",每一個znode預設能夠儲存1MB的資料,每個ZNode都可以通過其路徑唯一標識

二、節點型別

  1. Znode有兩種型別:
    • 短暫(ephemeral):客戶端和伺服器端斷開連線後,建立的節點自己刪除
    • 持久(persistent):客戶端和伺服器端斷開連線後,建立的節點不刪除
  2. Znode有四種形式的目錄節點(預設是persistent )
    • (1)持久化目錄節點(PERSISTENT):客戶端與zookeeper斷開連線後,該節點依舊存在
    • (2)持久化順序編號目錄節點(PERSISTENT_SEQUENTIAL):客戶端與zookeeper斷開連線後,該節點依舊存在,只是Zookeeper給該節點名稱進行順序編號
    • (3)臨時目錄節點(EPHEMERAL):客戶端與zookeeper斷開連線後,該節點被刪除
    • (4)臨時順序編號目錄節點(EPHEMERAL_SEQUENTIAL):客戶端與zookeeper斷開連線後,該節點被刪除,只是Zookeeper給該節點名稱進行順序編號
  3. 建立znode時設定順序標識,znode名稱後會附加一個值,順序號是一個單調遞增的計數器,由父節點維護
  4. 在分散式系統中,順序號可以被用於為所有的事件進行全域性排序,這樣客戶端可以通過順序號推斷事件的順序

三、stat結構體

  • 1)czxid- 引起這個znode建立的zxid,建立節點的事務的zxid(ZooKeeper Transaction Id):每次修改ZooKeeper狀態都會收到一個zxid形式的時間戳,也就是ZooKeeper事務ID。事務ID是ZooKeeper中所有修改總的次序。每個修改都有唯一的zxid,如果zxid1小於zxid2,那麼zxid1在zxid2之前發生。
  • 2)ctime - znode被建立的毫秒數(從1970年開始)
  • 3)mzxid - znode最後更新的zxid
  • 4)mtime - znode最後修改的毫秒數(從1970年開始)
  • 5)pZxid-znode最後更新的子節點zxid
  • 6)cversion - znode子節點變化號,znode子節點修改次數
  • 7)dataversion - znode資料變化號
  • 8)aclVersion - znode訪問控制列表的變化號
  • 9)ephemeralOwner- 如果是臨時節點,這個是znode擁有者的session id。如果不是臨時節點則是0。
  • 10)dataLength- znode的資料長度
  • 11)numChildren - znode子節點數量

四、監聽器原理

  1. 監聽器是一個介面,我們的程式碼中可以實現Wather這個介面,實現其中的process方法,方法中即我們自己的業務邏輯
  2. 監聽器的註冊是在獲取資料的操作中實現:
    • getData(path,watch?)監聽的事件是:節點資料變化事件
    • getChildren(path,watch?)監聽的事件是:節點下的子節點增減變化事件