Watches
定义
watch事件是一次性触发的,发送到客户端的。在监视的数据 发生变化时产生watch事件
设置watch方法
getData
exists
getChildren
关键点
一次性触发
1.客户端做了一次getData("/znode1", true)
2.节点/znode1发生数据变化或删除
3.客户端将收到/znode1的watch事件
4./znode1继续发生改变,不会再有watch发送
保证顺序
watch是异步发送给watchers的
zookeeper提供一种保证顺序的方法
dataWatch&childWatch
产生
getData()和exists()产生data watch
getChildren()引起child watch
触发(事件成功)
setData()触发data watch
create()触发data watch和它父节点上的child watch
delete()触发data watch和当前节点的child watch
watch维护
watch可靠性保证
watch与其他事件、watch、异步回复保持有序,Zookeeper客户端库确保任何分发都是有序的
客户端会在某个监视的znode数据更新之前看到这个znode的watch事件
watch事件的顺序由Zookeeper服务端观察到的更新顺序决定
注意事项
1.如果你收到watch事件后还想继续得到后续更改的通知,你需要再生成(设置)一个watch
2.znode会在收到事件和再次设置新事件之间发生了多次修改
3.使用session事件进入安全模式
ACL访问权限
实现方式
类unix的文件权限:用不同 位来代表不同的操作限制和组限制
一个由ACL指定的id集合和其相关联的权限
特点
一个ACL只从属于一个特定的znode
ACL权限不具有递归性
支持插件式认证方式
内建ACL模式
world
有独立id,anyone,代表任何用户
auth
不使用任何id,代表任何已经认证过的用户
digest
格式为username:base64, 用SHA1编码密码
ip
用客户端的ip作为ACL ID标识。ACL表达式的格式为addr/bits,addr中最有效的位匹配上主机ip最有效的位
Sessions
连接
客户端创建一个handle和服务端建立session
服务端返回客户端session id/session password
网络断开重新连接
客户端连接其他服务器,并发送session id/session password
服务器校验session id/session password
session timeout
session超时最小为2个ticktime,最大为20个 ticktime
客户端发送请求会使session保持活动状态。客户端会发送ping包(译者注:心跳包)以保持session不会超时。
3.2新增
ip:port后增加字符串
指明客户端命令运行的根目录地址,所有路径都相对于根目录来设置
这一特性在多用户环境下非常好用,每个使用zookeeper服务的用户可以设置不同的根目录。
SessionMovedException