zookeeper介绍

节点

  • 持久节点(PERSISTENT):创建后会一直存在 zookeeper 服务器上,直到主动删除
  • 持久有序节点(PERSISTENT_SEQUENTIAL) :每个节点都会为它的一级子节点维护一个顺序
  • 临时节点(EPHEMERAL):临时节点的生命周期和客户端的会话绑定在一起,当客户端会话,失效该节点自动清理。
  • 临时有序节点(EPHEMERAL) :在临时节点的基础上多了一个顺序性。

会话

image

  1. Client 初始化连接,状态转为 CONNECTING(1)
  2. Client 与 Server 成功建立连接,状态转为 CONNECTED(2)
  3. Client 丢失了与 Server 的连接或者没有接受到 Server 的响应,状态转为 CONNECTING(3)
  4. Client 连上另外的 Server 或连接上了之前的 Server,状态 转为 CONNECTED(2)
  5. 若会话过期(是 Server 负责声明会话过期,而不是 Client ), 状态转为 CLOSED(5),状态转为 CLOSED
  6. Client 也可以主动关闭会话(4),状态转为 CLOSED

Stat 状态信息

每个节点除了存储数据内容以外,还存储了数据节点本身的 一些状态信息,通过 get 命令可以获得状态信息的详细内容

image

image

版本-保证分布式数据原子性

zookeeper 为数据节点引入了版本的概念,每个数据节点都有三 类版本信息,对数据节点任何更新操作都会引起版本号的变化。

zookeeper 为数据节点引入了版本的概念,每个数据节点都有三 类版本信息,对数据节点任何更新操作都会引起版本号的变化。

版本有点和我们经常使用的乐观锁类似。这里有两个概念说 一下,一个是乐观锁,一个是悲观锁

悲观锁:是数据库中一种非常典型且非常严格的并发控制策 略。假如一个事务 A 正在对数据进行处理,那么在整个处理 过程中,都会将数据处于锁定状态,在这期间其他事务无法 对数据进行更新操作。

乐观锁:乐观锁和悲观锁正好想法,它假定多个事务在处理 过程中不会彼此影响,因此在事务处理过程中不需要进行加 锁处理,如果多个事务对同一数据做更改,那么在更新请求 提交之前,每个事务都会首先检查当前事务读取数据后,是 否有其他事务对数据进行了修改。如果有修改,则回滚事务 再回到 zookeeper,version 属性就是用来实现乐观锁机制的 “写入校验”。

Watcher

zookeeper 提供了分布式数据的发布/订阅功能,zookeeper 允许客户端向服务端注册一个 watcher 监听,当服务端的一 些指定事件触发了 watcher,那么服务端就会向客户端发送一个事件通知。
值得注意的是,Watcher 通知是一次性的,即一旦触发一次 通知后,该 Watcher 就失效了,因此客户端需要反复注册 Watcher,即程序中在 process 里面又注册了 Watcher,否则, 将无法获取 c3 节点的创建而导致子节点变化的事件。


文章作者: 凌云
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 凌云 !
  目录