4. Zookeeper精要-数据模型

1、znodes数据模型

Zookeeper允许分布式的进程通过数据寄存器的命名空间共享机制相互协调,命名空间看起来很像Unix的文件系统,在Zookeeper的命名规则中,数据寄存器就是所谓的znode,如图:
这里写图片描述
我们可以看到znode就类似于一个树形结构,通过给出的事例我们需要着重注意以下几点:

  1. 根节点只有一个子节点/zoo,/zoo几点有三个子节点
  2. 在Zookeeper树中,每个znode都是通过路径标识,且路径是通过”/”分割
  3. znodes之所以可以叫做数据寄存器,主要是因为它可以存储数据。因此,一个znode可以拥有子节点以及和该节点相关联的数据。

一般被存储在znode里面的数据都是byte格式且每个znode所存储的数据量最大不能超过1M。Zookeeper是为调度而生的,而几乎所有和调度相关的数据在大小上都是很小的,因此,此数据大小的限制是强制的,推荐实际的数据大小应小于该限制。
斜杠分割的znode路径是规范且强制的,需要注意的是Zookeeper不能识别相对路径和引用路径。znode的名称可以由Unicode字符组成,而且除Zookeeper的保留字之外,znode可以任意命名,但是需要注意的是在znode路径中,’.’的使用是非法的。
类似于文件系统的文件,znode维护了一个静态的数据结构,这个数据结构包含了数据变更的版本号,访问控制列表以及数据变更的时间戳。当数据变更时,版本号增加,Zookeeper使用版本号和相关的时间戳去验证内部缓存。Zookeeper的客户端也可以通过Zookeeper的API,结合znode版本号更新或者删除一个特定的znode,如果指定的版本号不能够匹配znode的当前版本,操作失败。执行znode的update或者delete操作时,可以指定0重写版本号。

2. znodes类型

Zookeeper有两种znodes类型:持久化类型和临时类型。您也可能听过过第三种类型,叫做有序znode,这种类型是对前两种类型的补充。有序znode既可以是持久化类型,也可以是临时类型,znode的类型在znode创建时设置。

2.1 持久化znode

顾名思义,在Zookeeper的命名空间中,持久化的znode的生命周期从创建开始一直到被显示删除为止。znode的删除可以通过调用delete API,但是客户端创建持久化znode之后并不需要强制要求删除,任何通过Zookeeper服务认证的客户端都可以删除znode。
示例:

客户端连接Zookeeper服务:
./zkCli.sh -server localhost:2181

创建持久化znode:
create /[PacktPub] "ApacheZooKeeper"

2.2、临时znode

所谓临时znode,就是当客户端通过创建临时znode的形式创建一个znode,一旦客户端和Zookeeper服务之间会话结束,Zookeeper服务将自动删除该znode。
临时znode可以被该znode的创建者和所有通过Zookeeper认证的客户端通过调用delete API删除,一旦临时znode的创建者和Zookeeper服务的会话终止,该znode将会立马消失,所以在当前版本的zookeeper中,临时znode不允许有子节点。

客户端连接Zookeeper服务:
./zkCli.sh -server localhost:2181

创建持久化znode:
create -e /[PacktPub] "ApacheZooKeeper"

因为临时节点不允许有子节点,所以一旦在临时节点下面创建子znode,系统将会抛出一个异常。

create -e /[PacktPub]/EphemeralChild
Ephemerals cannot have children: /[PacktPub]/EphemeralChild

2.3、 有序znode

有序znode既在创建该znode时,Zookeeper服务为该znode分配了一个序号,该值是一个单调递增计数器的值,Zookeeper服务在有序znode创建时将该值增补在znode名称的后面。
计数器用于存储序列号,且序列号是一个整数,序列号由10位数字,前面不足用0补充。如:/path/to/znode-0000000001,这种命名约定对于znode通过分配给它们的值来进行排序是很有用的,有序znode既可以是持久化znode,也可以是临时znode。

创建持久化有序znode:
create -s /[PacktPub] "PersistentSequentialZnode"
创建临时有序znode:
create -s -e /[PacktPub] "EphemeralSequentialZnode"
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

RonTech

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值