当前位置: 首页 > 后端技术 > Java

【Java访谈】Zookeeper中Watch机制的原理?

时间:2023-04-01 19:31:00 Java

一位工作了7年的粉丝,遇到了一个Zookeeper的问题。因为接触过Zookeeper技术,不知道怎么回答。我说一个工作7年的程序员,没有接触过主流技术,这不正常。所以问了他工资后,我就明白了!好了,关于《Zookeeper中Watch机制的实现原理》,看看普通人和高手的回答。普通人:嗯。..............师父:那我打算从两个方面来回答这个问题。Zookeeper是一个分布式协调组件,为分布式架构中的多个应用程序组件提供顺序访问控制能力。它的数据存储采用类似于文件系统的树形结构,以节点的形式管理存储在Zookeeper上的数据。Zookeeper提供了一种Watch机制,可以让客户端感知存储在ZookeeperServer上的数据变化。这样的机制让Zookeeper可以实现很多场景,比如配置中心,注册中心。Watch机制是通过Push实现的,也就是说客户端和ZookeeperServer会建立一个长连接。一旦监听到的指定节点发生变化,变化的事件就会通过这个长连接推送给客户端。Watch的具体过程分为几个部分:首先,客户端通过exists、get等指定命令将watch添加到特定路径,服务端收到请求后,使用HashMap保存客户端session和对应的感兴趣的节点路径。同时客户端也会使用HashMap存储指定节点与事件回调函数的对应关系。当服务器指定的被监视节点发生变化时,会查找该节点对应的session,并将发生变化的事件和节点信息发送给客户端。客户端收到请求后,调用ZkWatcherManager中对应的回调方法完成事件变化通知。以上是我对这个问题的理解!总结这道面试题,我觉得考察的价值也很大。其实服务端的数据变更通知有两种解决方案,pull和push,而本题涉及的技术点是push的实现。在业务开发中,也可能会涉及到类似的场景,比如消息通知、扫码登录等,理解了这些思路,在解决此类问题时就会变得更加从容。普通人VS专家访谈系列到此结束。需要专家面试资料(附阿里巴巴内部10万字面试资料)或者想咨询不懂的技术面试题的可以私信或者评论区留言。版权声明:除特别声明外,本博客所有文章均采用CCBY-NC-SA4.0许可协议。转载请注明来自Mic带你学建筑!如果本文对您有帮助,请给个关注和点赞。您的坚持是我不断创作的动力。欢迎关注同名微信公众号获取更多技术干货!