zookeeper是一个分布式开源协调服务。为分布式应用提供一致性服务,可实现数据的发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、master选举、分布式锁和分布式队列等功能。可保证顺序一致性、原子性、可靠性、实时性、最终一致性。基于观察者模式设计的分布式管理框架,存储和管理注册节点的数据,当数据发生变化时通知注册者做出反应
特点
分支主题
1、一个领导者,多个追随者组成的集群;2、集群中只要有半数节点存活,就能正常提供服务;3、全局的数据具有一致性,每个追随者都保存了完整的数据副本;4、请求更新具有原子性,顺序性;5、实时性
文件系统+通知机制组成,提供了多层级的节点命名空间(Znode),节点都可设置关联数据。为保证高吞吐和低延迟,在内存中维护了这个树状目录结构,大小上限为1M。
主从节点状态同步:基于原子广播机制,称为Zab协议。
恢复模式:服务启动或领导奔溃后,进入恢复模式
广播模式:消息广播
通知机制
watcher机制
指zookeeper允许客户端的某个zone注册一个watcher监听,当服务端某个事件触发了这个watcher,将发送通知到注册的客户端,客户端根据通知状态和类型作出业务上的改变
工作机制
1、客户端注册watcher
2、服务端处理watcher
3、客户端回调watcher
特性:watcher的一次性、watche客户端回调串行、轻量级
应用场景
典型的分布式管理和协调框架,基于发布/订阅模式,通过对zookeeper中丰富的数据节点进行交叉使用,配合watcher事件通知机制,可非常方便的构建一系列分布式应用中涉及的核心功能
1、数据的发布/订阅:可实现数据配置中心的功能,znode存储数据,注册watcher,进行变更通知
2、负载均衡:用于服务注册成树形目录结构,维护服务可用列表,根据负载均衡算法(需要调用者自己实现)选择提供服务的服务器
3、命名服务:通过名字获取资源或服务的地址,利用ZK创建一个全局唯一路径
4、分布式协调/通知:监控znode节点,watcher机制
5、集群管理:首先明白集群管理的特性:是否有机器退出和加入;master选举。通过该目录下节点的新增和删除,代表机器的退出和加入;至于选举算法,可以根据机器加入的顺序,维护id列表,可选取编号最大的或最小的
6、master选举:确定机器的地位,通过一定的选举算法实现
7、分布式锁:基于zk的一致性文件系统,通过创建一个znode节点,创建成功获取锁成功,业务完成删除节点释放锁
8、分布式队列:同步队列:创建临时目录节点并监听数量;先进先出队列:出入队都有编号,可删除最小序号的节点进行消费即可
常见问题
1、全局递增的唯一ID表示所有的提议,根据数据库的两阶段提交过程来完成事物顺序的一致性
2、主节点的作用:分布式的环境中,有些业务逻辑只需在某个节点中进行,其它的节点共享这个结果,可大大减少重复计算,提高性能
3、跟dubbo有什么关系:zk可作为dubbo的服务注册中心,协调调度服务列表资源,提供负载均衡和命名服务等功能