ZooKeeper 分布式锁 Curator 源码 之一:可重入锁
前言
一般工作中常用的分布式锁,就是基于 Redis 和 ZooKeeper,前面已经介绍完了 Redisson 锁相关的源码,下面一起看看基于 ZooKeeper 的锁。也就是 Curator 这个框架。
Curator 的锁也分为很多种,本文分析共享可Zo重入锁。
考虑到如果文章篇幅较长,不太适合阅读,所以对文章做了适当的拆分。
1环境配置
本机三个节点
版本:3.7.0 系统:macOS 安装方式:brew install zookeeper Curator Maven 依赖版本:5.1.0
 oK; org.apache.curator curator-recipes 5.1.0 ee 2加锁示例
详细信息可参考官方文档[1]。
加锁前
在加锁之前,ZooKeeper 仅有一个节点 /zookeeper。
加锁中
在 /locks/lock_01 路径上加锁。
加锁之后:
创建了一个 /locks/lock_01 的持久节点,节点下有一个子节点 _c_cc4fpec045-5a1e-4378-b3c7-8a8d3fb9a37c-lock-0000000000 节点 /locks/lock_01/_c_cc4fc045-5a1e-4378-b3c7-8a8d3fb9a37c-lock-0000000000 是临时节点r 节点 /locks/lock_01/_c_cc4fc045-5a1e-4378-b3c7-8a8d3fb9a37c-lock-0000000000 的数据是机器 IP 地址 3加锁源码
PS:下面代码截图中的代码风格就是 Curator 源码的代码风格。
入口
Inte分布rProcessMutex#internalLock
开始先从 threadData 中获取当前线程,这里肯定是没有的,所以进入 attemptLock 方法。
本方法中还包含了锁重入的逻辑,后面也会介绍。
加锁
LockInternals#attemptLock
核式锁心部分就是这两行:
createsTheLock 创建临时顺序节点 internalLockLoop 判断是否创建成功
创建临时顺序节点
StandardLockInternalsDriver#createsTheLock
可以看出节点的 mode 是 CreateMod Ce.EPHEMERAL_SEQUENTIAL,表示这是一个临时顺序节点!
进入 CreateBuilderImpl#forPath(java.lang.String, byte[])
client.getDefaultData() 就是本机 IP 地址。
这个 adjuurstPath 方法看名字就是在调整路径之类的。会生成一个 UUID 拼接到 /locks/lock_01 中,变成 /locks/lock_01/_c_UUID-lock-。
因为创建的是临时顺序节点,所以会自动在后面添加顺序,最终变为 /locks/lock_01/_atc_UUID-lock-0000000000。
具体创建节点是在 CreateBuilderImpl#pathInForeground 中。
创建临时节点,如果路径存在,会创建成功,如果路径不存在会创建失败;
创建失败后,先创建路径,再创建节点。
4总结
本篇文章or主要介绍了基于 ZooKeeper 的分布式锁框架 Curator 的使用,以及加锁流程,源码分析。
下面对内容做下总结:
重点需要关注的是:
基于 ZooKeeper 的分布式锁,是使用的临时顺序节点,父节点是持久节点; 创建临时节点时,父节点不存在,会先创建父节 源点(路径); 锁的组成结构为:对 /locks/lock_01 加锁,实际锁住的是 /locks/lock_01/_c_UUID-lock-序号,举例为 /locks/lock_01/_c_cc4fc045-5a1e-4378-b3c7-8a8d3fb9码 a37c-lock-0000000000
引用链接:
[1]ZooKeeper Shared Reentrant Lock: https://curator.apache.org/curator-recipes/shared-reentrant-lock.ht之一ml
相关文章
富贵子果的吃法-业百科富贵子果的吃法:把富贵子果实用清水洗干净后,直接食用。富贵子又名朱砂根,主要分布于广东、广西、四川、福建等地。其株高0.4至1米,叶片互生,质厚有。富贵子果子怎么吃-业百科直接食2026-11-12
云梦级5月15日云梦级消息,据1818黄金眼报道,前段时间,宋女士的小女儿今年13岁,说是前段把一万多钱充到叠纸公司出品的《恋与深空》游戏里,关键是,这款游戏要求满18岁才能玩。 1818黄金眼记者体2026-11-12
微软推首款自家研发AI模型MAI-Voice-1和MAI-1-preview,与OpenAI竞争
近日,微软的人工智能部门正式发布了其首个自家研发的 AI 模型,命名为 MAI-Voice-1和 MAI-1-preview。这标志着微软在人工智能领域的进一步发展,尤其是在与 OpenAI 的竞争中2026-11-12
标签: 预制菜 食品安全国家标准 国家卫生健康委 GB 2760
云梦级2月6日云梦级消息,国家卫生健康委今天发布《食品安全国家标准 预制菜》(征求意见稿)(以下简称“标准”),面向社会公开征求意见。 预制菜保质期最长不应超过12个月 标准对预制菜的保质期也作出了具2026-11-12
亚马逊与 Perplexity 展开 AI 浏览器之争,争夺购物体验主导权
在最新的科技新闻中,亚马逊与 AI 初创公司 Perplexity 之间的冲突正愈演愈烈。亚马逊近日公开表示,已多次要求 Perplexity 停止其 AI 浏览器 Comet 为用户进行购物的功能。2026-11-12
Canva免费放出Affinity专业设计套件,Adobe订阅制遭遇最强挑战
设计软件市场正经历一场静默却剧烈的地震。就在2025年10月31日,Canva正式推出整合升级后的Affinity应用V1.0版本——这款由其在2024年收购的专业级设计工具,如今以完全免费的姿态向全2026-11-12

最新评论