Zookeeper Watcher 机制 -- 数据变更通知 ?

 

Zookeeper 允许客户端向服务端的某个 Znode 注册一个 Watcher 监听当服务 

端的一些指定事件触发了这个 Watcher,服务端会向指定客户端发送一个事件通 

知来实现分布式的通知功能然后客户端根据 Watcher 通知状态和事件类型做出 

业务上的改变

工作机制

1、客户端注册 watcher

2、服务端处理 watcher

3、客户端回调 watcher

Watcher 特性总结

1、一次性 

无论是服务端还是客户端一旦一个 Watcher 被触发,Zookeeper 都会将其从相 

应的存储中移除这样的设计有效的减轻了服务端的压力不然对于更新非常频 

繁的节点服务端会不断的向客户端发送事件通知无论对于网络还是服务端的 

压力都非常大

2、客户端串行执行 

客户端 Watcher 回调的过程是一个串行同步的过程

3、轻量 

3.1、Watcher 通知非常简单只会告诉客户端发生了事件而不会说明事件的具 

体内容

3.2、客户端向服务端注册 Watcher 的时候并不会把客户端真实的 Watcher  

象实体传递到服务端仅仅是在客户端请求中使用 boolean 类型属性进行了标记

4、watcher event 异步发送 watcher 的通知事件从 server 发送到 client 是异步 

这就存在一个问题不同的客户端和服务器之间通过 socket 进行通信由于 

网络延迟或其他因素导致客户端在不通的时刻监听到事件由于 Zookeeper 本身 

提供了 ordering guarantee,即客户端监听事件后才会感知它所监视 znode

发生了变化所以我们使用 Zookeeper 不能期望能够监控到节点每次的变化

Zookeeper 只能保证最终的一致性而无法保证强一致性

5、注册 watcher getData、exists、getChildren

6、触发 watcher create、delete、setData

7、当一个客户端连接到一个新的服务器上时,watch 将会被以任意会话事件触发

当与一个服务器失去连接的时候是无法接收到 watch 而当 client 重新连接 

如果需要的话所有先前注册过的 watch,都会被重新注册通常这是完全 

透明的只有在一个特殊情况下,watch 可能会丢失对于一个未创建的 znode

 exist watch,如果在客户端断开连接期间被创建了并且随后在客户端连接上 

之前又删除了这种情况下这个 watch 事件可能会被丢失

posted @ 2020-08-26 16:12  咔啡  阅读(276)  评论(0编辑  收藏  举报