基于Zookeeper的分布式锁

分布式锁的介绍

在Java的多线程部分,我们知道如果在单个jvm进程中,多个线程之间同时访问一个资源,此时会有多线程的安全问题。为了解决这个线程安全的问题,我们可以使⽤"锁"来实现。但是,多个jvm进程之间如果同时访问一个资源呢?此时就需要一种更加高级的锁机制来处理种跨JVM进程之间的资源安全问题,这就是分布式锁。

分布式锁的分类

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

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

ZooKeeper分布式锁的优点

  • Zookeeper临时顺序节点的递增有序性,可以确保锁的公平
  • ZooKeeper的节点监听机制,能避免羊群效应

ZooKeeper分布式锁的实现

读锁的实现

  1. zk里有一把锁,这个锁就是zk上的一个节点locak-node。
  2. 在"locak-node"这个锁节点下,创建一个临时顺序节点,节点数据是read,表示读锁,这个顺序节点有zk内部自行维护的一个节点序号
  3. 获取锁节点下序列化比自己小的所有节点
  4. 判断上一个节点是不是读锁。 如果是的话,上锁成功;如果不是的话,则上锁失败,为上一个节点设置监听,阻塞等待。

写锁的实现

  1. zk里有一把锁,这个锁就是zk上的一个节点locak-node。
  2. 在"locak-node"这个锁节点下,创建一个临时顺序节点,节点数据是write,表示写锁,这个顺序节点有zk内部自行维护的一个节点序号
  3. 获取锁节点下所有节点
  4. 判断自己是不是序列化最小的一个节点。 如果是的话,上锁成功;如果不是的话,则上锁失败,为上一个节点设置监听,阻塞等待。
相关推荐
运维栈记1 天前
如何排错运行在Kubernetes集群中的服务?
云原生·容器·kubernetes
阿里云云原生1 天前
直播回顾丨详解阿里云函数计算 AgentRun,手把手带你走进 Agentic AI 生产时代
云原生
ChaITSimpleLove1 天前
基于 .NET Garnet 1.0.91 实现高性能分布式锁(使用 Lua 脚本)
分布式·.net·lua
yumgpkpm1 天前
Iceberg在Cloudera CDP集群详细操作步骤
大数据·人工智能·hive·zookeeper·spark·开源·cloudera
原神启动11 天前
Kafka详解
分布式·kafka
yumgpkpm1 天前
Iceberg在Hadoop集群使用步骤(适配AI大模型)
大数据·hadoop·分布式·华为·zookeeper·开源·cloudera
元气满满-樱1 天前
分布式LNMP部署
分布式
Wang's Blog1 天前
RabbitMQ: 声明式配置简化管理
分布式·rabbitmq
叫致寒吧1 天前
zookeeper与kafka
分布式·zookeeper·云原生
赵得C1 天前
2025下半年软件设计师考前几页纸
java·开发语言·分布式·设计模式·性能优化·软考·软件设计师