聚成网站建设,艺术公司网站定制中心,视频网站自己怎么做的,清理大师ZooKeeper在分布式领域#xff0c;能够帮助解决很多很多的分布式难题#xff0c;但是底层却只是依赖于两个主要的组件#xff1a;ZNode文件/数据存储系统和watch监听系统#xff0c;另外还有一大模块#xff0c;就是ACL系统。本节我们介绍下znode文件/数据存储系统。
一、…ZooKeeper在分布式领域能够帮助解决很多很多的分布式难题但是底层却只是依赖于两个主要的组件ZNode文件/数据存储系统和watch监听系统另外还有一大模块就是ACL系统。本节我们介绍下znode文件/数据存储系统。
一、ZNode特性
在 ZooKeeper 中每一个数据节点都被称为一个ZNode所有ZNode按层次化结构进行组织形成一棵树。ZNode文件/数据存储系统的作用就是为分布式应用存储少量关键的核心状态数ZNode既能挂载子节点也能存储数据。
所以总结说来ZNode即是文件夹又是文件的概念但是在ZooKeeper这里面就不叫文件也不叫文件夹叫ZNode每个ZNode有唯一的路径标识既能存储数据也能创建子 ZNode但是 ZNode只适合存储非常小量的数据不能超过1M最好小于1K。 ZNode的分类
按照生命周期可以分为
短暂ephemeral断开连接自己删除持久persistent断开连接不删除默认情况
按照是否自带序列编号可以分为
SEQUENTIAL带自增序列编号由父节点维护非SEQUENTIAL不带自增序列编号默认情况
持久节点PERSISTENT
持久化znode节点一旦创建这个znode节点存储的数据不会主动消失除非是客户端主动delete。
持久顺序节点PERSISTENT_SEQUENTIAL
自动增加自增顺序编号的znode节点比如ClientA去zookeeper service上建立一个znode名字叫做 /zk/conf指定了这种类型的节点后zk会创建 /zk/conf0000000000ClientB再去创建就是创建 /zk/conf0000000001ClientC是创建/zk/conf0000000002以后任意Client 来创建这个znode都会得到一个比当前zookeeper命名空间最大znode编号1的znode也就说任意一个Client去创建znode都是保证得到的znode编号是递增的而且是唯一的znode节点。
临时节点EPHEMERAL
临时znode节点Client连接到zk service的时候会建立一个session之后用这个zk连接实例在该session期间创建该类型的znode一旦Client关闭了zookeeper的连接服务器就会清除session然后这个session建立的znode节点都会从命名空间消失。总结就是这个类型的 znode的生命周期是和Client建立的连接一样的。比如ClientA创建了一个EPHEMERAL 的/zk/conf 的 znode 节点一旦ClientA的zookeeper连接关闭这个znode节点就会消失。整个zookeeper service命名空间里就会删除这个znode节点。
临时顺序节点EPHEMERAL_SEQUENTIAL
临时自动编号节点znode节点编号会自动增加但是会随session消失而消失。
注意点
创建 znode 时设置顺序标识znode 名称后会附加一个值顺序号是一个单调递增的计数器由父节点维护在分布式系统中顺序号可以被用于为所有的事件进行全局排序这样客户端可以通过顺序号推断事件的顺序EPHEMERAL 类型的节点不能有子节点所以只能是叶子结点客户端可以在 znode 上设置监听器
二、节点状态
每个节点除了存储了数据内容的同时还存储了节点本身的一些状态信息我们在使用get命令获取数据节点时就能获取到这些信息。Zookeeper把这些信息封装在Stat类中
状态属性说明czxid表示该节点被创建时的事务IDmzxid表示该节点最后一次被更新时的事务IDctime表示该节点被创建的时间mtime表示该节点最后一次被更新的时间version数据节点版本号cversion子节点的的版本号aversion节点的ACL版本号ephemeralOwner创建该临时节点的会话sessionID持久节点值为0dataLength数据内容的长度numChildren当前节点的子节点个数pzxid表示该节点的子节点列表最后一次被修改时的事务ID
三、节点版本
每个数据节点具有三种类型的版本信息对数据节点的任何更新操作都会引起版本号的变化
版本类型说明version当前数据节点数据内容的版本号cversion当前数据节点子节点的版本号aversion当前数据节点ACL变更版本号
Zookeeper中节点版本表示的是对数据节点的数据内容、子节点列表或是ACL信息的修改次数以version为例即使前后两次变更并没有使得数据内容的值发生变更version的值依然会变更。
据内容、子节点列表或是ACL信息的修改次数以version为例即使前后两次变更并没有使得数据内容的值发生变更version的值依然会变更。
而version属性是用来处理并发控制实现乐观锁的写入校验的。在进行一次setDataRequest请求处理时首先就会进行版本检查Zookeeper会从setDataRequest中获取到当前请求的版本version同时从数据记录nodeRecord中获取到当前服务器上该数据的最新版本currentVersion进行比对如果两个版本不匹配则会抛出异常。