Zookeeper为分布式应用提供了统一命名服务、配置管理和分布式锁等分布式的基础服务。在解决分布式数据一致性问题上,Zookeeper并没有采用Paxos算法,而是使用了ZAB(Zookeeper Atomic Broadcast)协议。
Zookeeper是一个典型的分布式协调服务,分布式应用程序可以基于它实现数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master选举、分布式锁和分布式队列等功能。Zookeeper能够保证以下分布式一致性特征:
Zookeeper集群中主要有三种角色:Leader、Follower、Observer。Leader负责接收客户端的写请求,并将该请求以事务的方式提交给Follower执行。Follower负责接收读请求、参与Leader的选举和过半写成功策略。Observer也负责接收读请求,不需要参与Leader的选举和过半写成功,该角色设计的主要目标是用来在不影响写性能的前提下扩展Zookeeper的读性能。
会话指的是客户端和Zookeeper集群建立的连接,假设与客户端相连的服务器宕机,在没有超过sessionTimeout参数设置的前提下能够重新连接上另一台服务器,则之前的会话有效。
这里的数据节点除了机器节点之外,指的还是Zookeeper中的ZNode,ZNode以文件目录的形式进行组织。主要有两种形式:持久节点和临时节点。持久节点一旦创建除非手动移除否则不会删除,临时节点和会话的生命周期有关,会话启动创建的临时节点会在会话断开时自动删除。Zookeeper还可以为节点设置SEQUENTIAL属性,被设置了该属性的节点在创建时会自动在节点名后面加一个数字,该数字是由父节点维护的。
Zookeeper的每个ZNode都可以存储数据,对应于每一个ZNode,Zookeeper会维护一个叫做Stat的数据结构,Stat记录了这个ZNode的三个数据版本,分别是version(当前ZNode的版本)、cversion(当前ZNode子节点的版本)、aversion (当前ZNode的ACL版本)。
Watch机制是Zookeeper里面非常非常重要的一个机制。客户端可以在一些ZNode上注册一些Watcher,当一些特定的事件发生时,Zookeeper服务端会将该事件推送至感兴趣的客户端。
Zookeeper采用ACL策略来进行权限控制,主要有以下5种权限: