专栏首页Java进阶如何用zookeeper 实现分布式锁

如何用zookeeper 实现分布式锁

一、分布式锁介绍

        分布式锁主要用于在分布式环境中保护跨进程、跨主机、跨网络的共享资源实现互斥访问,以达到保证数据的一致性。

二、分布式锁设计原理图

1、基于排它锁:

让所有的客户端(A B C)都在指定的Locks节点下 创建一个同名的节点lock,利用ZK 节点名称的唯一性来做限制, 谁创建成功了谁就获取到了锁,否则就是没有获取到。

这种设计比较简单

2、基于共享锁:

1、在当前节点下创建临时有序节点C,若创建成功则会返回节点C的名称。

2、获取当前节点下的所有临时节点。利用zk 节点的 顺序一致性,获取到了最小的节点就算获取到了锁。

3、找到临时节点中的最小节点的名称,和第一步创建节点返回的 C节点名称进行比较,如果匹配成功,表示当前节点就是最小节点,就意味着获取到了锁。

否则就要获取到比刚刚创建的节点顺序小的节点。

4、然后获取到比当前节点顺序小的所有节点的一个集合。如果不为空,就获取这个集合节点中的最后一个节点B。然后让B去监听它的上一个A,A的会话超时或者A节点被删除(释放)了,B就获取到了锁,同理,当B被删除或者会话超时时,C就获取到了锁。

5、执行完业务逻辑操作后 执行 删除节点的方法 锁就被释放了,然后下个节点就能获取到锁了。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 详解zookeeper的配置文件

    用户2141593
  • 数据结构与算法之美——链表

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    用户2141593
  • zookeeper的zab协议工作原理之原子广播

    用户2141593
  • 数据结构与算法笔记(三)

    数据结构中的树(Tree)与生活中常见的树?有些类似,可以类比为生活中的树?倒过来。示意图:

    WriteOnRead
  • Zookeeper系列(5) —— Zookeeper 常用的客户端操作命令

    创建节点的命令格式 create [-s] [-e] /path data acl

    求和小熊猫
  • 敖丙带你杀死面试梦魇-红黑树【图解】

    很多人会觉得这个知识点太难,不想花太多功夫去了解,也有人会认为这个数据结构在日常开发中使用的很少,因此没必要多做掌握。

    敖丙
  • 第15期:索引设计(索引组织方式 B+ 树)

    谈到索引,大家并不陌生。索引本身是一种数据结构,存在的目的主要是为了缩短数据检索的时间,最大程度减少磁盘 IO。

    爱可生开源社区
  • 动图展示,让你彻底理解红黑树!

    简单地理解,二叉树(Binary tree)是每个节点最多只有两个分支(即不存在分支度大于 2 的节点)的树结构。通常分支被称作“左子树”或“右子树”。

    业余草
  • 数据结构:堆(Heap)

    堆就是用数组实现的二叉树,所以它没有使用父指针或者子指针。堆根据“堆属性”来排序,“堆属性”决定了树中节点的位置。

    sunsky
  • javascript入门笔记9-认识DOM

    认识DOM 文档对象模型DOM(Document Object Model)定义访问和处理HTML文档的标准方法。DOM 将HTML文档呈现为带有元素、属性和...

    方志朋

扫码关注云+社区

领取腾讯云代金券