zookeeper系列

zookeeper系列(一):系统模型

2020-06-02  本文已影响0人  范柏柏

综述

数据模型

zookeeper其实就是一个文件系统。用节点来存储数据。这个节点叫ZNode。所有ZNode组成一棵树。ZNode里面可以存储数据。

数据模型.png

重点。每个节点只有绝对路径。没有相对路径。

节点类型

持久顺序节点.png

观察一下。在/zk-test下创建子节点,非顺序的节点创建后,父节点的顺序值也会+1,只是不会加在节点名字上。父节点记录顺序+1,只要是创建子节点就会+1,不管子节点是否临时,是否持久。就是持久的节点,会把这个10位顺序值放在节点名字的后面。

注意!!

  1. 不能基于临时节点创建临时节点,临时节点只能是叶子节点。
  2. session失效,不是TCP断开连接。而是 session章节会讲

节点信息

节点信息.png

第一行为节点存储的内容。如图,.zk-test节点存储的就是test0这个字符串。
zk作为服务发现的时候,节点的内容基本上是服务的ip地址。

下面就是属性了

属性 说明
cZxid 即create ZXID,表示该数据节点被创建时的事务ID
ctime 即create time,表示该节点被创建时的时间
mZxid 即modified ZXID,表示该节点最后一次更新时的事务ID
mtime 即modified time,表示该节点最后一次更新的时间
dataVersion 该节点版本号
cversion 子节点列表的版本号
pZxid 表示该节点的子节点列表最后一次被修改时的事务ID。注意,只有列表变了才会被修改,子节点内容的变化不会影响pZxid
aclVersion 该节点acl版本号
ephemeralOwner 创建该临时节点的会话的sessionId。如果该节点是持久节点,那么这个属性值为0
dataLength 该节点数据内容的长度
numChildren 当前节点的子节点个数。临时节点也算在内,临时节点被删除时,数量对应减少

属性中提到了事务ID,那zk中的事务是什么呢?

zk的事务是指能够改变服务器状态的操作。是一次操作,并不是一组操作。比如,节点的创建,节点的删除,数据节点内容的更新,客户端会话创建与失效。

对每个事务请求,zk都会为其分配一个全局唯一的事务ID。用ZKID表示,通常是一个64位的数字。每一个ZXID对应一次更新操作,通过ZXID可以识别出zk处理这些操作的全局顺序。

属性中提到了版本,那zk中的版本是什么呢?

版本类型 说明
dataVersion 当前数据节点数据内容的版本号
cversion 当前数据节点子节点列表的版本号
aversion 当前数据节点ACL变更版本号

分布式领域中,version的存在基本上就是用来做乐观锁的。
当请求的version相同时,接收请求,version + 1。
请求的version不同,拒绝请求。

属性里面提到了ACL,那zk的ACL是什么呢?

ACL(Access Control List)权限控制机制
ACL格式。

scheme:id:permission

scheme(模式)

id(授权对象)

授权对象指的是权限赋予的用户或者一个指定的实例。

权限模式 授权对象
ip ip地址或者ip段
digest username:password
world 只能是 "anyone"
super 与digest模式一致

permission(权限)

ACL管理

  1. 在创建节点的时候就设置


    创建时设置.png

2)之后设置


创建后设置.png
上一篇下一篇

猜你喜欢

热点阅读