一,四种类型的节点
PERSISTENT | 持久化节点 |
PERSISTENT_SEQUENTIAL | 顺序自动编号持久化节点,这种节点会根据当前已存在的节点数自动加 1 |
EPHEMERAL | 临时节点, 客户端session超时这类节点就会被自动删除 |
EPHEMERAL_SEQUENTIAL | 临时自动编号节点 |
二,四种类型的节点的创建方式
##PERSISTENT
[zk: localhost:2181(CONNECTED) 1] create /jin/y1 ""
Created /jin/y1
##PERSISTENT_SEQUENTIAL
[zk: localhost:2181(CONNECTED) 2] create -s /jin/y2 ""
Created /jin/y20000000002
##EPHEMERAL
[zk: localhost:2181(CONNECTED) 3] create -e /jin/y3 ""
Created /jin/y3
##EPHEMERAL_SEQUENTIAL
Command failed: java.lang.IllegalArgumentException: Path must start with / character
[zk: localhost:2181(CONNECTED) 4] create -s -e /jin/y4 ""
Created /jin/y40000000004
三,四种类型的节点的异同
##再次打开临时节点消失 -->本次session断开则不存在
##顺序节点是在节点后按顺序添加十位数字
[zk: localhost:2181(CONNECTED) 0] get /jin/y
y1 y20000000002
[zk: localhost:2181(CONNECTED) 7] get /jin/y1 cZxid = 0xb00000008 | [zk: localhost:2181(CONNECTED) 1] get /jin/y20000000002 cZxid = 0xb00000009 |
[zk: localhost:2181(CONNECTED) 1] get /jin/y3 cZxid = 0xb00000034 | [zk: localhost:2181(CONNECTED) 1] get /jin/y40000000012 cZxid = 0xb00000036 |
#ephemeralowner 当前节点的如果是临时节点,该属性是临时节点的事物ID
1,ephemeralowner =0x0 的是持久化节点,临时节点只能从节点名称辨别;
2,临时节点会在断开连接时消失;
3,除了ephemeralowner这个,其他的都一致。
题外话:至于顺序节点超过10位数怎么办的问题,我认为首先得服务器承受的住,这也是系统优化的一部分,一个目录下超过7位数已经可以让一个不错的服务器瘫痪了。
时隔两年,想想之前自己问的问题,官网上就解释很清楚了,zookeeper基于内存级的分布式协调服务,追求的是快速,不是数据库,不能做数据库,违背了设计初衷,虽然你确实可以这么用,但要知道它的资源是金贵的,既然说到这了,可以利用设置角色的方式,假设30台机器,25用于只读,5台用于主从。
之前项目是分别使用了两种节点,实现注册发现,业务服务启动时,会使用临时节点注册对应的服务名称到zk中,服务对应的接口是使用的永久节点。