如何用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 条评论
登录 后参与评论

相关文章

来自专栏云计算教程系列

使用GNU Screen管理持久终端会话

GNU Screen是一种与终端会话配合使用的工具,允许用户在断开连接后恢复会话。Screen可防止会话“超时”或断开SSH连接或本地终端仿真器。单个Scree...

1282
来自专栏python3

python3--基础综合练习题

允许用户最多尝试3次,3次都没猜对的话,就直接退出,如果猜对了,打印恭喜信息并退出

2333
来自专栏游戏开发那些事

【Linux程序设计】之进程控制&守护进程

这个系列的博客贴的都是我大二的时候学习Linux系统高级编程时的一些实验程序,都挺简单的。

1862
来自专栏海天一树

小朋友学Python(17):文件

Python 提供了必要的函数和方法进行默认情况下的文件基本操作。你可以用 file 对象做大部分的文件操作。 一、打开和关闭文件 例1 (1)创建名为test...

2795
来自专栏性能与架构

jQuery 3.0 的一个小问题

jQuery 前阶段推出了3.0版本,改动非常大,如果要使用 3.0 的话,建议先仔细了解一下新特性,否则会引起一些小问题,例如下面的代码 <html> <he...

3455
来自专栏大前端_Web

NodeJS学习二CommonJS规范

Node程序由许多个模块组成,每个模块就是一个文件。Node模块采用了CommonJS规范。

1352
来自专栏乐百川的学习频道

CoffeeScript 简介

简介 JavaScript也是一门经历了很多年的语言了,自从浏览器兴起,JavaScript就一直在被使用。但是,JavaScript有一些特性没有实现,为了让...

20910
来自专栏LanceToBigData

JavaWeb(一)Servlet中乱码解决与转发和重定向的区别

前言   前面其实已经把Servlet中所有的内容都介绍完了,这篇讲补充一点乱码和重定向与转发之间的区别! 一、request请求参数出现乱码问题 1.1、ge...

29710
来自专栏小程序·云开发专栏

云函数之间互相调用实现邮件发送

很多时候,我们会面临在小程序的后台实现多重功能,比如用户管理、日志分析、数据排序等,不同的功能之间还会相互调用。如果把这些功能都写到一个云函数里,会造成云函数逻...

7.5K2
来自专栏木头编程 - moTzxx

微信小程序Ⅳ [js文件的外部引用]

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011415782/article/de...

7532

扫码关注云+社区

领取腾讯云代金券