Zookeeper是一个分布式的,开放源代码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等。
【角色】
Zookeeper中的角色主要有以下三类:
- 领导者(Leader):负责进行投票的发起和决议,更新系统状态;
- 跟随者(Follower):用于接收客户请求并向客户端返回结果,在选主过程中参与投票;
- 观察者(Observer):可以接收客户端连接,将写请求转发给leader节点。但Observer不参加投票过程,只同步leader的状态。Observer的目的是为了扩展系统,提高读取速度;
【系统模型】
Zookeeper系统模型如下图所示:

- 数据模型:使用了“数据节点”的概念,称ZNode,是最小单元,每个ZNode上都可以保存数据,同时还可以挂载子节点。
- 节点类型:持久(PERSISTENT)、临时(EPHEMERAL)、顺序(SEQUENTIAL)。四种组合节点类型:持久、持久顺序、临时、临时顺序。
- 版本类型:当前数据 节点内容(version)、子节点(cversion)、acl(aversion),version表示的是对数据节点内容的变更次数。
- watch机制:主要包括客户端线程、客户端WatchManager和Zookeeper服务器三部分。
工作流程如下:客户端在Zookeeper服务器注册Watcher的同时,会将Watcher对象存储在客户端的WatchManager中。当Zookeeper服务器触发Watcher事件后,会向客户端发送通知,客户端线程从WatchManager中取出对应的Watcher对象来执行回调逻辑。
【设计目的】
Zookeeper中的设计目的包含以下几点:
- 最终一致性:client不论连接到哪个server,展示给它都是同一个视图,这是Zookeeper最重要的性能;
- 可靠性:具有简单、健壮、良好的性能,如果消息被一台服务器接受,那么它将被所有的服务器接受;
- 实时性:Zookeeper保证客户端将在一个时间间隔范围内获得服务器的更新信息,或者服务器失效的信息。但由于网络延时等原因,Zookeeper不能保证两个客户端同时得到刚更新的数据,如果需要最新数据,应该在读数据之前调用sync()接口;
- 等待无关:慢的或者失效的client不得干预快速的client的请求,使得每个client都能有效的等待;
- 原子性:更新只能成功或者失败,没有中间状态;
- 顺序性:包括全局有序和偏序两种。全局有序是指如果在一台服务器上消息a在消息b前发布,则在所有Server上消息a都将在消息b前被发布;偏序是指如果一个消息b在消息a后被同一个发送者发布,a必将排在b前面。
【原理】
Paxos算法:一种基于消息传递且具有高度容错特性的一致性算法。需要解决的问题是如何在一个可能发生异常的分布式系统中,快速且准确地在集群内部对某个数据的值达成一致,并且保证不论发生什么异常,都不会破坏整个系统的一致性。
Zookeeper没有直接采用Paxos算法,而是采用了ZAB一致性协议。
【ZAB核心定义】
Zookeeper Atomic broadcast protocol(ZAB)Zookeeper原子广播协议,其核心定义:事务请求的处理方式。如下所述:
- 所有事务请求必须由一个全局唯一的服务器来协调处理,称为leader服务器,而余下的其他服务器称为follower服务器。
- Leader服务器负责将一个客户端事务请求转换成一个事务提议,并将该提议分发给集群中所有的follower服务器。
- 之后Leader服务器等待所有follower服务器的反馈,一旦超过半数的follower服务器进行了正确的反馈后,那么leader会再次向所有的follower服务器分发commit消息,要求其将前一个提议进行提交。
【ZAB基本模式】
Zookeeper Atomic broadcast protocol(ZAB)Zookeeper原子广播协议,其包含两种模式:崩溃恢复和消息广播。如下所述:
- 当整个服务框架在启动过程中,或是当leader服务器出现网络中断、崩溃退出与重启等异常情况时,ZAB协议就会进入恢复模式并选举产生新的leader服务器。
- 当选举产生了新的leader服务器,同时集群中已有过半的机器与该leader服务器完成了状态同步之后,ZAB协议就会退出恢复模式。
- 当集群中已经有过半的follower服务器完成了和leader服务器的状态同步,那么整个服务框架就进入了消息广播模式。
【应用场景】
- 分布式应用配置管理:将数据发布到zk节点上,供订阅者动态获取数据,实现配置信息的集中式管理和动态更新。
- 命名服务:通过调用zk的create node api,能够很容易创建一个全局唯一的path,这个path就可以作为一个名称。
- 分布式通知/协调:其特有的watcher注册与异步通知机制,能够很好的实现分布式环境下不同系统之间的通知与协调,实现对数据变更的实时处理。
- 分布式锁:此得益于Zookeeper为我们保证了数据的强一致性。
相关文章:
-
2021-08-31
-
2021-12-16
-
2021-05-05
猜你喜欢
-
2021-09-12
-
2021-10-27
-
2021-12-30
-
2021-04-29
相关资源
-
下载
2021-06-06
-
下载
2023-02-01
-
下载
2023-01-08