写点什么

ZooKeeper 数据模型

  • 2022-10-18
    北京
  • 本文字数:968 字

    阅读完需:约 1 分钟

ZooKeeper数据模型

考虑到分布式协调服务内部实现的复杂性,ZooKeeper 尝试将尽可能简单的数据模型和 API 暴露给用户,以屏蔽协调服务本身的复杂性。ZooKeeper 提供了类似于文件系统的层级命名空间,而所有分布式协调功能均可以借助作用在该命名空间上的原语实现。在用户看来,ZooKeeper 非常类似于一个分布式文件系统。

1、层级命名空间

一个典型的 ZooKeeper 层级命名空间,整个命名方式类似于文件系统,以多叉树形式组织在一起。其中,每个节点被称为“znode”,它主要包含以下几个属性:

1)data:每个 znode 拥有一个数据域,记录了用户数据,该域的数据类型为字节数组。ZooKeeper 通过多副本方式保证数据的可靠存储。

2)type:znode 类型,具体分为 persistent, ephemeral, persistent_sequential 和 ephemeral_sequential 四种基本类似,含义如下:

  • persistent:持久化节点,能够一直可靠地保存该节点(除非用户显式删除)。

  • ephemeral:临时节点,该节点的生命周期与客户端相关,只要客户端保持与 ZooKeeper server 的 session 不断开,该节点会一直存在,反之,一旦两者之间连接断开,则该节点也将被自动删除。

  • sequential:自动在文件名默认追加一个增量的唯一数字,以记录文件创建顺序,通常与 persistent 和 ephemeral 连用,产生 persistent_sequential 和 ephemeral_sequential 两种类型。

3)version:znode 中数据的版本号,每次数据的更新会导致其版本加一。

4)children:znode 可以包含子节点,但由于 ephemeral 类型的 znode 与 session 的生命周期是绑定的,因此 ZooKeeper 不允许 ephemeral znode 有子节点。

5)ACL:znode 访问控制列表,用户可单独设置每个 znode 的可访问用户列表,以保证 znode 被安全访问。

ZooKeeper 能够保证数据访问的原子性,即一个 znode 中的数据要么写成功,要么写失败。

2、Watcher

Watcher 是 ZooKeeper 提供的发布/订阅机制,用户可在某个 znode 上注册 watcher 以监听它的变化,一旦对应的 znode 被删除或者更新(包括删除、数据域被修改、子节点发生变化等), ZooKeeper 将以事件的形式将变化内容发送给监听者。需要注意的是,watcher 一旦触发后便会被删除,除非用户再次注册该 watcher。

3、Session

Session 是 Zookeeper 中的一个重要概念,它是客户端与 ZooKeeper 服务端之间的通信通道。同一个 session 中的消息是有序的。Session 具有容错性:如果客户端连接的 ZooKeeper 服务器宕机,客户端会自动连接到其他活着的服务器上。


发布于: 刚刚阅读数: 3
用户头像

InfoQ签约作者 2018-11-30 加入

热爱生活,收藏美好,专注技术,持续成长

评论

发布
暂无评论
ZooKeeper数据模型_zookeeper_穿过生命散发芬芳_InfoQ写作社区