Zookeeper-核心概念

3/13/2024 zookeeper

# 介绍

Zookeeper是一个分布式的开源协调服务,主要用于解决分布式系统中的一些数据管理、配置管理、命名服务、集群管理、分布式锁等问题。Zookeeper提供了一个简单的树形结构的命名空间,可以存储任意类型的数据,而且可以通过Watcher机制来实现分布式系统中的协调和同步。

Zookeeper的主要特点包括:

  • 分布式协调:Zookeeper可以作为分布式系统的协调服务,管理分布式系统中各个节点的状态和配置信息,实现分布式锁等机制。
  • 高可用性:Zookeeper支持多机部署,可以实现高可用性的服务,通过主备节点之间的选举机制保证服务的可用性。
  • 数据一致性:Zookeeper提供了强一致性的数据访问机制,保证不同节点之间数据的一致性。
  • Watcher机制:Zookeeper提供了Watcher机制,可以实现分布式系统中的事件通知和监控机制,可以实现分布式系统中节点状态的实时监控和更新。

# 节点类型

Zookeeper 可以理解为一个数形目录服务,当中的每个节点都被称之为 ZNode, 每个节点上都可以保存自己的数据(少于1MB)和节点信息。节点也可以拥有子节点。

ZNode分类:

  • PERSISTENT: 持久化节点
  • EPHEMERAL(-e): 临时节点
  • PERSISTENT_SEQUENTIAL(-s): 持久化顺序节点
  • EPHEMERAL_SEQUENTIAL(-es): 临时顺序节点

# 节点元数据信息

属性 说明
cZxid 创建该节点的事务id
cTime 节点的创建时间
mZxid 最近一次修改节点的事务id(增删子节点不影响该值)
mtime 最近一次修改时间(增删子节点不影响该值)
pZxid 子节点的最新事务id
cversion 对该节点的子节点进行修改的次数
dataVersion 对该节点数据进行修改的次数
aclVersion 对该节点acl修改的次数
ephemeralOwner 0x0 (持久化节点) 0x----(临时节点, 非0值)
dataLength 该节点数据长度
numChildren 子节点数量

# 分布式锁

Zookeeper 可以用于实现分布式锁,原理依据 Zk 中可以创建临时顺序节点。每当进行枷锁操作时,都会创建一个临时顺序节点, 然后判断当前节点是否为父节点下序列号最小的节点,如果是,则加锁成功。否则,监听当前节点序列号小的前一位节点,当监听到序列号比当前节点 小的前一位节点被删除时,就可以唤醒当前线程获取锁。