【技术栈】Zookeeper

1. Zookeeper介绍

Zookeeper是一个开源的分布式应用程序协调服务,也可叫做分布式协调器,分布式管理中心。

Zookeeper特点:
1. Apatch下的一个开源项目
2. 针对分布式应用程序,是一个典型的分布式数据一致性的解决方案
3. 基于它实现诸如 命名服务、配置管理、集群管理、分布式锁、分布式队列 等功能

2. Zookeeper文件系统

在这里插入图片描述

如图所示,ZooKeeper的命名空间类似于linux下的文件系统,不同之处在于ZNode节点没有文件夹和文件的概念。
ZNode节点以key-value键值对的形式存储(ZNode除了存储名称路径信息外,还可以保存该节点的其它信息,如配置信息等)

ZNode节点类型:
1. 永久节点
2. 永久有序节点
3. 临时节点
4. 临时有序节点

3. Zookeeper监听机制

在这里插入图片描述

ZooKeeper的Watcher机制主要包括:客户端线程、客户端WatcherManager、Zookeeper服务器三部分
1. 客户端在向zookeeper服务器注册的同时,会将Watcher对象存储在客户端的WatcherManager当中
2. 当zookeeper服务器触发watcher事件后,会向客户端发送通知
3. 客户端线程从WatcherManager中取出对应的Watcher对象来执行回调逻辑
原文链接:https://blog.csdn.net/qichangjian/article/details/88184705

监听机制是Zookeeper的神秘之处,在向Zookeeper进行节点的操作时,可以注册监听,监听节点的变化。

4. Zookeeper数据同步

在 Zookeeper 集群中,主要依赖 Zab 协议来实现分布式数据一致性:消息广播、崩溃恢复。

Zab协议:
1. Zab原子广播协议是专门为Zookeeper制定的一个分布式协议,核心是半数同意则保持高可用性。
2. Zookeeper客户端读取信息时,请求到任一节点均可,进行事务型操作时(这里指的是对节点的增删修改操作),最终须有Leader进行处理
3. 消息广播是一个简化版的二阶段提交(二阶段的核心是延后提交)

4.1 消息广播

如图所示,消息广播需要注意:
1. Zookeeper中Leader用来接收和处理客户端所有事务请求
2. 半数以上节点同意时(Follower Ack确认),则leader原子广播Commit消息至其它Follower(此时不再需要Follower确认)
3. Observer节点只负责同步Leader数据,不参与2PC(二阶段提交)数据同步过程

4.2 崩溃恢复

Zookeeper Leader选举分为首次选举和崩溃恢复选举:
1. Zookeeper集群启动时,进行首次选举
2. Zookeeper Leader节点宕机时,会进行崩溃恢复
3. 选举中,节点顺序、事务id(Zxid)、第几轮选举等都可以作为选举的权重,一般值越大权重越大

节点顺序:集群中,zk节点定义,值越大,权重越大(这里权重指的是优先级)
事务id:事务id指的是zk节点做的第几次操作,zk对每次操作都当做一个事务,选举也是事务
第几轮选举:指的是当前是第几轮选举,值越大,表示该选举是最近的选举,优先级最高

4. Zookeeper应用场景

Zookeeper常用场景:
1. 命名服务(服务注册与发现)
2. 集中配置(利用Zk订阅,观察者模式)
3. Zookeeper分布式锁(利用临时有序节点进行排序,获取最小节点)
4. Zookeeper队列(同3)

4.1 命名服务

Dubbo微服务框架依赖Zookeeper作为注册中心,服务提供者注册服务器信息到Zookeeper服务器中,消费者去订阅相应的服务。

4.2 集中配置

所谓集中配置,就是配置信息保存在Znode节点中,其它分布式应用对该节点进行监听,当数据发生变化时,及时做出响应。

4.3 Zookeeper分布式锁

Zookeeper分布式锁原理使用的是临时顺序节点,来保证FIFO的顺序性

4.4 Zookeeper分布式队列

1. 首先利用Zookeeper中临时顺序节点的特点当生产者创建节点生产时,需要判断父节点下临时顺序子节点的个数,如果达到了上限,则阻塞等待;
2. 如果没有达到,就创建节点。当消费者获取节点时,如果父节点中不存在临时顺序子节点,则阻塞等待;
3. 如果有子节点,则获取执行自己的业务,执行完毕后删除该节点即可。获取时获取最小值,保证FIFO特性。
Zookeeper虽然能实现分布式队列,但是还是建议使用其它消息中间件来实现

4.5 分布式任务调度

分布式任务调度,指的是一个job,只支持集群中一台机器执行,比如一些对账定时任务。
其实分布式任务调度原理同分布式锁

------------------------------------------------

推荐:博客园-Zookeeper详细

推荐:Zookeeper典型应用场景介绍

强推:菜鸟教程-Zookeeper相关

------------------------------------------------

【说明】梳理知识用,有些地方未做验证,请保持怀疑态度

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值