分布式利器Zookeeper(三)

前言

《分布式利器Zookeeper(一)》

《分布式利器Zookeeper(二):分布式锁》

本篇博客是分布式利器Zookeeper系列的最后一篇,涉及的话题是:Zookeeper分布式锁的代码实现、zkclient的使用、Curator框架介绍等。

Zookeeper分布式锁的代码实现

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

分布式客户端


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


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


main测试


运行结果

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

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


zkclient

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

来看代码:

基于zkclient的增删改查

我们观察下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文件:

pom.xml

增删改查:

curator基本的API操作

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的介绍等,以后有空再分享,暂且保留下,哈哈)!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 156,907评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,546评论 1 289
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,705评论 0 238
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,624评论 0 203
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,940评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,371评论 1 210
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,672评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,396评论 0 195
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,069评论 1 238
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,350评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,876评论 1 256
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,243评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,847评论 3 231
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,004评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,755评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,378评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,266评论 2 259

推荐阅读更多精彩内容