Zookeeper架构Day02-Zookeeper组件

342 阅读5分钟

Zookeeper组件

数据模型data model

  • Zookeeper数据模型采用层次化的多叉数结构:

    • 最上层根节点以 / 表示,每个节点可以拥有N个子节点
    • 每个节点上都可以存储数据,数据类型可以是数字,字符串和二进制序列
    • 每个节点称为znode,Zookeeper中数据的最小单元,并且每一个znode都有一个唯一的路径标识
  • 注意:

    • Zookeeper是用来协调服务的,而不是用来存储业务数据的
    • 不能在节点znode上存放大量的数据
    • Zookeeper中每个节点znode存放数据量的上限是1M

数据节点znode

  • Zookeeper中的每一个数据节点称为znode,Zookeeper中数据的最小单元

数据节点znode的四种类型

  • 持久节点PERSISTENT : 一旦创建节点znode, 就会一直存在.即使Zookeeper宕机也不会消失,直到将该节点znode删除
  • 临时节点EPHEMERAL : 临时节点znode的生命周期是与客户端会话session绑定的,会话消失则节点消失. 临时节点znode只能作为叶子节点,不能创建子节点
  • 持久顺序节点PERSISTENT_SEQUENTIAL : 除了具备持久节点PERSISTENT的性质之外,节点znode的名称还具有顺序性
  • 临时顺序节点EPHEMERAL_SEQUENTIAL : 除了具备临时节点EPHEMERAL的性质之外,节点znode的名称还具有顺序性

数据节点znode的数据结构

  • 每个znode由两部分组成:

    • data: 节点存放的数据信息
    • stat: 节点状态信息
  • stat中状态信息描述:

stat值说明
cZxidcreate ZXID 数据节点创建时的事务ID
ctimecreate time 数据节点的创建时间
mZxidmodified ZXID 数据节点最终一次更新时的事务ID
mtimemodified time 数据节点最终一次更新时的时间
pZxid数据节点的子节点列表最后一次修改时的事务ID 只有子节点列表变更时才会更新pZxid,子节点内容变更时不会更新
cversion子节点版本号 当前数据节点的子节点每次变化时值增加1
dataVersion数据节点内容版本号 数据节点创建时值为0,之后每次调用更新数据节点内容操作后值增加1
aclVersion数据节点ACL版本号 表示该节点ACL信息变更次数
ephemeralOwner创建当前临时节点的客户端会话的sessionId 如果当前节点是持久节点,那么ephemeralOwner=0
dataLength数据节点数据内容长度
numChildren当前数据节点子节点数量
  • 示例:
get /dubbo

# data. 数据节点关联的数据信息为空
null

# stat. 数据节点的状态信息

cZxid = 0x2
ctime = Thu Jan 28 09:35:57 CST 2021 
mZxid = 0x2
mtime = Thu Jan 28 09:35:57 CST 2021
pZxid = 0x3
cversion = 1
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 1

版本version

  • Zookeeper中节点znodestat中记录了节点相关的三个版本信息:

    • 当前节点的子节点版本号cversion
    • 当前节点的数据内容版本号dataVersion
    • 当前节点的ACL版本号aclVersion

权限控制acl

  • Zookeeper采用ACL(AccessControlLists) 策略来进行权限控制,类似与UNIX文件系统的权限控制

  • 数据节点znode的操作包含以下5种权限:

    • CREATE: 创建子节点

    • READ: 读取节点的数据和列出子节点

    • WRITE: 更新节点的数据

    • DELETE: 删除子节点

    • ADMIN: 设置节点ACL的权限

      • 这里的CREATEDELETE的权限控制是针对子节点的权限控制
  • Zookeeperznode的四种身份认证的方式:

    • world: 默认方式. 所有的用户都可以无条件进行访问
    • ip: 指定ip的用户可以进行访问
    • auth: 已经进行认证的用户可以进行访问
    • digest: 通过用户名username和密码password的认证方式进行访问

事件监听器watcher

  • 事件监听器Watcher :

    • Zookeeper中一个很重要的特性
    • Zookeeper允许用户在指定的节点znode上注册一些Watcher, 并且在一些特定事件触发时 ,Zookeeper会将事件通知到监听的客户端中
    • 事件监听机制是Zookeeper实现分布式协调服务的重要特性
      在这里插入图片描述

会话session

  • 会话Session :

    • 会话SessionZookeeper服务器与客户之间的一个TCP长连接

    • 通过这个会话Session. 客户端可以和Zookeeper服务器之间:

      • 通过心跳检测与服务器保持有效的会话
      • Zookeeper服务器发送请求并接收响应
      • 能够通过连接接收来自服务器的Watcher事件通知
  • 会话超时时间sessionTimeout :

    • 当服务器压力过大,网络故障或者客户端主动断开连接等原因导致客户端连接断开时,只要在会话超时时间sessionTimeout规定的时间内能够重新连接上集群中任意一台服务器,那么之前创建的会话Session还是有效的
  • 会话标识sessionID :

    • 在创建客户端会话之前,服务器会为每个客户端分配一个sessionID
    • 因为sessionIDZookeeper会话的一个重要标识 ,Zookeeper中与会话有关的运行机制都是基于这个sessionID的,因此,在整个集群中服务器为客户端分配的sessionID要保证在整个集群中是全局唯一