zookeeper分布式锁原理

Zookeeper系列——6Zookeeper的分布式锁及Leader选举原理分析 分布式锁的实现原理;Zookeeper实现分布式锁的核心流程解析;Zookeeper实现Leader选举的核心思想 阅读详情

 

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

二、架构介绍
在介绍使用Zookeeper实现分布式锁之前,首先看当前的系统架构图

解释:左边的整个区域表示一个Zookeeper集群,locker是Zookeeper的一个持久节点,node_1、node_2、node_3是locker这个持久节点下面的临时顺序节点。client_1、client_2、client_n表示多个客户端,Service表示需要互斥访问的共享资源。

三、分布式锁获取思路
1.获取分布式锁的总体思路
a、在获取分布式锁的时候在locker节点下创建临时顺序节点,释放锁的时候删除该临时节点。

b、客户端调用createNode方法在locker下创建临时顺序节点,然后调用getChildren(“locker”)来获取locker下面的所有子节点,注意此时不用设置任何Watcher。

c、客户端获取到所有的子节点path之后,如果发现自己创建的子节点序号最小,那么就认为该客户端获取到了锁。

d、如果发现自己创建的节点并非locker所有子节点中最小的,说明自己还没有获取到锁,此时客户端需要找到比自己小的那个节点,然后对其调用exist()方法,同时对其注册事件监听器。

e、之后,让这个被关注的节点删除,则客户端的Watcher会收到相应通知,此时再次判断自己创建的节点是否是locker子节点中序号最小的,如果是则获取到了锁,如果不是则重复以上步骤继续获取到比自己小的一个节点并注册监听。


2.获取分布式锁的核心算法流程
下面同个一个流程图来分析获取分布式锁的完整算法,如下:

解释:
客户端A要获取分布式锁的时候首先到locker下创建一个临时顺序节点(node_n),然后立即获取locker下的所有(一级)子节点。

此时因为会有多个客户端同一时间争取锁,因此locker下的子节点数量就会大于1。对于顺序节点,特点是节点名称后面自动有一个数字编号,
先创建的节点数字编号小于后创建的,因此可以将子节点按照节点名称后缀的数字顺序从小到大排序,这样排在第一位的就是最先创建的顺序节点,
此时它就代表了最先争取到锁的客户端!

此时判断最小的这个节点是否为客户端A之前创建出来的node_n,如果是则表示客户端A获取到了锁,
如果不是则表示锁已经被其它客户端获取,因此客户端A要等待它释放锁,也就是等待获取到锁的那个客户端B把自己创建的那个节点删除。
此时就通过监听比node_n次小的那个顺序节点的删除事件来知道客户端B是否已经释放了锁,如果是,此时客户端A再次获取locker下的所有子节点,
再次与自己创建的node_n节点对比,直到自己创建的node_n是locker的所有子节点中顺序号最小的,此时表示客户端A获取到了锁!

文章整理自 基于zookeeper实现分布式锁

Zookeeper分布式锁的概念及原理 基于分布式的场景,JVM锁已经远远无法满足了,这时就需要一种统一配置的锁,那就是分布式锁的组件,让所有的程序副本都连接到这个分布式锁组件,由分布式锁提供一个唯一的锁,比如第一个请求到达APP1节点上了,此时APP1就会去分布式锁中取一个锁,让这个请求线程安心处理数据,当数据处理完成后,再将锁还回去,第二个请求进来如果发现锁已经被APP1使用了,那么就会处于等待的状态,当APP1处理完成后,APP2再拿到锁去处理数据。用于所有客户端创建的子节点间进行比较,如果发现自己的子节点编号比较小,那么就获取锁。 阅读详情

相关推荐

蓝牙6.0的‘新雷达’:Channel Sounding信道探测,真能比UWB更香吗?

本文探讨了蓝牙6.0的Channel Sounding信道探测技术在室内定位领域的应用潜力。通过与UWB技术的对比分析,揭示了其在成本、功耗和兼容性方面的优势,特别是在智能门锁、物品追踪等场景中的商业价值。Channel Sounding技术不仅具备亚米级精度,还能通过现有蓝牙设备实现零边际成本部署,为物联网应用提供了新的解决方案。

weixin_29288313的博客 333

zookeeper实现分布式锁

介绍了Zookeeper如何实现分布式锁,并使用代码进行了演示

凉茶铺的博客 6972

告别懵圈!用CANoe 5640手把手带你跑通SomeIP TC8测试(附脚本思路)

本文详细解析了基于CANoe 5640的SomeIP TC8测试全流程,从环境搭建到结果分析,特别针对车载以太网测试中的SomeIP协议测试难点提供实战指南。通过典型测试用例SOMEIP_TEST_61,手把手教你配置CANoe工程、编写CAPL脚本,并解决常见问题,助力开发者高效完成协议验证。

weixin_30791095的博客 363

Zookeeper分布式锁

多个线程去create一个path的时候,只有一个线程可以create成功,也就相当于抢到了锁,其他线程只能不停的尝试create,而抢到锁的线程A,在执行完后释放锁,即delete path,就会有下一个线程create成功。为了避免出现,抢到锁后客户端宕机,导致锁无法释放,即拿锁线程不会delete path,create的节点设置为临时节点,这样当客户端宕机时,节点也跟着自动销毁,也就解锁了。即:只监听想监听到的状态。zk: 临时节点序列化,监听上一个小的节点,实现排队阻塞,实现公平锁。

范大的博客 2279

戴维南和诺顿定理到底怎么选?一个实际维修案例讲透两种等效电路用法

本文通过工业电源模块维修案例,详细解析戴维南和诺顿定理在实际电路分析中的选择策略。针对电压敏感型故障、电流分配问题及功率传输异常,提供三大黄金法则,帮助工程师高效选择等效电路方法,提升故障排查效率。特别强调诺顿定理在电流分析中的优势。

weixin_31854867的博客 361

Grok-1.5+Ollama企业级本地化部署与合规实践指南

本文详细介绍了Grok-1.5+Ollama企业级本地化部署与合规实践指南,重点分析了本地化部署的成本优势和数据主权保障。通过RTX 4090显卡的硬件选型、Ubuntu 22.04系统优化及部署流程中的关键陷阱规避,为企业提供了高效、安全的AI模型部署方案。特别适合金融、医疗等敏感行业。

weixin_29094539的博客 182

基于Zookeeper实现分布式锁

在Zookeeper中的指定路径下创建创建节点,然后客户端根据当前路径下的节点状态来判断是否加锁成功,如下图一种情况为例,线程1创建节点成功后,线程2再去创建节点就会创建失败。(3)如果加锁次数等于0,则释放锁,删除掉创建的临时节点,下一个监听这个节点的客户端会感知到节点删除事件,从而重新去获取锁。3:判断自己的序号是否最小,如果最小的话,代表加锁成功,如果不是最小的话,就对前一个节点创建监听器。2:使用顺序节点的好处是,可以利用锁释放的事件监听机制,来实现。2:第二步客户端拿到加锁路径下所有创建的节点。

weixin_45125989的博客 2915

LDO稳定性分析

根据补偿方式和拓扑结构的不同,三个极点之间的相互位置有可能发生变化,但 是 LDO 通常采用较大的输出电容 Cout,以及较大的调整管也会导致较大的 Cpar, 所以 p1、p2 通常位于较低的频率处,而 p3 和 z1 则由于 Resr较小会位于较高的频 率处。不过幸运的是,对于较大的 Cout来说,只要选择合适的 Resr,就可以将左半平面零点 Z1 的频率降低,甚至使 Z1 进入单位增益带宽内,左半平面零点的进入将对相位有所改善,这不仅可以消除振荡的风险,还可以在单位增益频率处得到较好的相位裕度。

模拟芯片设计 1593

Zookeeper 分布式锁、队列

Zookeeper 分布式锁

杨宇昌的博客 3061

实战MSP-M0G3507与陶晶驰串口屏的通信协议解析

本文详细解析了MSP-M0G3507微控制器与陶晶驰串口屏的通信协议实现。内容涵盖串口配置、协议帧结构、数据校验机制及ASCII协议实战代码,重点介绍了陶晶驰串口屏的指令集应用和调试技巧,为嵌入式开发提供可靠的串口通信解决方案。

h9j8k7l6m5n的博客 868

金砖大赛-第二届网络安全防护治理实战技能大赛全国总决赛WP

格式进行md4加密,然后将小写的md4密文进行作为flag信息进行提交,提交格式为flag{MD4小写},例如调用频率异常高的user_id是user_xxx,使用的非公开模型名称是model-name,具体调用次数为10,那么按照格式,对user_xxx:model-name:10进行md4加密后,提交范例为:flag{dd00cb9e393f4a9ac639294b3cfe4d6a}挖矿木马是通过远程脚本进行部署的,请登录到失陷的服务器上,找到并分析挖矿木马是从那个远程IP下载的。

Laffrey的专栏 243

Zookeeper 分布式锁原理与实现

在分布式系统中,确保多个进程或服务实例在访问共享资源时能够互斥,是保证数据一致性和系统稳定性的关键。一个典型的场景是,当多个服务实例需要同时更新同一份数据时,如果没有适当的机制来控制访问顺序,可能会导致数据冲突或不一致。为了解决这个问题,分布式锁应运而生。接下来,我们将深入探讨Zookeeper在实现分布式锁方面的知识。分布式锁是分布式系统中的一种同步机制,它允许多个进程或服务实例在分布式环境中对共享资源进行互斥访问。

我是Java程序员廖志伟,感谢朋友们的支持!不定期贡献一篇高品质、过万文字、图文并茂且附有视频解说、满载代码示例注释的良心之作,坚决杜绝粗制乱造。 922

7.12真题华为OD机试真题 新系统 - 字符串压缩编码 (Java/Py/C/C++/Js/Go)

7.12真题华为OD机试真题 新系统 - 字符串压缩编码 (Java/Py/C/C++/Js/Go)

算法大师! 841

Zookeeper实战——分布式锁实现以及原理

文章目录Zookeeper 分布式锁实现原理具体流程代码实现客户端创建工厂类创建 Lock 锁接口Lock 实现类(ZkLock)自定义 ZK 分布式锁测试独占锁 & 共享锁Curator 实现分布式锁ZooKeeper 分布式锁的优缺点 分布式锁是控制分布式系统之间同步访问共享资源的一种方式。分布式锁的实现方式有很多种,比如 Redis 、数据库 、zookeeper 等。这篇文章主要介绍用 Zookeeper 实现分布式锁。 Zookeeper 分布式锁实现原理 先说结论:Zookeeper.

KIMTOU的博客 1万+

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Zookeeper分布式锁的原理

一、先了解节点Znode的类型 1.持久节点(PERSISTENT) 默认的节点类型。创建节点的客户端和zookeeper断开之后,该节点仍然存在 2.持久顺序节点(PERSISTENT_SEQUENTIAL) 创建节点时,zookeeper会根据创建的时间给该节点进行编号 3.临时节点(EPHEMERAL) 创建节点的客户端和zookeeper断开之后,节点删除 4.临时顺序节...

秦时于归化明月的博客 225

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Zookeeper 分布式锁原理

在Redis分布式锁一文中, 作者介绍了如何使用Redis开发分布式锁。 Redis分布式锁具有轻量高吞吐量的特点,但是一致性保证较弱。我们可以使用Zookeeper开发分布式锁,来满足对高一致性的要求。 Zookeeper 分布式锁原理 Zookeeper 节点具有一些性质可以帮助我们开发分布式锁: 临时节点: 客户端可以创建临时节点,当客户端会话终止或超时后Zookeeper会自动删除临...

li123128的博客 1575

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

zookeeper作为分布式锁的原理

一:zookeeper作为分布式的原理

li-zhang-yu的博客 188

ZooKeeper 分布式锁详解 —— 从原理、设计到实战优化

ZooKeeper 分布式锁通过临时顺序节点和 Watcher 机制实现了对共享资源的互斥访问。它利用 ZooKeeper 的强一致性、自动删除临时节点和顺序节点特性,使得锁的创建、竞争和释放变得简单而高效。尽管实现过程中需要处理竞态、锁重入和性能瓶颈等问题,但通过合理的设计和工具(如 Curator),可以构建出健壮的分布式锁解决方案,为分布式系统提供可靠的协调机制。

2301_80320652的博客 1473

面试官:了解分布式锁?说说ZooKeeper分布式锁的实现原理

今天给小伙伴讲讲ZooKeeper分布式锁的实现原理!有自己看法的也可以在评论区留言探讨,也可以转发关注下我以后会长期分享! 什么是Zookeeper? Zookeeper 是一个开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务、配置维护和命名服务等等。 分布式锁 简介 在我们进行单机应用开发,涉及并发同步的时候,我们往往采用synch...

lonely_bin的博客 1992

Zookeeper分布式锁原理

一、节点 Zookeeper节点的概念:Zookeeper的数据存储结构就像一棵树,这棵树由节点组成,这种节点叫做Znode。 1.持久节点 (PERSISTENT) 默认的节点类型。创建节点的客户端与zookeeper断开连接后,该节点依旧存在 。 2.持久节点顺序节点(PERSISTENT_SEQUENTIAL) 在创建节点时,Zookeeper根据创建的时间顺序给该节点名称进行编号: 3.临时节点(EPHEMERAL) 和持久节点相反,当创建节点的客户端与zookeeper断开连接后,临时节点会被删除

code_agent的博客 337

9、Zookeeper分布式锁原理浅析

了解Zookeeper的我们都知道,Zookeeper是一种分布式协调服务,在分布式应用中,主要用来实现分布式服务的注册与发现以及分布式锁,本文我们简单介绍一下使用Zookeeper实现分布式锁的简单原理。 使用Zookeeper实现分布式锁,主要是基于Zookeeper的临时顺序节点来实现的,因此首先我们先简单了解一下Zookeeper的Znode类型。 1、Zookeeper的Znode类型...

Ron.Zheng 1488

✅ Zookeeper分布式锁原理与应用

在分布式系统中,确保数据的一致性和系统的稳定性是至关重要的。尤其是在高并发环境下,如何实现有效的资源同步和锁机制,成为了开发人员必须面对的挑战。Java高并发知识点中的Zookeeper分布式锁,正是为了解决这一问题而诞生的。想象一下,在一个分布式系统中,多个节点可能同时需要访问同一资源,如果没有适当的锁机制,可能会导致数据不一致或系统崩溃。Zookeeper分布式锁的出现,正是为了在这种场景下提供一种可靠的解决方案。

我是Java程序员廖志伟,感谢朋友们的支持! 1237

分布式锁原理 Redisson+ ZooKeeper

但是如果在Tomcat的内部,又有两个线程,但是他们的锁对象虽然写的和服务器A一样,但是锁对象却不是同一个,所以线程3和线程4可以实现互斥,但是却无法和线程1和线程2互斥。控制时序所有试图获取锁的客户端,都是被顺序执行,只是会有一个序号(zxid),我们会有一个节点,例如:/testLock,所有临时节点都在这个下面去创建,ZK的父节点(/testLock) 维持了一个序号,这个是ZK自带的属性,他保证了子节点创建的时序性,从而也形成了每个客户端的一个全局时序。获取到锁的线程:会执行业务逻辑。

技术博客 443
上一篇: netstat 输出内容详解,TCP链接握手对应state
下一篇: 使用ZooKeeper实现Java跨JVM的分布式锁(读写锁)
王树民
博客等级 码龄10年 912粉丝 560原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值