zookeeper原理

zookeeper入门

zookeeper简介

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。最终,将简单易用的接口和性能高效、功能稳定的系统提供给用户

Zookpeeper的基本架构

img

Zookeeper数据模型

ZooKeeper数据模型的结构与Unix文件系统很类似,整体上可以看作是一棵树,每个节点称做一个ZNode。每个ZNode都可以通过其路径唯一标识,比如上图中第三层的第一个ZNode, 它的路径是/app1/c1。在每个ZNode上可存储少量数据。如图:

Zookeeper 特点

  • 顺序一致性:按照客户端发送请求的顺序更新数据。
  • 原子性:更新要么成功,要么失败,不会出现部分更新。
  • 单一性 :无论客户端连接哪个server,都会看到同一个视图。
  • 可靠性:一旦数据更新成功,将一直保持,直到新的更新。
  • 及时性:客户端会在一个确定的时间内得到最新的数据。

ZooKeeper典型应用场景

  • 数据发布与订阅 (我的业务用到这个特性,后面会有详细介绍)
    应用配置集中到节点上,应用启动时主动获取,并在节点上注册一个watcher,每次配置更新都会通知到应用。

  • 名空间服务
    分布式命名服务,创建一个节点后,节点的路径就是全局唯一的,可以作为全局名称使用。

  • 分布式通知/协调
    不同的系统都监听同一个节点,一旦有了更新,另一个系统能够收到通知。

  • 分布式锁
    Zookeeper能保证数据的强一致性,用户任何时候都可以相信集群中每个节点的数据都是相同的。一个用户创建一个节点作为锁,另一个用户检测该节点,如果存在,代表别的用户已经锁住,如果不存在,则可以创建一个节点,代表拥有一个锁。

  • 集群管理
    每个加入集群的机器都创建一个节点,写入自己的状态。监控父节点的用户会受到通知,进行相应的处理。离开时删除节点,监控父节点的用户同样会收到通知。

分享