设为首页 收藏本站
查看: 904|回复: 0

[经验分享] 分布式利器Zookeeper(三)

[复制链接]

尚未签到

发表于 2019-1-8 09:54:14 | 显示全部楼层 |阅读模式
前言
《分布式利器Zookeeper(一)》
《分布式利器Zookeeper(二):分布式锁》
本篇博客是分布式利器Zookeeper系列的最后一篇,涉及的话题是:Zookeeper分布式锁的代码实现、zkclient的使用、Curator框架介绍等。
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]

  

  [PathChildrenCacheListener]

对于Curator而言,为了解决重复Watch的问题,它引入了一种全新的思想:Cache与ZK SERVER比对的机制。不论是原生的API,还是基于ZKCLIENT的,其实它们解决思路都是重复注册!
思路决定出路!Curator通过事件驱动将客户端的Cache与ZK SERVER的数据比对,就自然而然的解决了重复WATCH的功能!为什么Curator能成为Apache的顶级项目呢,我想大概就是因为它的与众不同的设计思想!
在Curator中,有2种Listener,一个是监控节点的NodeCacheListener,一个是监控子节点的PathChildrenCacheListener。PathChildernCacheListener可以监控子节点的新增、修改、删除,非常好用!
  

好了,到这里,准备结束这个系列了(其实还有一些内容没有涉及,比如Curator的分布式锁、分布式barrier的介绍等,以后有空再分享,暂且保留下,哈哈)!

  

  





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-660629-1-1.html 上篇帖子: 单台机器部署zookeeper伪集群 下篇帖子: zookeeper集群和单机版搭建
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表