跳转至

Zookeeper 简介

时间:2018-02-26 14:44:10

参考:

  1. 《从Paxos到Zookeeper分布式一致性原理与实践》 --倪超

Zookeeper 简介#

Zookeeper 特性#

Zookeeper大致有下面几个特性,对Zookeeper的运用也都是运用这些特性解决实际的问题:

  1. 节点类型:

    • 临时节点:客户端和服务端之间的Session过期之后节点会自动消失。
    • 持久节点:创建节点之后,节点就会一直存在,除非手动删除。
    • 临时顺序节点:拥有临时节点的特性,同时会根据创建的顺序给节点添加一个编号(编号作为节点名字的一部分)。
    • 持久顺序节点:拥有持久节点的特性,同时会根据创建的顺序给节点添加一个编号(编号作为节点名字的一部分)。
  2. Watcher机制:节点数据变更注册时,监听该节点的的Watcher都会被通知。子节点列表变化监听该节点的Watcher也会被通知。

  3. 多个客户端同时创建一个节点,保证只有一个客户端可以创建成功。

  4. 对于有N台服务器组成的集群,保证有小于等于(N/2)-1 台服务器不能提供服务时,集群的数据仍然保持完整。

Zookeeper 应用场景#

分布式系统配置文件动态更新#

利用Zookeeper的可靠性,以及Watcher机制。把配置数据保存在Zookeeper的节点下,系统启动的时候,从数据节点读取配置信息,同时在数据节点注册Watcher,之后当配置数据变更的时候系统就会得到通知,从而实现配置参数动态变更。

分布式系统的悲观锁#

系统创建同一个临时节点(防止客户端出现网络问题,或者客户端断开后节点一直存在,而导致死锁问题),创建成功的获取锁,任务执行完成之后删除节点,创建不成功的监听父节点列表变更事件,收到变更通知之后重新尝试创建。

分布式队列:#

  1. 系统在父节点下创建临时顺序节点。
  2. 获取父节点的子节点列表。如果创建的节点是最小节点,则执行业务逻辑。如果创建的节点不是最小的节点,则监听创建节点前面那一个节点的变更事件。
  3. 收到通知之后重复步骤2。

全局唯一ID#

需要Id的时候就在节点下创建 job- 的顺序子节点,然后会返回带包含编号的节点名字,这个名字就可以作为一个Id使用。

Master 选举#

参与选举的节点同时创建一个临时顺序节点,创建成功的节点为Master,其余节点监听节点变化,如果Master挂掉,则重新执行选举。