1.数据模型:采用树形层次结构,zookeeper树中的每个节点被成为一个Znode
Znode的特点:
1)兼具文件和目录两个特点。可以像文件一样维护数据,也可以作为路径标识的一部分。
2)具有原子性操作。读操作将获取与节点相关的所有数据,写操作也将替换掉节点的所有数据。另外每个节点都有自己的ACL(访问控制列表),这个列表规定用户的权限,即限定了特定用户对目标节点可执行的操作。
3)存储数据大小限制。它不能当成常规的数据库来用,只能用来调度数据,比如分布式应用中的配置文件信息、状态信息、汇集位置等等。这些数据的共同特征就是它们都是很小的数据,通常以kb作为单位。zookeeper的客户端和服务端的znode都被限制最大数据为1MB。
4)通过路径引用。路径必须是绝对的,因此路径必须以斜杠字符来开头。路径必须是唯一的。路径由Unicode字符串组成,并且有一些限制。字符串“/zookeeper”用来保存管理信息,比如关键配额信息。
2.数据结构图
树形结构图中的每一个节点都是一个Znode。每一个znode由三部分组成:
2.1)stat:此为状态信息,描述该Znode的版本,权限等信息
2.2)data:与该Znode关联的数据
2.3)children:该Znode下的子节点
3.节点类型
临时节点:该节点的声明周期依赖于创建它们的会话。一旦会话结束,临时节点将被自动删除,当然也可以手动删除。临时节点不允许拥有子节点。
永久节点:该节点的声明周期不依赖于会话,并且只有在客户端显示执行删除操作的时候,它们才能被删除。
注意:节点类型创建之后不能被修改。
特性:序列化的特性,Znode的名字后面会自动增加一个不断增加的序列号,序列号对于此节点的父节点来说是唯一的,这样可以记录每一个子节点创建的先后顺序。它的格式为“%10”(10位数字,没有数值的用0填充)
通过序列化产生四种节点:
PERSISTENT:永久节点
EPHEMERAL:临时节点
PERSISTENT_SEQUENTIAL:永久节点,序列化
EPHEMERAL_SEQUENTIAL:临时节点,序列化
4.节点属性
4.1)每个节点都包含了一系列的属性,通过命令get,可以获得节点属性。
4.2)dataVersion:数据版本号,每次对节点进行set操作,dataVersion的值都会增加1(即使设置的是相同的数据),可有效避免了数据更新时出现的先后顺序问题
4.3)cversion:子节点的版本号。当znode的子节点发生变化时,cversion的值就会加1
4.4)aclVersion:ACL的版本号。
4.5)cZxid:Znode创建的事务id
4.6)mZxid:Znode被修改的事务id,即每次对znode的修改都会更新mZxid。对于zk来说,每次的变化都会产生一个唯一的事务id,zxid(Zookeeper TransActional Id).通过zxid,可以确定更新操作的先后顺序。
4.7)ctime:节点创建时的时间戳。
4.8)mtime:节点最新一次更新发生时的时间戳
4.9)ephemeralOwner:如果该节点为临时节点,ephemeralOwner的值表示于该节点绑定的session id。如果不是,ephemeralOwner值为0;