ZooKeeper的常用使用场景

本文探讨了Zookeeper(ZK)在分布式系统中的多种应用场景,包括注册中心、分布式锁、Master选举及ID生成等。深入分析了ZK作为注册中心的优缺点,详细解释了分布式锁的两种实现方式及其潜在问题,同时介绍了Master选举和ID生成的具体实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ZK的常用使用场景

一、注册中心

注册中心模型

实现方式
  • 基于临时节点
  • 基于监视通知机制
    注意:ZK集群可能会挂掉,所以为了防止zk挂掉后我们还能正常的进行服务的调用,需要在本地做一次缓存,只有当产生变化时这份缓存才会失效
    经典场景:dubbo中使用ZK做注册中心,并且引入了服务目录的概念,服务目录就是本地的一个缓存,但是当服务提供者列表发生变化时会更新这个缓存列表并且重新进行服务的导入
作为注册中心的缺点分析
  • 数据一致性的需求:zk是一个cp的系统,但是注册中心更应该考虑a,当发生分区等问题时,只保证最终一致性即可,最终的结果只是有几台机器负载不均;
  • 可用性:如上边叙述,当zk发生问题时,会影响服务的正常调用,但是实践中注册中心不能因为自己的原因影响服务的正常调用是注册中心设计的指导原则
  • 服务规模:zk的写是不可扩展的,当我们的集群节点越来越多,并且频繁上下线的时候,会对写节点带来压力
  • 持久化需求:注册中心需要关心之前的数据吗?答案是否定的,注册中心只需要关注当前的数据就行,所以不需要持久化本地和开启备份
  • 健康检查:zk的健康检查只是简单的心跳,不能检查服务的实际状态
  • 复杂性:zk运维成本高,需要专业的人员进行维护
    参考:阿里巴巴为什么不用ZK作为注册中心

二、分布式锁

zk作为分布式锁有两种实现方式 都是基于临时节点+通知机制

1.所有的节点都监听一个临时节点

这样带来的坏处是,会发生羊群效应,如果说在这个临时节点等待的节点超过1000个watch,那么当临时节点移除式就要发送1000个通知,这样会对zk的正常读写带来性能的影响。

2.改进后的分布式锁 引入临时顺序节点

在创建临时节点时,创建有顺序的临时节点,后一个节点总是监听他的前一个节点,这样当就是一个临时节点上只有一个监视点可以避免羊群效应,但是也会造成按创建顺序进行锁的获取,类似于公平锁;

图例

基于临时顺序节点

三、master选举

基于临时节点+同一个目录下节点名称不能相同
谁能创建节点成功谁是master,其他会话监听临时检点状态,当master下线后重新进行选举

四、id生成或命名服务

基于顺序节点
一个目录下的顺序节点是递增的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值