美文网首页
Zookeeper实现分布式锁一

Zookeeper实现分布式锁一

作者: 为梦想前进 | 来源:发表于2019-09-25 06:08 被阅读0次

    之前说过了springboot实现redis的分布式锁,今天来一起研究下zk的分布式锁实现!

    下面进入主题哈

    我们先来复习下什么叫zookeeper

    ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,它是集群的管理者,监视着集群中各个节点的状态

    根据节点提交的反馈进行下一步合理操作。最终,将简单易用的接口和性能高效、功能稳定的系统提供给用户

    ZooKeeper提供了文件系统和通知机制

    ZooKeeper的作用

    1.命名服务   2.配置管理   3.集群管理   4.分布式锁  5.队列管理

    Zookeeper集群管理

    所谓集群管理无在乎两点:是否有机器退出和加入、选举master。

    对于第一点,所有机器约定在父目录GroupMembers下创建临时目录节点,然后监听父目录节点的子节点变化消息。一旦有机器挂掉,该机器与 zookeeper的连接断开,其所创建的临时目录节点被删除,所有其他机器都收到通知:某个兄弟目录被删除,于是,所有人都知道:它上船了。

    新机器加入也是类似,所有机器收到通知:新兄弟目录加入,highcount又有了,对于第二点,我们稍微改变一下,所有机器创建临时顺序编号目录节点,每次选取编号最小的机器作为master就好。

    Zookeeper分布式锁

    有了zookeeper的一致性文件系统,锁的问题变得容易。锁服务可以分为两类,一个是保持独占,另一个是控制时序。

    对于第一类,我们将zookeeper上的一个znode看作是一把锁,通过createznode的方式来实现。所有客户端都去创建 /distribute_lock 节点,最终成功创建的那个客户端也即拥有了这把锁。用完删除掉自己创建的distribute_lock 节点就释放出锁。

    对于第二类, /distribute_lock 已经预先存在,所有客户端在它下面创建临时顺序编号目录节点,和选master一样,编号最小的获得锁,用完删除,依次方便。

    至于zk的原理,咱们后续再说,今天的主要是如何实现zk分布式锁,下面咱们直接上代码啊,

    第一步:添加依赖

    第二步:创建zkBean也就是初始化ZookeeperLockRegistry

    第三步:编写测试代码,代码比较简单,注入我们之前初始化好的ZookeeperLockRegistry,每执行一次,num-1,

    第四步:安装zk,我这里是直接在win下面操作的,小伙伴们可以在linux上安装zk哈,过程比较简单,就不再赘述了(注意一点,在linux安装zk集群的时候,挡在一台机器上自动后,使用命令zkServer.sh status查看,会显示连接失败,这个时候,不要着急,把剩余的全部启动,再次查看就是正常的了)

    本地的话比较简单.再接在bin下启动如下命令就可以启动zk啦

    第五步:咱们配置个jmeter来执行测试下啊

    配置了50个线程同时访问,

    第六步:接下来咱们启动项目哈,然后开始运行jmeter看看效果

    证明是可以的哈,达到目标哈,这就是一个简单的zk实现分布式锁的效果

    我们在吧zk锁的逻辑去掉,再试一下

    看看执行后的结果,真的是惨不忍睹啊,全抢着了

    证明咱们zk的分布式锁已经实现,简单吧 ,下一期咱们来分析喜源码到底是怎么借助zk实现分布式所得                                                                        thanks!

    相关文章

      网友评论

          本文标题:Zookeeper实现分布式锁一

          本文链接:https://www.haomeiwen.com/subject/bxdsyctx.html