zookeeper官档教程一(zookeeper数据模型)

来源:互联网 发布:北航网络教育官网 编辑:程序博客网 时间:2024/05/16 07:04
zookeeper有一个高级的命名空间,像一个分布式文件系统,但是唯一区别在于空间中每个node都和它的子文件相关,就像任何一个文件都可以是一个文件夹。路径也是绝对路径,没有相对路径。同时有一些命名规则上有些unicode字符串不能用,比如. ..这种。

ZNodes:
zookeeper中每个节点都是一个znode,ZNodes维护了一个统计信息数据结构,其中包含了数据改变的版本号以及acl修改等。version number主要是为了验证缓存等数据一致性。Znodes是程序员访问的主要实体,它们有下面几个重要特点。


Watches

客户端能够给znodes上添加watches,watches会被添加到触发器上,当一个watch触发时,zookeeper会给客户端发送通知,后面会详细说明。


Data Access

空间中每个znode中的数据,都是通过原子读写操作的,读会得到关于这个znode的所有信息,每个znode都有acl(访问控制列表)来限制谁能操作数据。
和分布式数据库不同,zookeeper是用来管理数据一致性的,不同种类的一致性数据都有一个共同特点,它们都是以千字节计算的,zookeeper的机制都会确保每个文件小于1MB,一旦文件过大,则会导致某些操作效率过低,如果实在需要处理大文件,就需要用Hdfs了。

Ephemeral Node(临时节点)
一旦session被创建,临时节点就变成活跃状态,一旦session结束,znode就会被删除。由于这种行为,临时节点将不允许有子节点。

Sequence Nodes--Unique Naming(序列化节点 独特的命名)
创建新的znode时,你可以要求zookeeper在路径后添加一个自增的计数器,它相当于父node来说是唯一的
格式如:<path>00000000001,应该控制在2647147483以内,否则会溢出。

Time in ZooKeeper(zookeeper中如何记录时间)
zxid
每个Zookeeper的改动都会得到zxid(事务id)这种格式,这种方式会把所有的改动都公开出来,每个改动都有一个独特的zxid,如果zxid1比zxid2小,说明zxid1在zxid2之前发生。

Version numbers
每个改动都会有一个自增的version号增加。总共有三种version号,version(znode中数据修改的version Number)
cversion(子节点中改动的数目), aversion(ACL 节点的改动数)

Ticks
当使用多机器的zookeeper集群,服务器使用ticks来定义事件的时间,比如状态上传,session 超时时间,连接超时时间。
tick time间接公开了最短的session超时时间(session的超时时间是tick time的两倍)
如果一个客户端请求了一个session超时时间比最短的还要短服务器将会恢复客户端最短的超时时间。

Real time
zookeeper不使用真实事件,除了在znode创建和改动时将timestamps放入统计数据结构中。

Zookeeper stat structure(统计信息数据结构)

czxid
znode创建时的zxid
mzxid
最后修改时的zxid
ctime
znode创建时间
mtime
znode上次修改时间
version
数据changes
cversion
子节点changes
aversion
ACL changes
ephemeralOwner
临时节点拥有者的sessionid,如果没有临时节点则这个sessionid为0
dataLength
data域的长度
numChildren
znode的子节点数


ps:手工翻译,水平有限,有问题欢迎指出!
0 0