ZNode
临时节点(EPHEMERAL)
临时顺序节点(EPHEMERAL_SEQUENTIAL)
有顺序、客户端断开会自动删除的节点
持久节点(PERSISTENT)
持久顺序节点(PERSISTENT_SEQUENTIAL)
Watches
客户端在节点上设置Watches,当节点状态发生变化时,监视器被触发通知客户端
公平锁
准备:每个客户端创建<b><i>临时有序 </i></b>节点
加锁:客户端获取节点列表,判断自己为<b>序列最小的节点</b>获取锁成功,其余客户端<b>监听</b>小于自己的前一个节点
<b>原子性</b>:当判断自己节点不为第一个节点,要添加对前一个节点的监听时,上个节点删除。所以需要<b>读取节点</b>和<b>添加监听</b>动作的原子性
释放锁:客户端执行完后断开连接,节点自动删除,<b>Watch</b>通知下个节点,下个节点的客户端判断自己是否为第一个节点。重复
[每个连接都是session,session会使用心跳检测连接是否正常]
非公平锁
准备:每个客户端创建<b><i>临时</i></b> 节点
加锁:zk创建临时节点,多个client只能有一个创建成功。创建成功的获取锁。其余client Watch成功节点
释放锁:客户端执行完后断开连接,节点自动删除,Watch通知其他client竞争锁
羊群效应:当释放锁后所有等待进程一起来创建节点,并发量很大。