zookeeper中Watcher和Notifications
问题导读: 1.zookeeper观察者什么时候调用? 2.传统远程轮询服务存在什么问题? 3.zk中回调服务的机制是什么? 4.zk中watcher为什么不永久注册? 5.什么是znode? 在阅读之前首先明确个概念: 1.什么是znode? 2.什么是客户端? 我们使用 znode 这个术语来表示 ZooKeeper的数据节点 。 znode维持一个stat结构,它包含数据变化的 版本号 、ACL变化和时间戳,以允许cache 校验 和协调化的更新。每当znode的数据变化时,版本号将增加。一个客户端收到数据时,它也会收到数据的版本号。 保存在每个znode中的数据都是自动读写的。读操作获取znode的所有数据,写操作替换掉znode的所有数据。每个节点有一个访问控制表(ACL)来限制谁能做哪些操作。 Zookeeper中的角色主要有以下三类,如下表所示: <ignore_js_op> 系统模型如图所示: <ignore_js_op> 传统轮询远程service服务 传统远程的service往往是这样服务的,服务提供者在远程service注册自己的服务,服务调用者不断去远程service轮询看看是否服务提供者有没有提供服务或者更新服务。所以有弊端,就是延时比较高,而且因为很多不必要的空轮询带来高的负载和网络损耗,这种模式到zk里面就应该是这样。 <ignore_js_op>