乐趣区

关于java:Java面试Zookeeper中的Watch机制的原理

一个工作了 7 年的粉丝,遇到了一个 Zookeeper 的问题。

因为接触过 Zookeeper 这个技术,不晓得该怎么答复。

我说一个工作了 7 年的程序员,没有接触过支流技术,这不失常。

于是我问了他工资当前,我了解了!

好吧,对于“Zookeeper 中 Watch 机制的实现原理”,看看普通人和高手的答复。

普通人:

嗯。。。。。。。。。。。。。。。

高手:

好的,这个问题我打算从两个方面来答复。

Zookeeper 是一个分布式协调组件,为分布式架构下的多个利用组件提供了程序访问控制能力。

它的数据存储采纳了相似于文件系统的树形构造,以节点的形式来治理存储在 Zookeeper 上的数据。

Zookeeper 提供了一个 Watch 机制,能够让客户端感知到 Zookeeper Server 上存储的数据变动,这样一种机制能够让 Zookeeper 实现很多的场景,比方配置核心、注册核心等。

Watch 机制采纳了 Push 的形式来实现,也就是说客户端和 Zookeeper Server 会建设一个长连贯,一旦监听的指定节点产生了变动,就会通过这个长连贯把变动的事件推送给客户端。

Watch 的具体流程分为几个局部:

  • 首先,是客户端通过指定命令比方existsget,对特定门路减少 watch
  • 而后服务端收到申请当前,用 HashMap 保留这个客户端会话以及对应关注的节点门路,同时客户端也会应用 HashMap

    存储指定节点和事件回调函数的对应关系。

  • 当服务端指定被 watch 的节点发生变化后,就会找到这个节点对应的会话,把变动的事件和节点信息发给这个客户端。
  • 客户端收到申请当前,从 ZkWatcherManager 外面对应的回调办法进行调用,实现事件变更的告诉。

以上就是我对这个问题的了解!

总结

这个面试题呢,我认为考查的价值也很大,其实对于服务端的数据变更告诉,

无非就是 pull 和 push 两种计划,而这道题外面波及到的技术点就是 push 的实现。

在业务开发外面,也可能会波及到相似的场景,比方音讯告诉,扫码登录等。

如果你理解这些思维,那在解决这类问题的时候,会变得更加从容。

本期的普通人 VS 高手面试系列就到这里完结了。

须要高手面试文档(附赠阿里外部十万字面试文档)或者有不懂的技术面试题想征询的小伙伴能够私信或者评论区留言。

版权申明:本博客所有文章除特地申明外,均采纳 CC BY-NC-SA 4.0 许可协定。转载请注明来自 Mic 带你学架构
如果本篇文章对您有帮忙,还请帮忙点个关注和赞,您的保持是我一直创作的能源。欢送关注同名微信公众号获取更多技术干货!

退出移动版