Zookeeper核心概念及读写流程

简介

ZooKeeper是一个分布式应用程序协调服务,主要用于解决分布式集群中应用系统的一致性问题。它能提供类似文件系统的目录节点树方式的数据存储,主要用途是维护和监控所存数据的状态变化,以实现对集群的管理。
ZooKeeper应用场景:

  • 统一命名
  • 配置管理
  • 集群管理
  • 共享锁
  • 队列管理

基本架构

Zookeeper集群中角色介绍:

  • Leader:Leader不直接接受client的请求,但接受由其他Follower和Observer转发过来的Client请求,此外,Leader还负责投票的发起和决议,即时更新状态和数据。
  • Follower:Follower角色接受客户端请求并返回结果,参与Leader发起的投票和选举,但不具有写操作的权限。
  • Observer:Observer角色接受客户端连接,将写操作转给Leader,但Observer不参与投票(即不参加一致性协议的达成),只同步Leader节点的状态,Observer角色是为集群系统扩展而生的。

数据模型(树形结构)

Zookeeper的数据节点称为ZNode,ZNode是Zookeeper中数据的最小单元,每个ZNode都可以保存数据,同时还可以挂载子节点,因此构成了一个层次化的命名空间,称为树。

Znode的主要特点如下:
(1) Znode中仅存储与同步相关的数据,因此数据量很小,大概B到KB量级,例如状态信息、配置内容、位置信息等。
(2) 一个Znode维护一个状态结构,包括:版本号、ACL(访问控制列表)变更、时间戳。Znode存储的数据每次发生变化,版本号都会递增,这样客户端就可以基于版本号检索相关数据。
(3) 每个Znode都有一个ACL,用来限定该Znode可以被何种请求访问。 客户端可以在Znode上设置一个观察者(Watcher),如果该Znode上的数据发生变更,ZooKeeper就会通知客户端,从而触发观察者中实现的逻辑的执行。

节点类型

ZooKeeper中节点主要有四种类型:

  • 持久节点(PERSISTENT)
  • 持久顺序节点( PERSISTENT _SEQUENTIAL)
  • 临时节点(EPHEMERAL)
  • 临时顺序节点( EPHEMERAL _SEQUENTIAL )

读写流程

写流程

  1. 客户端连接到集群中某一个节点,发送一个写请求;
  2. 服务端与客户端所连接的节点,把该写请求转发给leader;
  3. leader处理写请求,等待follower节点返回;
  4. 当leader接收到一半以上的节点(包括自己)返回写成功的信息之后,返回给客户端成功写入。

读流程

  1. 客户端连接到集群中某一节点;
  2. 读请求,直接返回。
posted @ 2021-05-09 09:38  buildings  阅读(146)  评论(0编辑  收藏  举报