上篇文章 咱們已經安裝上了zookeeper,也簡單的體驗了一把,可是若是讓你給別人介紹下zookeeper,可能也是說不出來。本篇文章就參考了網上各位優秀博主的文章,整理出本身更能理解的內容html
http://www.cnblogs.com/sunddenly/category/620563.htmlnode
https://mp.weixin.qq.com/s/Gs4rrF8wwRzF6EvyrF_o4A程序員
Zookeeper是一種分佈式協調服務異步
以前的工做都是單機部署應用,並無接觸過zookeeper,如今 的新公司動不動就集羣,什麼主從,分佈式,渣渣的我聽得一臉矇蔽,項目中也使用zookeeper進行應用配置以及使用了elasticjob。分佈式
Zookeeper的數據模型如同文件系統的目錄。
設計
Zookeeper的數據存儲是基於節點,這種節點叫作Znode。htm
data:blog
Znode存儲的數據信息。事件
ACL:事務
記錄Znode的訪問權限,即哪些人或哪些IP能夠訪問本節點。
stat:
包含Znode的各類元數據,好比事務ID、版本號、時間戳、大小等等。
child:
當前節點的子節點引用
Zookeeper是爲讀多寫少的場景所設計。Znode並非用來存儲大規模業務數據,而是用於存儲少許的狀態和配置信息,每一個節點的數據最大不能超過1MB。
Zookeeper包含了哪些基本操做呢?這裏列舉出比較經常使用的API:
create 建立節點
delete 刪除節點
exists 判斷節點是否存在
getData 得到一個節點的數據
setData 設置一個節點的數據
getChildren 獲取節點下的全部子節點
這其中,exists,getData,getChildren屬於讀操做。Zookeeper客戶端在請求讀操做的時候,能夠選擇是否設置Watch。
Watch是什麼意思呢?
咱們能夠理解成是註冊在特定Znode上的觸發器。當這個Znode發生改變,也就是調用了create,delete,setData方法的時候,將會觸發Znode上註冊的對應事件,請求Watch的客戶端會接收到異步通知。
具體交互過程以下:
1.客戶端調用getData方法,watch參數是true。服務端接到請求,返回節點數據,而且在對應的哈希表裏插入被Watch的Znode路徑,以及Watcher列表。
2.當被Watch的Znode已刪除,服務端會查找哈希表,找到該Znode對應的全部Watcher,異步通知客戶端,而且刪除哈希表中對應的Key-Value。