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

1. Zookeeper 分布式锁实战
1.1 什么是分布式锁
在单体的应用开发场景中涉及并发同步的时候,大家往往采用Synchronized(同步)或者其他同一个JVM内Lock机制来解决多线程间的同步问题。在分布式集群工作的开发场景中,就需要 一种更加高级的锁机制来处理跨机器的进程之间的数据同步问题,这种跨机器的锁就是分布式锁。
目前分布式锁,比较成熟、主流的方案:
(1)基于数据库的分布式锁。这种方案使用数据库的事务和锁机制来实现分布式锁。虽然在某些场景下可以实现简单的分布式锁,但由于数据库操作的性能相对较低,并且可能面临锁表的风险,所以一般不是首选方案。
(2)基于Redis的分布式锁。Redis分布式锁是一种常见且成熟的方案,适用于高并发、性能要求高且可靠性问题可以通过其他方案弥补的场景。Redis提供了高效的内存存储和原子操作,可以快速获取和释放锁。它在大规模的分布式系统中得到广泛应用。
(3)基于ZooKeeper的分布式锁。 这种方案适用于对高可靠性和一致性要求较高,而并发量不是太高的场景。 由于ZooKeeper的选举机制和强一致性保证,它可以处理更复杂的分布式锁场景,但相对于Redis而言,性能可能较低。
1.2 基于数据库设计思路
可以利用数据库的唯一索引来实现,唯一索引天然具有排他性

1.3 基于Zookeeper设计思路一
使用临时 znode 来表示获取锁的请求,创建 znode成功的用户拿到锁。

如果所有的锁请求者都 watch 锁持有者,当代表锁持有者的 znode 被删除以后,所有的锁请求者都会通知到,但是只有一个锁请求者能拿到锁。 这就是羊群效应。
1.4 基于Zookeeper设计思路二
使用临时有序znode来表示获取锁的请求,创建最小后缀数字 znode 的用户成功拿到锁。
公平锁的实现

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

1.6 总结
优点:ZooKeeper分布式锁(如InterProcessMutex), 具备高可用、可重入、阻塞锁特性,可解决失效死锁问题 ,使用起来也较为简单。
缺点: 因为需要频繁的创建和删除节点,性能上不如 Redis 。
在高性能、高并发的应用场景下,不建议使用ZooKeeper的分布式锁。而由于ZooKeeper的高可靠
性,因此在并发量不是太高的应用场景中,还是推荐使用ZooKeeper的分布式锁。
2. 基于Zookeeper实现服务的注册与发现
基于 ZooKeeper 本身的特性可以实现服务注册中心
2.1 设计思路

2.2 Zookeeper实现注册中心的优缺点
优点:
· 高可用性:ZooKeeper是一个高可用的分布式系统,可以通过配置多个服务器实例来提供容错能力。如果其中一个实例出现故障,其他实例仍然可以继续提供服务。
· 强一致性:ZooKeeper保证了数据的强一致性。当一个更新操作完成时,所有的服务器都将具有相同的数据视图。这使得ZooKeeper非常适合作为服务注册中心,因为可以确保所有客户端看到的服务状态是一致的。
· 实时性:ZooKeeper的监视器(Watcher)机制允许客户端监听节点的变化。当服务提供者的状态发生变化时(例如,上线或下线),客户端会实时收到通知。这使得服务消费者能够快速响应服务的变化,从而实现动态服务发现。
缺点:
· 性能限制:ZooKeeper的性能可能不如一些专为服务注册中心设计的解决方案,如nacos或Consul。尤其是在大量的读写操作或大规模集群的情况下,ZooKeeper可能会遇到性能瓶颈。
2.3 整合Spring Cloud Zookeeper实现微服务注册中心
第一步:在父pom文件中指定Spring Cloud版本


第二步:微服务pom文件中引入Spring Cloud Zookeeper注册中心依赖


第三步: 微服务配置文件application.yml中配置zookeeper注册中心地址

第四步:整合feign进行服务调用

相关推荐
爱吃火鸡面呀5 小时前
深入理解 Spark RDD:五大特性与实战解析
大数据·分布式·spark
.冰块.7 小时前
VMware+Ubuntu24.04 kubeadm 部署 K8s 1.30.2 三节点集群
运维·云原生·容器·kubernetes·k8s·容器编排
Norris Huang8 小时前
Kafka Connect 与 Flink CDC 写入 Iceberg:Upsert 的代价,以及 S3 Tables 的真正价值
分布式·flink·kafka
我就是不信8 小时前
集群高并发环境下如何保证分布式唯一全局ID生成?
分布式
黄俊懿1 天前
【架构师从入门到进阶】第六章:服务集群优化——第八节:线程数公式
java·服务器·数据库·分布式·性能优化·架构·系统架构
分布式存储与RustFS1 天前
RustFS 该跟 stable 还是 nightly?两条版本线的分工、风险与回退,一张表说清
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
大菠萝爱上小西瓜1 天前
基于 Spark + Iceberg 湖仓一体的 Netflix 流媒体用户行为全链路数仓与 ALS 智能推荐决策系统(含穿透下钻大屏)
大数据·分布式·spark
吴建旭 智宅焕1 天前
智能家居售后服务体系的架构设计:分布式售后风险的集中式兜底方案
分布式·智能家居
ggaofeng1 天前
k8s中的dns
云原生·容器·kubernetes
lisanmengmeng2 天前
Ganglia分布式集群监控系统安装手册
分布式