1.Zookeeper的數據模型
(1) Zookeeper的數據模型,類似於樹形結構:
(2) Zookeeper的每一個節點成為稱為Znode,主要用來存儲數據。
- data : 存儲數據信息。
- acl : 記錄Znode的訪問權限。
- child : 當前節點的子節點引用。
- stat :包含Znode的各種元數據,事物Id,版本號等。
(3) Znode的引用方式是路徑引用,例如:
/core/UserCoreService
2.Zookeeper的事件通知
Watch相當於注冊在特定Znode上的觸發器,當該Znode中執行寫操作時,服務端會異步通知客戶端。
具體的交互過程:
- 客戶端調用 getData() 方法,watch參數是true。服務器接收到請求,返回節點數據,並且在對應的哈希表里插入被 Watch的Znode路徑,以及Watcher列表。
- 當被Watch的Znode已刪除,服務端會查找哈希表,找到該Znode對應的所有Watcher,異步通知客戶端,並且刪除哈希表中對應的key-value;
3.實現注冊與發現
(1)注冊
提供者將自身信息(ip,port,權重等)注冊到zookeeper上。zookeeper為其創建一個Znode,該節點的data中保存提供者的信息。
(2)發現
消費者根據路徑參數去zookeeper中getData()自己需要調用的提供者信息,將服務注冊信息緩存到本地。