一、Zookeeper介绍

1.1 简介

ZooKeeper是一个开源的分布式协调服务,旨在提供高可用性一致性的数据管理。(何谓协调服务?就是在系统中充当着协调的角色,比如在系统中A、B程序之间可以间接通过协调服务进行通信,而不直接通信)

1.2 主要特点

  • 分布式协调:ZooKeeper提供了分布式环境下的一致性和协调服务,用于解决分布式系统中的共识问题等。
  • 数据管理:ZooKeeper提供了一个类似文件系统的树形结构(DataTree),用于存储和管理数据。每个节点都可以存储小量的数据,并支持读写操作。
  • 可靠性:ZooKeeper通过复制数据到多个节点来实现高可用性。即使其中一些节点出现故障,其他节点仍然可以提供服务,确保系统的可靠性。
  • 顺序性保证:ZooKeeper能够以严格有序(zxid递增)的方式处理请求,保证所有客户端对数据的变更操作按照相同的顺序进行处理。
  • 轻量级:ZooKeeper的设计简单而精炼,适用于各种规模的分布式系统。

1.3 系统架构

zookeeper的架构图如下
image.png

zookeeper集群是由一个leader节点、多个follower节点组成,leader节点会将数据同步给follower节点,以保证leader宕机之后数据不会丢失。并且如果leader节点宕机,会自动通过故障恢复机制选举出新的leader(在选举过程中无法处理请求),保证了高可用性。

客户端对zookeeper集群中所有的节点都可以发起读写请求,如果是读请求,不管是leader还是follower都可以直接处理(如果是读请求发送到follower节点,读到的数据可能不是最新的,因为数据可能还没有从leader同步到follower,zookeeper只保证了最终一致性,不保证强一致性)。

1.4 数据模型

zookeeper的数据模型类似于文件系统的树型结构,每个节点由一个路径名称来标识,如/app1、/app1/data1等等,如下图
image.png

这种节点在zookeeper里称作znode,每个znode都包含了事务id(zxid),操作控制列表(ACL),时间戳和数据

  • 事务id(zxid):用于标识事务的唯一编号。每个事务在ZooKeeper中都会被分配一个递增的ZXID值
  • 操作控制列表(ACL):访问znode的认证机制
  • 时间戳:创建和修改znode的时间点
  • 数据:实际存储的数据

二、关键点梳理

image.png
接下来会从上面几个关键点结合源码来看下zookeeper具体是如何实现的?


kamier
1.5k 声望493 粉丝