ZooKeeper源码解析前期工作

本文概述了ZooKeeper的基本概念,包括其作为分布式应用协调服务的角色、文件系统、通知机制、ACL权限控制、ZAB协议及网络通信。介绍了组内分工,重点展示了ZooKeeper的核心内容和工作原理。

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


2021SC@SDUSC


一、ZooKeeper综述

1.ZooKeeper是什么

ZooKeepe是Apache Hadoop项目下的一个子项目,是一个树形目录服务。

ZooKeeper是一个分布式的、开源的分布式应用程序的协调服务。换句话说,它是一个用来管理分布式应用程序的软件。既然它是一个管理的软件,那么它也为分布式应用程序提供了相应的管理功能服务,因而分布式应用程序可以实现数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Leader选举、分布式锁和分布式队列等功能。

ZooKeeper会封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户使用。

简单来说,ZooKeeper提供了文件系统和通知机制,并保证了顺序一致性、原子性、单一视图、可靠性和最终一致性。

2.ZooKeeper文件系统、通知机制和访问控制列表(ACL)

ZooKeeper提供一个多层级的节点命名空间,节点称为znode。与文件系统不同的是,znode可以设置关联的数据,而文件系统中只有文件节点可以存放数据而目录节点不行。其中znode有默认的四个类型:
(1)PERSISTENT-持久化目录节点:除非手动删除,否则即使客户端与ZooKeeper断开连接后,该节点依然存在。
(2)EPHEMERAL-临时目录节点:临时节点的生命周期与客户端会话绑定,一旦会话失效,那么该临时节点会被删除。
(3)PERSISTENT_SEQUENTIAL-持久化顺序目录节点:与持久化目录节点类似,只是增加了顺序属性。
(4)EPHEMERAL_SEQUENTIAL-临时顺序目录节点:与临时目录节点类似,只是增加了顺序属性。

此外,ZooKeeper在内存中维护了这个树状目录结构,这个特征使得ZooKeeper不能用于存放大量的数据,每个节点的存放数据上限为1M。

通知机制:客户端对某个它感兴趣的znode建立一个watcher事件。当该znode发生变化时,对该znode感兴趣的客户端就会收到ZooKeeper的通知,进而客户端根据znode变化而有所作为。

ACL 权限控制,使用:scheme🆔perm 来标识,主要涵盖 3 个方面:
  权限模式(Scheme):授权的策略
  授权对象(ID):授权的对象
  权限(Permission):授予的权限

其特性如下:
  ZooKeeper的权限控制是基于每个znode节点的,需要对每个节点设置权限
  每个znode支持设置多种权限控制方案和多个权限
  子节点不会继承父节点的权限,客户端无权访问某节点,但可能可以访问它的子节点

3.ZooKeeper主从节点同步——ZAB协议

ZooKeeper的核心是原子广播机制,这个机制保证了各个服务端之间的同步。实现这个机制的协议叫做ZAB协议。

分布式系统中Leader负责对外部客户端的写请求,Follower负责对外部客户端的读请求和数据同步。因而产生了相应的问题:
(1)Leader如何将数据同步到各个Follower?
(2)Leader由于自身原因失效或者过半Follower失效导致Leader失效后,集群如何工作?

因此ZAB协议为了解决上面的问题而设计了两种模式,分别是广播模式和恢复模式,整个ZooKeeper在这两个模式之间切换。
(1)恢复模式:当服务启动或者在领导者失效后,ZAB进入恢复模式。当Leader被选举出来且过半Follower完成了和Leader的状态同步后,恢复模式结束。状态同步保证了Leader和Follower具有相同的系统状态。
(2)广播模式:Leader和过半Follower进行了状态同步后,进入广播模式。ZooKeeper服务一直维持在Broadcast状态,直到Leader失效。

4.ZooKeeper网络通信以及会话

ZooKeeper中网络通信方式有两种:
(1)Zookeeper 客户端与Follower之间的网络通信采用了NIO通信方式。当客户端与服务端Follower之间需要建立网络通信时,客户端根据配置文件以及load balance算法从集群中选定一个Follower作为通信目标。这样客户端和Follower之间就有了一条由NIO构成的通信通道。通信通道建立好后,Follower会生成一个 ServerCnxn对象,当该对象创建好之后,会为当前这个客户端建立成功的连接,创建一个 Session 对象。这条通道会一直保持到客户端关闭Session或者因为客户端或Follower任一方因异常中断通信连接。
(2)Zookeeper 还提供了对netty的支持,而使用netty作为zookeeper网络通信层的实现的话需要在客户端和Follower分别指定。

会话包括会话状态、会话创建、会话管理、会话清理以及重连。这里挑出ZooKeeper的会话创建做一下简单的介绍,其余部分将在后续源码分析时做详细介绍。

ZooKeeper 会话创建:当由NIO构成通信通道连接建立好后,客户端发送create session的命令。当Follower收到create session命令,先从本地的Session列表中查找看是否已经存在有相同sessionID,如果存在,则关闭原Session重新创建新的Session。创建Session的过程将发送到Leader,再由Leader通知其他Follower,当过半Follower根据ZAB协议将此请求记录到本地日志后通知Leader,Leader发送commit命令给所有Follower,连接客户端的Follower返回创建成功的session响应。

二、组内分工

组员ZooKeeper源码解析分工
陈伊臻Znode、Watcher、ACL
刘翔ZAB Protocol
张磊ZAB Protocol
萧科多Network Communications 、Session

三、总结

本章节通过对ZooKeeper的深入理解和分析,从而划分了ZooKeeper的核心内容,并对核心内容进行了概念性阐述。之后将根据组内分工对ZooKeeper的源码进行逐一解析。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值