Zookeeper服務註冊與發現機制原理

Zookeeper解決了分佈式鎖的各種機制,通過它,我們可以將重心放在業務邏輯上,而非併發控制上。

Zookeeper提供了兩個功能:
分佈式鎖;
服務註冊與發現。

Zookeeper的數據模型

/
動物
汽車
寶馬
奔馳

Zookeeper的數據存儲是基於節點的,稱作Znode。Znode的引用方式非常類似於文件路徑,例如:當要訪問貓時,需要指定路徑/動物/貓。Znode包含四個元素:

  1. data:數據信息,例如服務的IP地址、端口、名字;
  2. ACL:訪問權限,即那些人或者那些IP可以訪問本節點;
  3. stat:元數據,例如事務ID、版本號、時間戳、大小等;
  4. child:子節點引用。

每個Znode節點最多隻能存儲1MB數據。

Zookeeper的基本操作

創建節點:create
刪除節點:delete
判斷節點是否存在:exists
獲取一個節點的數據:getData
設置一個節點的數據:setData
獲取節點下的所有子節點:getChildren

其中,exists、getData、getChildren屬於讀操作,Zookeeper客戶端在請求讀操作的時候,可以選擇是否設置Watch。

Zookeeper的事件通知機制

可以將Watch理解成是註冊在特定Znode上的觸發器,當這個Znode發生改變時,也就是調用了create、delete、setData等方法時,將會觸發Znode上註冊的對應的事件,請求Watch的看客戶端會接收到異步通知。

getData:路徑, true
Zookeeper客戶端
Zookeeper服務器,含有一個WatchTable存放着要監控的數據

舉個用戶服務註冊與發現的例子:

請求用戶服務/uer/reg
用戶
API網關,Zookeeper客戶端,也需要註冊到服務器才能接受異步通知
Zookeeper服務器,負責服務註冊與發現
用戶服務1:192.168.0.1
用戶服務2:192.168.0.3
用戶服務3:192.168.0.4
訂單服務:192.168.0.2

當用戶服務1宕機時,用戶服務2將會註冊到API網關,繼續提供服務。原理就是:當用戶通過API網關訪問用戶服務時,實際上只是拿到了用戶服務的IP地址和端口號。而API網關中通過調用getData(/user/reg, watch)方法,監聽服務的狀態。若出現服務宕機,則Zookeeper服務器將會通過異步通知的方式告知API網關,用戶服務1已經宕機,同時提供可供使用的其他用戶服務的IP地址和端口號並記錄下來,以便於下次有用戶請求到來時使用。

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