Zookeeper概览

首先Zookeeper(下文简称zk)是一种”分布式协调服务”,我们常见的分布式系统中都有zk的影子。
zk通过简单的架构和API解决了分布式系统难以协调的问题。这样开发人员可以更专注于核心应用程序的逻辑,而不用为分布式环境下的应用程序的协调而担心。

zk的数据结构

zk的数据结构类似文件系统,zk的基本存储单元是节点(Znode),每一个Znode具有唯一确定的路径

Znode的结构

Znode由data acl child stat组成

  • data 代表当前Znode存储的数据信息
  • acl 代表当前Znode的访问权限
  • stat Znode的元数据
    1. 版本号 每当和Znode相关联的数据发生变化时,对应的版本号也会增加。当多个zk客户端在同一znode上操作时,版本号很重要。
    2. ACL 存储当前znode的访问权限
    3. 时间戳
    4. 数据长度 - 存储在znode中数据总量
  • child 表示当前节点的子节点们

Znode的类型

  • 持久节点(PERSISTENT) 该类型节点只有创建它的客户端主动执行删除操作才会被删除,否则会一直存在
  • 临时节点(EPHEMERAL) 该类型节点,和客户端会话紧密相关,当客户端和zk集群断开连接时,临时节点会自动删除。临时节点不允许有子节点
  • 顺序节点(SEQUENTIAL) 创建这个类型的节点时候会自动在其节点名后面追加一个整型数字(该数字由父节点维护)

zk的事务

zk的事务是指能够改变zk服务器状态的操作,一般包括节点的创建、删除、节点内容更新、客户端会话创建与失效等。
对于每一个事务,zk都会为其分配一个全局唯一的事务ID(ZXID);每一个ZXID对应一次更新操作

Session

客户端连接到服务器,会向客户端分配SessionId,同一个会话中的请求按照FIFO顺序执行。
客户端以特定的时间间隔发送心跳,如果时间间隔大于服务器指定的超时时间,那么视为会话过期,将判定客户端死机。