蓝盟IT外包,ZooKeeper有多少种节点类型? 不要回答4种

发布者:上海IT外包来源:http://www.lanmon.net点击数:1700

蓝盟IT小贴士,来喽!
一、关于ZK的节点类型
大家如果也解决过ZK相关的问题的话,就会问“ZK有几个节点类型? ’你听说过吧。 大家通常背书的答案有四种! 但是,实际上ZK(3.6.2)服务器端支持以下7种节点类型。
耐用
永久顺序
临时
临时顺序
容器
永久TTL
持续顺序TTL
这七种类型在上一篇文章中也有提及,但故事没有展开。 在这次更新的单曲中,我想好好地再说一遍这7种类型的节点! 火箭队
二、简要介绍
2.1持续、暂时
持久性当然是使用最多的类型,也是默认的节点类型。 与永久节点相比,临时节点会在客户端会话结束时被删除。 通常可用于特定场景,如分布式解锁和运行状况检查。
2.2永久顺序、临时顺序
我们一起介绍这两种。 因为,ZK会在这两种节点之后自动添加数字后缀,但路径的数字后缀会保证唯一的。 这个数字后缀的应用场景可以实现分布式队列、分布式公平锁定等。
2.3容器
容器节点是3.5以后添加的节点类型,只需在调用create方法时将CreateMode指定为CONTAINER,即可创建容器的节点类型。 容器节点的表示形式与持久节点相同,不同之处在于ZK服务器端启动后,单独的线程进行扫描。 如果容器节点的子节点数量为0,则所有容器节点将自动删除此节点,但其他节点与永久节点没有区别。 官方评论中表示的使用场景是Containernodesarespecial  PurPosenodesuse  Fulforrecipessuchasleader,lock,etc  .据说可以在leader和锁定的场景中使用
2.4持久TTL、持久顺序TTL
关于持久和顺序这两个关键字,不用多说,这两种节点的重点是后面的TTL。 TTL是time  to  live的缩写,意味着生存时间。 简单地说,如果该节点下没有子节点,则超过TTL的指定时间后将自动删除。 特性类似于上面的容器节点。 只是容器节点没有超时时间。 但是,启用TTL需要额外的配置。 这我以前也说过。 配置必须在zookeeper.extendedTypesEnabled中配置为true。 否则,在创建TTL时会发生未实现的错误三、原理介绍
我们不介绍简单的持久性和临时节点,但在以前的一系列文章中已经介绍过了
3.1顺控关键字
客户端创建序列节点时,服务器端在知道当前节点是序列节点时,会自动为路径添加后缀。 后缀是父节点的cversion,表示创建的子节点的数量
if  (创建模式. is序列() ) )
path=pathstring.format  (
}
这么简单~
3.2容器、TTL关键字
这两个其实是一起的,服务端在启动时添加定时任务线程启动,定期扫描所有容器和TTL的节点,逐一判断子节点的数量和几个相关配置,决定是否删除。 首先整个逻辑是容器管理器,定时任务通过TimeTask实现,相关配置如下
配置项目默认值的说明
ZnO  de.container.checkintervalms  60000 (毫秒)定时任务检查的间隔
ZnO  de.container.maxperminute  10000与上述参数配合,为最小的检查间隔,各节点间隔必须相差(60000/10000 )毫秒(默认值为6毫秒)以上
如果ZnO  de.container.maxneverusedintervalms  0配置不为0,则当容器和TTL节点的上次更新时间与当前时间戳之差超过该值时将删除
四、总结
持久关键字:如果客户端不主动删除,节点数据将一直存在
临时关键字:客户端连接断开时,节点数据将一起删除
顺序键:服务器端自动为该节点加上数字后缀
容器:服务器端定期扫描这些节点,如果该节点下没有子节点或有其他条件,服务器端会自动删除节点
TTL  :需要其他配置才能启用。 和集装箱基本一样。 如果在TTL时间节点下不再创建子节点,则会将其删除,但如果创建了子节点,则会重置超时时间
文/上海蓝盟  IT外包专家
IT外包
>
400-635-8089
立即
咨询
电话咨询
服务热线
400-635-8089
微信咨询
微信咨询
微信咨询
公众号
公众号
公众号
返回顶部