zk(Zookeeper)实现分布式锁

Zookeeper实现分布式锁

1,zk中锁的种类:

读锁:大家都可以读,要想上读锁的前提:之前的锁没有写锁

写锁:只有得到写锁的才能写。要想上写锁的前提是:之前没有任何锁

2,zk如何上读锁

创建一个临时序号节点,节点的数据是read,表示的是读锁

获取当前zk中序号比自己小的所有节点

判断最小节点是否是读锁:

如果不是读锁的话,则上锁失败,为最小节点设置监听 。阻塞等待,zk的watch机制会当最小节点发生变化时通知当前节点,于是再执行第二步的流程

如果时读锁的话,则上锁成功

3,zk如何上写锁

1, 创建一个临时序号节点,节点的数据时write,表示的是写锁

2, 获取zk中所有的子节点

3, 判断自己是否是最小节点:

如果是则上锁成功

不过不是,说明前面还有锁,则上锁失败,监听最小的节点,如果最小节点有变化则回到第二步

羊群效应: 如果用上述的上锁方式,只要有节点发生变化,则会触发其他节点的监听事件,这样的话zk的压力非常大 ----------可以调整成链式监听,解决这个问题

Curator(Zookeeper的客户端)实现读写锁

相关推荐
KmSH8umpK40 分钟前
Redis分布式锁从原生手写到Redisson高阶落地,附线上死锁复盘优化方案进阶第八篇
数据库·redis·分布式
.柒宇.2 小时前
AI掘金头条项目-K8s部署实战教程
python·云原生·容器·kubernetes·fastapi
AI攻城狮2 小时前
DeepSeek V4:LLM 世界的"好又多"超市
云原生
AI精钢3 小时前
AI Agent 从上线到删库跑路始末
网络·人工智能·云原生·aigc
KmSH8umpK3 小时前
Redis分布式锁从原生手写到Redisson高阶落地,附线上死锁复盘优化方案进阶第七篇
数据库·redis·分布式
AI攻城狮4 小时前
RAG 的 Chunking 有什么好方案?从原理到实战选型
云原生
AI攻城狮7 小时前
如何提高 RAG 的检索质量?这才是真正的瓶颈所在
云原生
_F_y8 小时前
仿RabbitMQ实现消息队列-服务端核心模块实现(4)
分布式·rabbitmq
AI攻城狮10 小时前
DeepSeek KV Cache 入门解读:98% 命中率背后的工程逻辑
云原生
Albert Edison11 小时前
【RabbitMQ】发布确认模式(使用案例)
分布式·rabbitmq·ruby