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 服务器宕机,客户端会自动连接到其他活着的服务器上。
版权声明: 本文为 InfoQ 作者【穿过生命散发芬芳】的原创文章。
原文链接:【http://xie.infoq.cn/article/733bb12a3c57cfbaf2d15f3f1】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论