文章目录
1.zookeeper数据结构图
zookeeper的数据模型,在结构上和标准文件系统非常相似;拥有一个层次的命名空间,
都是采用食宿行层次结构,zookeeper树中的每个节点都被称为一个Znode;
和文件系统的目录树一样,zookeeper树中的每个节点可以拥有子节点,但也有不同之处;如下:
1.1 Znode兼具文件和目录两种特点
1.即像文件一样维护着数据,元信息 ACL 时间戳等数据结构,
2.又像目录一样可以作为路径标示的一部分,并可以具有子Znode,
3.用户可以对Znode具有增 删 改 查等操作(权限允许的情况下)
1.2 Znode具有原子性操作
1.读操作将获取与节点相关的所有的数据
2.写操作也将替换点节点的所有数据
3.另外,每一个节点都拥有自己的ACL(访问控制列表),这个列表规定了用户的权限,
即限定了特定用户对目标节点可以执行的操作
1.3 Znode存储数据大小有限制
1.zookeeper虽然可以关联一些数据,但是并没有被设计为常规的数据库或者大数据存储,
相反的是,它用来管理调度数据,比如分布式应用中的配置文件信息,状态信息,汇集位置等等;
2.上面的这些数据的共同特性就是他们都是很小的数据,通常以KB为大小单位,
Zookeeper的服务器和客户端都设计为严格检查并限制为每个Znode的数据大小之多1M,当然常规远小于这个值;
1.4 Znode 通过路径引用
1.如同linxu系统文件路径一样,路径必须是绝对的,因此他们必须是由斜杠字符开头
2.路径必须是唯一的
3.路径由Unicode字符串组成,并且有一些限制,字符串"zookeeper"用来保存管理信息,比如关键配置额信息
2.节点类型
Znode 有两种:分别是 临时节点和永久节点;
节点的类型在创建的时候即被确定,并且不能改变;
2.1 临时节点
1.该节点的生命周期依赖于创建他们的会话,一旦会话结束,临时节点将被自动删除,
当然可以也可以手动删除,
2.临时节点不允许拥有子节点;
2.2 永久节点
1.该节点的生命周期不依赖于会话
2.并且只有在客户端显示执行删除的时候,他们才能被删除;
2.3 节点的序列化特性
1.Znode还有一个序列化的特性,如果创建的时候指定的话,该Znode的名字后面会自动追加一个不断增加的序列号;
2,序列号对于此节点的父节点来说是唯一的,这样便会记录每个子节点创建的先后顺序;
3.它的格式为%10d%(10位数字,没有数值的数位用0补充,如 "00000000001")
3.节点属性
每个znode都包含了一系列的属性,通过命令get,可以获得节点的属性
[zk: localhost:2181(CONNECTED) 5] create -s /dubbo hello
Created /dubbo0000000002
[zk: localhost:2181(CONNECTED) 9] get /dubbo0000000002
hello
cZxid = 0x20000be2f
ctime = Mon Dec 31 08:50:13 CST 2018
mZxid = 0x20000be2f
mtime = Mon Dec 31 08:50:13 CST 2018
pZxid = 0x20000be2f
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 5
numChildren = 0
[zk: localhost:2181(CONNECTED) 10]
3.1.dataVersion
1.数据版本号,每次对节点进行set操作,dataVersion的值都会增加1(即使设置的是相同的数据);
2.可以避免数据更新时出现的先后顺序问题;
3.2.cversion
1.子节点的版本号,即 children version
2.当znode的子节点有变化时,cversion的值会增加1
3.3.aclversion
ACL的版本号
3.4.cZxid
1.c 顾名思义:create; Z:Znode
2.znode节点创建的事务id;在创建新的节点的时候的事务id;
3.4.mZxid
1.m:modify
2.Znode被修改的事务id;即每次对znode的修改都会更新mZxid
3.5.ctime
1.节点创建时的时间戳
3.6.mtime
1.节点最新一次更新发生时的时间戳
3.7.ephemeralOwner
1.如果该节点为临时节点,ephemeralOwner 值表示与该节点绑定的session id,
如果不是,ephemeralOwner 值为0;
2.在client和server通信之前,首先需要建立连接,该连接称为session,
连接建立后,如果发生连接超时,授权失败或者显示关闭连接,连接便处于closed状态,
此时session结束;