产品中心 面试官问:ZooKeeper 有几栽节点类型?别回应 4 栽啦

本文转载自微信公多号「HelloGitHub」,作者HelloGitHub。转载本文请有关HelloGitHub公多号。

一、关于 ZK 的节点类型

行家倘若刷过 ZK 有关面试题的话,就必定会刷到过 “ZK 有几栽节点类型?”,行家清淡背书的应案的话是:4 栽!但其实 ZK (3.6.2)服务端声援 7 栽节点类型,别离是:

根据近期发表的一项新研究,人类眼睛颜色的遗传,比之前人们所认为的要复杂得多。

C114讯 4月8日消息(颜翊)瑞芯微电子股份有限公司昨日发布了2020年度业绩快报。2020年,瑞芯微实现营业总收入18.63亿元,同比增长32.37%;实现利润总额3.18亿元,同比增长52.74%;实现归属于上市公司股东的净利润3.2亿元,同比增长56.31%;基本每股收益0.79元,同比增长43.64%。

挖贝网4月7日,共创草坪(605099)发布2021年一季度业绩预告:预计2021年第一季度实现营业收入与上年同期相比,将增加14,312万元到17,890万元,同比增加40%到50%。预计2021年一季度实现归属于上市公司股东的净利润为9,402万元至10,074万元,同比增加40%到50%。

阁楼是一个非常值得利用的空间产品中心,我们可以将它进行改造,打造成一个花房、书房。关于阁楼装修注意事项有哪些,下面跟着PChouse一起来了解一下吧。

对于喜爱小屏旗舰的消费者来说,苹果iPhone 12可能是目前为数不多的选择之一。不过在今年3月份,这些消费者多了一个选择,那就是魅族18。这款产品官方定义为“满血小屏旗舰”,已正式全渠道开售。

持久 持久挨次 一时 一时挨次 容器 持久 TTL 持久挨次 TTL

这 7 栽类型之前的文章中也有挑到过,但是并异国伸开讲。这次更新的单篇想要把这 7 栽类型的节点,认仔细真的讲一遍!Let's GO

二、浅易介绍 2.1 持久、一时

持久不必吾多说,是用的最多的一栽类型,也是默认的节点类型,一时节点相较于持久节点来说,就是它会随着客户端会话终结而被删除,清淡能够用在一些特定的场景,例如分布式锁开释,健康检查等。

2.2 持久挨次、一时挨次

这两栽吾放在一首介绍,由于他们相对于上面两栽的特性就是 ZK 会自行在这两栽节点之后增补一个数字的后缀,而路径 + 数字后缀是能保证唯一的,这数字后缀的行使场景能够实现诸如分布式队列,分布式公平锁等。

2.3 容器

容器节点是 3.5 以后新添的节点类型,只要在调用 create 手段时,指定 CreateMode 为 CONTAINER 即可创建容器的节点类型,容器节点的外现形态和持久节点是相通的,但是不同是 ZK 服务端启行后,会有一个单独的线程往扫描,一切的容器节点,当发现容器节点的子节点数目为 0 时,会自行删除该节点,除此之外和持久节点异国不同,官方注解给出的行使场景是 Container nodes are special purpose nodes useful for recipes such as leader, lock, etc. 说能够用在 leader 或者锁的场景中。

2.4 持久 TTL、持久挨次 TTL

关于持久和挨次这两个关键字,不必吾再注释了,这两栽类型的节点重点是后面的 TTL,TTL 是 time to live 的缩写,指带有存活时间,浅易来说就是当该节点下面异国子节点的话,超过了 TTL 指准时间后就会被自行删除,特性跟上面的容器节点很像,只是容器节点异国超往往间而已,但是 TTL 启用是必要额外的配置(这个之前也有挑过)配置是 zookeeper.extendedTypesEnabled 必要配置成 true,否则的话创建 TTL 时会收到 Unimplemented 的报错

三、原理介绍

单纯的持久和一时节点吾就不介绍了,之前的系列文章有讲

3.1 挨次关键字

客户端创建一个挨次节点的时候,服务端得知现在节点是挨次节点的时候会自行给路径添上后缀,后缀就是父节点的 cversion,代外创建子节点的个数

if (createMode.isSequential()) {    path = path + String.format(Locale.ENGLISH, "0d", parentCVersion); } 

就是这么浅易~

3.2 容器、TTL 关键字

这两栽其实能够放在一首讲,服务端在启行的时候会额外启行一个准时义务线程,会按期的扫描一切的容器和 TTL 的节点,一一判定子节点的数目以及一些有关配置,来决定是否删除,最先整个逻辑是在 ContainerManager 中,准时义务是由 TimeTask 实现的,有关的配置有

配置项 默认值 表明 znode.container.checkIntervalMs 60000(毫秒) 准时义务检查的阻隔 znode.container.maxPerMinute 10000 和上面的参数说相符成为最幼的检查阻隔,每个节点阻隔必须差 (60000 / 10000)毫秒(默认 6 毫秒)以上 znode.container.maxNeverUsedIntervalMs 0 倘若配置不为 0 的话,当容器和 TTL 节点末了一次更新的时间和现在时间戳的差超过这个值的话,也会被删除 四、幼结 持久关键字:客户端不主行删除的话,节点数据会不息存在 一时关键字:客户端连接断开后,节点数据会被一首删除 挨次关键字:服务端会自运动该节点添数字后缀 容器:服务端会按期扫描这些节点,当该节点下面异国子节点时(或其他条件时)服务端会自行删除节点 TTL:必要额外配置才能启用,基本和容器相通,当超过 TTL 时间节点下面都异国再创建子节点时会被删除,但是当创建子节点会重置该超往往间

【编辑选举】产品中心

用 C 说话理解 Linux 柔件库 Linux编制下源码编译升级gcc(6.5.0&11.1.0) 面向旧计算机的六栽轻量级 Linux 桌面环境 Linux编制中编译、链接的基石-ELF文件:扒开它的层层外衣,从字节码的粒度来追求 揭开Linux命令Bash history的奥秘面纱