zookeeper是什么
zookeeper是一个基于主备架构的分布式协调框架。zookeeper提供了树型结构的文件系统和基于节点变化的通知机制。
zookeeper数据模型
zookeeper的数据模型类似于文件系统,具有树型结构,如下图所示,每一个节点称为Znode,每个节点以/分隔,节点可以存储数据。
zookeeper有四种基本节点类型:
- 持久节点 :一旦创建,如果不删除,永久存在的节点;
- 临时节点 :节点生命周期和相应会话绑定,会话断开连接,相应的临时节点也会被删除;
- 持久顺序节点 :和持久节点不同的是,会在节点名后加上顺序数字后缀,数字后缀和同一层级节点数量相关联,从0开始;
- 临时顺序节点 :和临时节点不同的是,会在节点名后加上顺序数字后缀。
zookeeper的Watch机制
zookeeper提供了一种基于节点变化的通知机制。用户可以指定某一节点进行监听,当节点数据或者其子节点有变化时,可以收到实时通知。
Watch的整体流程如下图所示,客户端向ZooKeeper服务端注册想要监听的节点状态,同时客户端本地会存储该监听器相关的信息在WatchManager中。zookeeper服务端监听的数据状态发生变化时,主动发送相应事件信息通知给相关会话客户端,客户端就会在本地响应式的回调相关Watcher的Handler。
watcher是一次性的,如果想一直监听,需要反复注册(curator框架实现了这一点,可以更好地上手使用)。
zookeeper使用场景
zookeeper的典型使用场景有数据发布/订阅,负载均衡,命名服务,分布式协调/通知,集群管理,Master选举,分布式锁,分布式队列等。
zookeeper在分布式系统的应用
zookeeper在大型分布式系统的应用主要有:hadoop和hbase。