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()自己需要调用的提供者信息,将服务注册信息缓存到本地。