Zookeeper學習——基礎框架

其餘更多java基礎文章:
java基礎學習(目錄)java


概述

Zookeeper是一個開源的分佈式的,爲分佈式應用提供協調服務的Apache項目。node

Zookeeper從設計模式角度來理解:是一個基於觀察者模式設計的分佈式服務管理框架,它負責存儲和管理你們都關心的數據,而後接受觀察者的註冊,一旦這些數據的狀態發生變化,Zookeeper就將負責通知已經在Zookeeper上註冊的那些觀察者作出相應的反應,從而實現集羣中相似Master/Slave管理模式設計模式

Zookeeper=文件系統+通知機制服務器

基礎

數據結構

ZooKeeper數據模型的結構與Unix文件系統很相似,zookeeper集羣自身維護了一套數據結構。這個存儲結構是一個樹形結構,其上的每個節點,咱們稱之爲"znode",每個znode默認可以存儲1MB的數據,每一個ZNode均可以經過其路徑惟一標識。session

節點類型

  • Znode有兩種類型:數據結構

    • 短暫(ephemeral):客戶端和服務器端斷開鏈接後,建立的節點本身刪除
    • 持久(persistent):客戶端和服務器端斷開鏈接後,建立的節點不刪除
  • Znode有四種形式的目錄節點(默認是persistent )框架

    1. 持久化目錄節點(PERSISTENT)
      客戶端與zookeeper斷開鏈接後,該節點依舊存在
    2. 持久化順序編號目錄節點(PERSISTENT_SEQUENTIAL)
      客戶端與zookeeper斷開鏈接後,該節點依舊存在,只是Zookeeper給該節點名稱進行順序編號
    3. 臨時目錄節點(EPHEMERAL)
      客戶端與zookeeper斷開鏈接後,該節點被刪除
    4. 臨時順序編號目錄節點(EPHEMERAL_SEQUENTIAL)
      客戶端與zookeeper斷開鏈接後,該節點被刪除,只是Zookeeper給該節點名稱進行順序編號
  • 建立znode時設置順序標識,znode名稱後會附加一個值,順序號是一個單調遞增的計數器,由父節點維護分佈式

  • 在分佈式系統中,順序號能夠被用於爲全部的事件進行全局排序,這樣客戶端能夠經過順序號推斷事件的順序post

特色

  1. Zookeeper:一個領導者(leader),多個跟隨者(follower)組成的集羣。
  2. Leader負責進行投票的發起和決議,更新系統狀態
  3. Follower用於接收客戶請求並向客戶端返回結果,在選舉Leader過程當中參與投票
  4. 集羣中只要有半數以上節點存活,Zookeeper集羣就能正常服務。
  5. 全局數據一致:每一個server保存一份相同的數據副本,client不管鏈接到哪一個server,數據都是一致的。
  6. 更新請求順序進行,來自同一個client的更新請求按其發送順序依次執行。
  7. 數據更新原子性,一次數據更新要麼成功,要麼失敗。
  8. 實時性,在必定時間範圍內,client能讀到最新數據。

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子節點數量

客戶端命令行操做

命令基本語法 功能描述
help 顯示全部操做命令
ls path [watch] 使用 ls 命令來查看當前znode中所包含的內容
ls2 path [watch] 查看當前節點數據並能看到更新次數等數據
create 普通建立
-s 含有序列
-e 臨時(重啓或者超時消失)
get path [watch] 得到節點的值
set 設置節點的具體值
stat 查看節點狀態
delete 刪除節點
rmr 遞歸刪除節點
相關文章
相關標籤/搜索