zookeeper- 认识 watcher
zookeeper 监听机制
认识 watcher
类似于消息队列,zookeeper 也提供了数据的发布/订阅的功能,多个订阅者可同时监听某一特定对象,当该主题对象的自身状态发生变化时,例如节点内容发生改变、节点下的子节点列表发生改变,会及时主动通知所有订阅者。
这种机制叫做 Watcher 机制,实现了数据的发布订阅功能。和传统的监听方式不同,客户端不必在 Watcher 注册后轮询阻塞,也减轻了客户端压力。与观察者模式也有点类似。
watcher 架构模式
Watcher 的实现主要是由三个部分组成的:
Zookeeper 服务端
Zookeeper 客户端
客户端的 ZKWatchManager 对象
客户端最开始会将 Watcher 注册到服务端,同时将 Watcher 对象保存到 Watch 管理器中。当 ZooKeeper 服务端监听的对象或者数据状态/内容发生变化时,服务端会通知客户端,客户端的 Watch 管理器接收到消息,立马触发相关 Watcher 来回调相应处理逻辑。
watcher 的特性
一次性的:watcher 是一次性的,一旦被触发就会移除,再次使用时需要重新注册
按顺序回调:watcher 回调是顺序串行化执行的,只有回调后客户端才能看到最新的数据状态。一个 watcher 回调逻辑不应该太多,以免影响别的 watcher 执行
时效性:WatchEvent 是最小的通信单元,结构上只包含通知状态、事件类型和节点路径,并不会告诉数据节点变化前后的具体内容
轻量:watcher 只有在当前 session 彻底失效时才会无效,若在 session 有效期内快速重连成功,则 watcher 依然存在,仍可接收到通知
版权声明: 本文为 InfoQ 作者【zarmnosaj】的原创文章。
原文链接:【http://xie.infoq.cn/article/62e6dcf95cbdbd77df1f48fe5】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论