Zookeeper的数据模型

1.Znode

在Zookeeper中,数据信息被保存在一个个数据节点上,这些节点被称为znode,ZNode是Zookeeper中最小数据单位,在Znode下面又可以再挂Znode,这样一层层下去就形成来一个层次化命名空间ZNode树,我们称为ZnodeTree,它采用来类似文件系统的层级树状态结构进行管理,见下图

在 Zookeeper 中,每一个数据节点都是一个 ZNode,上图根目录下有两个节点,分别是∶ app1 和 app2,其中app1下面又有三个子节点。

所有ZNode按层次化进行组织,形成这么一颗树,ZNode的节点路径标识方式和Unix文件系统路径非常相似,都是由一系列使用斜杠 (/)进行分割的路径表示,开发人员可以向这个节点写入数据,也可以在这个节点下面创建子节点。

1.1 ZNode 的类型

Zookeeper 节点类型可以分为三大类∶持久性节点(Persistent)临时性节点(Ephemeral)顺序性节点(Sequential)

在开发中在创建节点的时候通过组合可以生成以下四种节点类型∶ 持久节点、持久顺序节点、临时节点、临时顺序节点。不同类型的节点则会有不同的生命周期

 

1.持久节点∶ 是Zookeeper中最常见的一种节点类型,所谓持久节点,就是指节点被创建后会一直存在服务器,直到删除操作主动清除

2.持久顺序节点∶就是有顺序的持久节点,节点特性和持久节点是一样的,只是额外特性表现在顺序上。顺序特性实质是在创建节点的时候,会在节点名后面加上一个数字后缀,来表示其顺序。

3/临时节点;就是会被自动清理掉的节点,它的生命周期和客户端会话绑在一起,客户端会话结束,节点会被删除掉。与持久性节点不同的是,临时节点不能创建子节点。

4.临时顺序节点∶ 就是有顺序的临时节点,和持久顺序节点相同,在其创建的时候会在名字后面加上数字后缀。 

1.2 事务ID

首先,事务是对物理和抽象的应用状态上的操作集合。

往往在现在的概念中,狭义上的事务通常指的是数据库事务,一般包含了一系列对数据库有序的读写操作,这些数据库事务具有所谓的ACID特性。

原子性(Atomic)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)

而在ZooKeeper中,事务是指能够改变ZooKeeper服务器状态的操作,我们也称之为事务操作或更新操作,一般包括数据节点创建与删除、数据节点内容更新等操作

对于每一个事务请求,ZooKeeper都会为其分配一个全局唯一的事务ID,用 ZXID 来表示,通常是一个 64 位的数字。

每一个 ZXID 对应一次更新操作,从这些ZXID中可以间接地识别出ZooKeeper处理这些更新操作请求的全局顺序 ZNode 的状态信息

1.3 ZNode 的状态信息

整个ZNode节点内容包括两部分:节点数据内容和节点状态信息。图中quota是数据内容,其他的属于状态信息。
含义入戏
 
  • cZxid 就是 Create ZXID,表示节点被创建时的事务ID
  • ctime 就是 Create Time,表示节点创建时间。
  • mZxid 就是 Modified ZXID,表示节点最后⼀次被修改时的事务ID
  • mtime 就是 Modified Time,表示节点最后⼀次被修改的时间。
  • pZxid 表示该节点的⼦节点列表最后⼀次被修改时的事务 ID。只有⼦节点列表变更才会更新 pZxid
  • ⼦节点内容变更不会更新。
  • cversion 表示⼦节点的版本号。
  • dataVersion 表示内容版本号。
  • aclVersion 标识acl版本
  • ephemeralOwner 表示创建该临时节点时的会话 sessionID,如果是持久性节点那么值为 0
  • dataLength 表示数据⻓度。
  • numChildren 表示直系⼦节点数

2.Watcher--数据变更通知

Zookeeper使用Watcher机制实现分布式数据的发布/订阅功能。

一个典型的发布/订阅模型系统定义了一种一对多的订阅关系,能够让多个订阅者同时监听某一个主题对象,当这个主题对象自身状态变化时,会通知所有订阅者,使它们能够做出相应的处理。

在 ZooKeeper中,引入了 Watcher 机制来实现这种分布式的通知功能。

ZooKeeper 允许客户端向服务端注册一个Watcher 监听,当服务端的一些指定事件触发了这个 Watcher,那么就会向指定客户端发送一个事件通知来实现分布式的通知功能。

整个Watcher注册与通知过程如图所示。

 

Zookeeper的Wathcer机制主要包括客户端 、客户端WatcherManner、Zookeeper服务器三部分。

具体工作流程为∶

1.客户端在向Zookeeper服务器注册的同时,会将Watcher对象存储在客户端的 WatcherManager当中。

2.当Zookeeper服务器触发Watcher事件后,会向客户端发送通知,客户端线程从WatcherManager中取出对应的Watcher对象来执行回调逻辑。

3.ACL--保障数据的安全

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

酆都小菜鬼

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

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

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

打赏作者

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

抵扣说明:

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

余额充值