如何进行Zookeeper分布式锁的代码实现

66次阅读
没有评论

共计 1711 个字符,预计需要花费 5 分钟才能阅读完成。

这期内容当中丸趣 TV 小编将会给大家带来有关如何进行 Zookeeper 分布式锁的代码实现,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

前言 Zookeeper 分布式锁的代码实现

在上一篇博客中,从思路上已经分析了 Zookeeper 如何帮助我们实现分布式锁,我们直接来看代码:

[分布式客户端]

[获取分布式锁的方法 lock: 初始化 ZK]

[获取分布式锁的方法 lock: 创建临时节点与判断最小路径]

[main 测试]

[运行结果]

需要注意的是,即便监控到了比自己序号小的节点的删除 Watcher,也需要再次确认下!

从结果上,看的很清楚,各个线程有序获得锁。

zkclient

zkclient 是在 zookeeper 原生 API 基础上做了一点封装,简化了 ZK 的复杂性。

来看代码:

我们观察下 zkclient 的使用,和以前基于 zookeeper 的原生 API 有哪些区别呢?

第一,原生 API 需要我们利用 CountDownLatch 来确保 ZK 的初始化,现在 zkclient 帮助我们屏蔽掉了这个细节

第二,原生 API 是不可以递归创建节点的,而 zkclient 可以帮助我们递归创建不存在的父节点,还可以递归删除

第三,支持序列化操作,上面的代码你大概可以看出一些端倪,就是我们从操作 byte[] 到操作 String 了。(事实上,在 zkclient 中你只需要实现 ZkSerializer 接口,就可以完成 Object 到 byte[] 的转换,虽然如此,但是实际开发中,利用 JSON 也挺好的!)

第四,还有最重要的一点就是,zkclient 将对节点的操作和对节点的监控分离开了,在原生 API 中 2 者是耦合在一起的!从思想上来看,便于理解;从代码上来看,也简洁些(如果写在一起,头都大了);更加方便的是,zkclient 替我们完成了重复 watch 的功能!

[watch 订阅机制]

看到没有,是不是有点像 MQ 的订阅机制,非常好用!【但是也有点不太完美,子节点的数据变更为什么没有监控呢,这有点不符合人性啊!还好有 Curator…】

但是呢,我们知道 ZK 是有很多应用场景的,比如实现分布式锁,zkclient 并没有替我们进行封装,但是 Curator 框架可以帮助我们做到!

Curator

为了更好实现 Java 操作 Zookeeper 服务器,后来出现 Curator 框架,功能非常强大,目前已经是 Apache 的顶级项目,有很多丰富的特性,比如 session 超时重连,主从选举,分布式计数器,分布式锁等,非常有利于 Zookeeper 复杂场景下的开发。

POM 文件:

增删改查:

Curator 框架使用链式编程风格,易读性很强!

注意,不论是原生的 API,还是基于 zkclient 的 API,都是提供的 connectTimeout,而 Curator 提供了 sessionTimeout,功能很强大。

无论是原生的 API,还是 zkclient,都是支持异步回调的,但是 Curator 框架在支持异步回调的同时,增加了线程池供我们优化!

[NodeCacheListener]

如何进行 Zookeeper 分布式锁的代码实现

[PathChildrenCacheListener]

如何进行 Zookeeper 分布式锁的代码实现

对于 Curator 而言,为了解决重复 Watch 的问题,它引入了一种全新的思想:Cache 与 ZK SERVER 比对的机制。不论是原生的 API,还是基于 ZKCLIENT 的,其实它们解决思路都是重复注册!

思路决定出路!Curator 通过事件驱动将客户端的 Cache 与 ZK SERVER 的数据比对,就自然而然的解决了重复 WATCH 的功能!为什么 Curator 能成为 Apache 的顶级项目呢,我想大概就是因为它的与众不同的设计思想!

在 Curator 中,有 2 种 Listener,一个是监控节点的 NodeCacheListener,一个是监控子节点的 PathChildrenCacheListener。PathChildernCacheListener 可以监控子节点的新增、修改、删除,非常好用!

上述就是丸趣 TV 小编为大家分享的如何进行 Zookeeper 分布式锁的代码实现了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注丸趣 TV 行业资讯频道。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-04发表,共计1711字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)