一、Zookeeper介绍
1.1 简介
ZooKeeper是一个开源的分布式协调服务,旨在提供高可用性和一致性的数据管理。(何谓协调服务?就是在系统中充当着协调的角色,比如在系统中A、B程序之间可以间接通过协调服务进行通信,而不直接通信)
1.2 主要特点
- 分布式协调:ZooKeeper提供了分布式环境下的一致性和协调服务,用于解决分布式系统中的
共识问题
等。 - 数据管理:ZooKeeper提供了一个
类似文件系统的树形结构
(DataTree),用于存储和管理数据。每个节点都可以存储小量的数据,并支持读写操作。 - 可靠性:ZooKeeper通过
复制数据到多个节点来实现高可用性
。即使其中一些节点出现故障,其他节点仍然可以提供服务,确保系统的可靠性。 - 顺序性保证:ZooKeeper能够以
严格有序(zxid递增)
的方式处理请求,保证所有客户端对数据的变更操作按照相同的顺序进行处理。 - 轻量级:ZooKeeper的设计简单而精炼,适用于各种规模的分布式系统。
1.3 系统架构
zookeeper的架构图如下
zookeeper集群是由一个leader节点、多个follower节点
组成,leader节点会将数据同步给follower节点,以保证leader宕机之后数据不会丢失。并且如果leader节点宕机,会自动通过故障恢复机制选举出新的leader
(在选举过程中无法处理请求),保证了高可用性。
客户端对zookeeper集群中所有的节点都可以发起读写请求,如果是读请求,不管是leader还是follower都可以直接处理(如果是读请求发送到follower节点,读到的数据可能不是最新的,因为数据可能还没有从leader同步到follower,zookeeper只保证了最终一致性,不保证强一致性
)。
1.4 数据模型
zookeeper的数据模型类似于文件系统的树型结构
,每个节点由一个路径名称来标识,如/app1、/app1/data1等等,如下图
这种节点在zookeeper里称作znode,每个znode都包含了事务id(zxid),操作控制列表(ACL),时间戳和数据
。
- 事务id(zxid):用于标识事务的唯一编号。每个事务在ZooKeeper中都会被分配一个递增的ZXID值
- 操作控制列表(ACL):访问znode的认证机制
- 时间戳:创建和修改znode的时间点
- 数据:实际存储的数据
二、关键点梳理
接下来会从上面几个关键点结合源码来看下zookeeper具体是如何实现的?
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。