Zookeeper是一个分布式的,开放源代码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等。

    【角色】

        Zookeeper中的角色主要有以下三类:

            - 领导者(Leader):负责进行投票的发起和决议,更新系统状态;

            - 跟随者(Follower):用于接收客户请求并向客户端返回结果,在选主过程中参与投票;

            - 观察者(Observer):可以接收客户端连接,将写请求转发给leader节点。但Observer不参加投票过程,只同步leader的状态。Observer的目的是为了扩展系统,提高读取速度;

    【系统模型】

        Zookeeper系统模型如下图所示:

【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
相关资源
相似解决方案