Zookeeper经典应用场景实战(二)

文章目录

  • [1、 Zookeeper 分布式锁实战](#1、 Zookeeper 分布式锁实战)
    • [1.1、 什么是分布式锁](#1.1、 什么是分布式锁)
    • [1.2、 基于数据库设计思路](#1.2、 基于数据库设计思路)
    • [1.3、 基于Zookeeper设计思路一](#1.3、 基于Zookeeper设计思路一)
    • [1.4、 基于Zookeeper设计思路二](#1.4、 基于Zookeeper设计思路二)

1、 Zookeeper 分布式锁实战

1.1、 什么是分布式锁

在单体的应用开发场景中涉及并发同步的时候,大家往往采用Synchronized(同步)或者其他同一个JVM内Lock机制来解决多线程间的同步问题。在分布式集群工作的开发场景中,就需要一种更加高级的锁机制来处理跨机器的进程之间的数据同步问题,这种跨机器的锁就是分布式锁。

目前分布式锁,比较成熟、主流的方案:

  • 基于数据库的分布式锁。这种方案使用数据库的事务和锁机制来实现分布式锁。虽然在某些场景下可以实现简单的分布式锁,但由于数据库操作的性能相对较低,并且可能面临锁表的风险,所以一般不是首选方案。
  • 基于Redis的分布式锁。Redis分布式锁是一种常见且成熟的方案,适用于高并发、性能要求高且可靠性问题可以通过其他方案弥补的场景。Redis提供了高效的内存存储和原子操作,可以快速获取和释放锁。它在大规模的分布式系统中得到广泛应用。
  • 基于ZooKeeper的分布式锁。这种方案适用于对高可靠性和一致性要求较高,而并发量不是太高的场景。由于ZooKeeper的选举机制和强一致性保证,它可以处理更复杂的分布式锁场景,但相对于Redis而言,性能可能较低。

1.2、 基于数据库设计思路

可以利用数据库的唯一索引来实现,唯一索引天然具有排他性

1.3、 基于Zookeeper设计思路一

使用临时 znode 来表示获取锁的请求,创建 znode成功的用户拿到锁。

如果所有的锁请求者都 watch 锁持有者,当代表锁持有者的 znode 被删除以后,所有的锁请求者都会通知到,但是只有一个锁请求者能拿到锁

1.4、 基于Zookeeper设计思路二

使用临时有序znode来表示获取锁的请求,创建最小后缀数字 znode 的用户成功拿到锁。
公平锁的实现

在实际的开发中,如果需要使用到分布式锁,不建议去自己"重复造轮子",而建议直接使用Curator客户端中的各种官方实现的分布式锁,例如其中的InterProcessMutex可重入锁。

相关推荐
玉&心37 分钟前
通过helm在k8s上面一键部署前端和后端代码
云原生·容器·kubernetes·helm
星恒讯工业路由器1 小时前
分布式光伏站点分散难联网?4G/5G点对多点自组网方案解析
分布式·物联网·5g·分布式光伏·自组网·点对多点通信·4g/5g
qq_452396232 小时前
第十一篇:《eBPF 进阶:自定义探针与生产级可观测性部署》
分布式
重庆小透明3 小时前
Kafka 完全指南:从基础组件到核心原理(包含面试题)
java·分布式·微服务·架构·kafka
容器魔方3 小时前
议程一览 | 华为云亮相 KubeCon + CloudNativeCon China 2026
人工智能·云原生·容器·开源·华为云·云计算
瀛川4 小时前
Agent 换了 Pod,身份怎么办?拆解 Substrate 的 Actor Identity
人工智能·云原生
一本正经的不务正业4 小时前
kafka与RocketMQ的不同
分布式·kafka·rocketmq
yanwumuxi4 小时前
Milvus使用和改进
云原生·eureka·milvus
分布式存储与RustFS5 小时前
RustFS 1.0.0-rc.5 发布:GA 前的最后一次大版本打磨
云原生·开源·对象存储·分布式存储·s3·rustfs·性能基准
ZzzZZzzzZZZzzzz…5 小时前
K8s---网络:从 Pod 网络模型到 Calico 三种模式
运维·网络·云原生·容器·kubernetes·calico·pod网络模型