zookeeper學習筆記(一)

一、概述

1.學習背景

注:作者剛剛接觸這個內容,要是有錯的地方,歡迎大家指出!
再經歷spring的一些學習之後,再一次去認識一個框架dubbo,而這個框架是基於zookeeper搭建的,本來在學習框架dubbo的時候覺得zookeeper沒那麼複雜,就認知是,他作爲一箇中間代理,有着不讓服務提供者消費者產生高耦合的作用,並且名字是叫做註冊中心,“註冊”這個詞很好,就像是一個資源管理中心一樣,服務提供者與服務消費者都去註冊自己的身份並確立自己的需求(發佈/訂閱),提供者有發佈內容之後告訴zookeeper,zookeeper根據消費者訂閱名單通知他們,想想也是特別像是一箇中介,但這個中介的實現邏輯卻不是那麼簡單哦,至少不是說起來那麼兩句話的事情,所以我就開始掉進了這個神奇的坑。

2.簡介

zookeeper是一個分佈式應用提供一致性服務的軟件。
它的功能:配置維護、域名服務(命名)、分佈式同步、集羣管理等。
功能詳解
公式:zookeeper=文件系統+監聽通知;
文件系統:具有執行遠程文件存取的能力,並以透明方式對分佈在網絡上的文件進行管理和存取。
監聽通知傾向於總結他是如何運作的。

二、zookeeper的基本結構

在這裏插入圖片描述
它本身的結構就跟我們的目錄一樣,像一顆樹。

1.節點

(1)樹節點:zNode 可存放數據,但不能放過大的數據,最多放個幾M就好啦,可設置權限ACL:增刪改查權限
(2)節點類型:
持久性節點(Persistent):需手動刪除
臨時性節點(Ephemeral):session斷開便會自動刪除,臨時節點不能創建子節點
順序性節點(Sequential):順序特性實質是在創建節點的時候,會在節點名後面加上一個數字後綴,來表示其順序。

(3)節點內容
數據內容
節點狀態信息:
cZxid 就是 Create ZXID,表示節點被創建時的事務 ID;
mZxid 就是 Modified ZXID,表示節點最後一次被修改時的事務 ID;
ctime 就是 Create Time,表示節點創建時間;
mtime 就是 Modified Time,表示節點最後一次被修改的時間;
pZxid 表示該節點的子節點列表最後一次被修改時的事務 ID,只有子節點列表變更纔會更新 pZxid,子節點內容變更不會更新;
cversion 表示子節點的版本號;
dataVersion 表示內容版本號;(供修改的時候覈對版本號)
dataLength 表示數據長度。
numChildren 表示子節點數。

2.常用命令

通過help命令打印出很多可用命令
zookeeper常用命令zkCli(客戶端)

  1. 創建節點create [-s]/[-e] path data acl;
    [-s] 順序節點,[-e] 臨時性節點,path 路徑,data 數據內容,acl 權限
  2. 修改節點數據 set path data [version];
  3. 獲取節點數據 get path;
  4. 刪除節點 delete path [version];
    有子節點這個命令是無法刪除成功的,需要rmr path(遞歸刪除)
  5. 獲取節點的子節點以及當前節點的狀態 is2 path;
  6. 查看節點狀態 start path

三、zookeeper的session

過程:C/S之間建立,一個TCP長連接來實現的,由客戶端發起connecting,嘗試連接一個服務器,成功:connected 失敗:closed。
客戶端能夠使用心跳檢測與服務器保持有效的會話,也能向服務器發送請求並接收響應,還可接收服務器的Watcher事件通知
ping的機制,發一個ping包。
Session的sessionTimeout,是會話超時時間,如果這段時間內,客戶端未與服務器發生任何溝通(心跳或請求),服務器端會清除該session數據,客戶端的TCP長連接將不可用,這種情況下,客戶端需要重新實例化一個Zookeeper對象。
(心跳結束,session過期,該session所創建的所有臨時節點都會被拋棄刪除)

四、zookeeper的watcher機制

zookeeper引入了watcher機制來實現發佈/訂閱功能,能夠讓多個訂閱者同時監聽某一個主題對象,當這個主題對象自身狀態發生變化時,會通知所有訂閱者。
在這裏插入圖片描述
客戶端向zk註冊watcher的同時,會將客戶端的watcher對象存儲在客戶端的WatchManager中;zk服務器觸發watch事件後,會向客戶端發送通知,客戶端線程從watchManager中取出對應watcher執行。
watcher內容
NodeDataChanged事件:無論節點數據發生變化還是數據版本發生變化都會觸發(即使被更新數據與新數據一樣,數據版本都會發生變化)。
NodeChildrenChanged事件:新增和刪除子節點會觸發該事件類型。
注意:一級子節點增刪會觸發,修改不會,子節點再新增也不會觸發,一定要是一級子節點
zookeeper原本加上watcher的話是一次性的,使用了會被立即銷燬,若是需要一直監聽,還需要註冊。

五、zookeeper的權限控制acl

四種實現方式

  1. world 一個單獨的ID,表示任何人都可以訪問;
  2. auth 不使用ID,只有認證的用戶可以訪問;
  3. digest 使用username:password生成MD5哈希值作爲認證ID;
  4. ip 使用客戶端主機IP地址來進行認證.

六、使用場景

開發環境與測試環境,使用ACL可以進行分離,開發者無權去操作測試的節點
生產環境控制指定ip服務可以訪問相關節點。

參考:
1.網課
2.https://www.cnblogs.com/likehua/p/3999610.html
3.https://www.cnblogs.com/IcanFixIt/p/7854114.html
4.https://blog.csdn.net/zkp_java/article/details/82711810
5.https://blog.51cto.com/welcomeweb/2103292?utm_source=oschina-app

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章