zookeeper节点类型

ZooKeeper 节点是有生命周期的,这取决于节点的类型。在 ZooKeeper 中,节点类型能够分为持久节点(PERSISTENT )、临时节点(EPHEMERAL),以及时序节点(SEQUENTIAL ),具体在节点建立过程当中,通常是组合使用,能够生成如下 4 种节点类型。node


在持久、临时、顺序节点 中 临时节点是不能有子节点的,顺序节点是直接在你给的节点路径后边加上序列号(不是在下一级目录加序列号,好比你给的路径是 /v1/123  那么生成的顺序节点形如  /v1/12300000001)分布式


持久节点(PERSISTENT)


所谓持久节点,是指在节点建立后,就一直存在,直到有删除操做来主动清除这个节点——不会由于建立该节点的客户端会话失效而消失。

持久顺序节点(PERSISTENT_SEQUENTIAL)

这类节点的基本特性和上面的节点类型是一致的。额外的特性是,在ZK中,每一个父节点会为他的第一级子节点维护一份时序,会记录每一个子节点建立的前后顺序。基于这个特性,在建立子节点的时候,能够设置这个属性,那么在建立节点过程当中,ZK会自动为给定节点名加上一个数字后缀,做为新的节点名。这个数字后缀的范围是整型的最大值。


临时节点(EPHEMERAL)

和持久节点不一样的是,临时节点的生命周期和客户端会话绑定。也就是说,若是客户端会话失效,那么这个节点就会自动被清除掉。注意,这里提到的是会话失效,而非链接断开。另外,在临时节点下面不能建立子节点。

临时顺序节点(EPHEMERAL_SEQUENTIAL)
 能够用来实现分布式锁ui


客户端调用create()方法建立名为“_locknode_/guid-lock-”的节点,须要注意的是,这里节点的建立类型须要设置为EPHEMERAL_SEQUENTIAL。
客户端调用getChildren(“_locknode_”)方法来获取全部已经建立的子节点,注意,这里不注册任何Watcher。
客户端获取到全部子节点path以后,若是发现本身在步骤1中建立的节点序号最小,那么就认为这个客户端得到了锁。
若是在步骤3中发现本身并不是全部子节点中最小的,说明本身尚未获取到锁。此时客户端须要找到比本身小的那个节点,而后对其调用exist()方法,同时注册事件监听。
以后当这个被关注的节点被移除了,客户端会收到相应的通知。这个时候客户端须要再次调用getChildren(“_locknode_”)方法来获取全部已经建立的子节点,确保本身确实是最小的节点了,而后进入步骤3。生命周期

相关文章
相关标签/搜索