`

Zookeeper中ZooKeeperServer们的分析

 
阅读更多

             最近在看ZooKeeper的源码,在zookeeper中用LeaderZooKeeperServer , FollowerZooKeeperServer和ObserverZooKeeperServer 这三个类来实现三种类型的服务器节点。

           他们之间的关系是这样的,我用viso画张图先:



       Zookeeper采用了责任链模式处理他们之间的各种请求,接下来我逐一分析他们处理请求的过程:

 

1.  LeaderZookeeperServer

LeaderZookeeperServer处理的过程的文字描述:

 

1、接收客户端的request请求

2、将会修改同步数据的request请求 转化为proposal,并保存。

3、向所有的follower发送proposal。

4、接收follower的ack。

5、统计收到的ack,如果某一个proposal的ack超过了半数,那么向所有follower发送commit 信令,并向所有observer发送inform信令,执行这个proposal的动作。

6、leader自己执行已经被commit的proposal所对应的操作,并回复结果。

 

我用一张图展示一下LeaderZookeeperServer的责任链:



 

 详细流程如下:



 

2.  FollowerZookeeperServer

FollowerZookeeperServer处理的过程的文字描述:

 

1、 发现leader。

2、 建立与leader的连接。

3、 向leader注册。(leader activation)

4、 与leader进行同步。

5、 无限循环

---读取从leader处接收到的信令。

---处理从leader处接收到的信令。

A、 如果是PROPOSAL信令(写请求),将此信令投递到FollowerZooKeeperServer的synProcessor。主要作用是回复leader一个ack。

B、 如果是COMMIT信令,将此信令投递到FollowerZooKeeperServer的commitProcessor。最终执行FollowerZooKeeperServer的commit函数。

C、 如果是SYNC信令,将此信令投递到FollowerZooKeeperServer的commitProcessor。commitProcessor直接将此信令转发给FinalRequestProcessor,将sync信令带的内容写入持久层。

 

 

我用一张图展示一下FollowerZookeeperServer的责任链:



 
详细流程如下:



  

 

3.  ObserverZookeeperServer
ObserverZookeeperServer处理的过程的文字描述:

 

1、 发现leader。

2、 连接到leader上,建立TCP连接。

3、 与leader进行同步,同步leader上已经被commit的proposal。

4、 无限循环,读取接收到得信令,处理信令。

1、如果是syn信令,调用ObserverZooKeeperServer的syn函数,投递到commitProcessor中。

2、如果是info信令,同样调用ObserverZooKeeperServer的commit函数,投递到commitProcessor中。

OserverZookeeperServer的责任链基本上与follower的相同如下,只是commitProcessor调用的commit函数里的处理不同:

 

 

我用一张图展示一下ObserverZookeeperServer的责任链:



 详细流程如下:

 


 最后看一下ZK的源码中对SyncRequestProposal的解释,秒懂:



 
 

ps:画图不易,转载请注明。

欢迎大家批评指正。

  • 大小: 292.9 KB
  • 大小: 263.6 KB
  • 大小: 163.3 KB
  • 大小: 163.6 KB
  • 大小: 425.1 KB
  • 大小: 320.9 KB
  • 大小: 333.9 KB
  • 大小: 418 KB
  • 大小: 381.6 KB
分享到:
评论

相关推荐

    zookeeper实战:ConfigServer代码样例

    本篇文章将聚焦于Zookeeper的一个典型应用——ConfigServer,通过分析具体的代码样例,深入理解其工作原理和实现方式。 一、Zookeeper简介 Zookeeper是由Apache软件基金会开发的开源项目,它是一个为分布式应用...

    zookeeper中文文档

    本文档的作者是百度在线网络技术(北京)有限公司的INF-DT-BQE刘少伟,文档基于Zookeeper 3.3.5版本的源码进行了深入的分析,提供了从安装部署到具体使用场景的详细说明。读者可以通过阅读本文档,了解Zookeeper的...

    zookeeper-server-client 简单例子

    Zookeeper 的设计目标是简化分布式环境下的数据一致性问题,使得在分布式系统中实现高可用性和扩展性变得更加容易。 **Zookeeper 的主要特点** 1. **原子性**:Zookeeper 的所有操作都是原子性的,一次操作要么...

    zookeeper配置文件.zip

    Zookeeper是Apache Hadoop项目下的一个子项目,它是一个分布式协调服务,被广泛应用于分布式计算、数据管理和...通过细致地分析和调整这些配置,我们可以优化Zookeeper的性能,提高整个分布式系统的可靠性和灵活性。

    zookeeper集群升级方案

    - `tickTime`:定义了Zookeeper中的时间单位,通常用于心跳检测周期。 - `initLimit`:初始化限制时间,Follower节点在该时间内完成与Leader的同步。 - `syncLimit`:同步限制时间,Leader在该时间内没有收到来自...

    zookeeper 3.6.3 源码下载

    2. **服务器端**:包括ServerCnxnFactory(连接工厂)、ZooKeeperServer(服务器主体)以及Leader/Follower/Observer(不同角色的服务器节点)的实现。 3. **客户端**:包括ClientCnxn(客户端连接)和ZooKeeper...

    zookeeper限制ip版

    总结,本文详细介绍了如何在Zookeeper 3.4.14版本中实现IP黑白名单功能,从需求分析到源码改造,再到功能测试,覆盖了整个开发流程,旨在帮助读者理解和实践Zookeeper的安全管理。通过这样的定制化改造,我们可以更...

    ZooKeeper3.4.9 windos和linux

    ZooKeeper,一个由Apache基金会开发的分布式协调服务,是许多大型分布式系统中的关键组件。3.4.9版本是ZooKeeper的一个稳定版本,提供了一系列增强功能和性能优化。在本文中,我们将深入探讨如何在Windows和Linux...

    zookeeper-3.8.0安装包下载

    4. 监控与调试:了解如何查看 Zookeeper 的运行状态,如使用 jmx 监控、日志分析等。 5. 客户端使用:学习如何编写 Java 或其他语言的客户端代码,与 Zookeeper 交互。 6. 高可用性与故障恢复:理解 zab 协议的工作...

    zookeeper3八本

    `jconsole`或`VisualVM`等工具可以帮助分析Zookeeper服务器的性能。 11. **故障排查**:遇到问题时,查看`logs/zookeeper.out`日志文件通常能获取错误信息。另外,使用`zkServer.sh dump`或`zkServer.cmd dump`命令...

    zookeeper3.6.0-linux版本

    ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。最终将简单易用的接口和性能高效、功能稳定的系统提供给用户。...

    zookeeper-3.4.6 eclipse

    为了运行Zookeeper服务器,你需要创建一个Java应用程序运行配置,主类为“org.apache.zookeeper.server.quorum.QuorumPeerMain”,并在“Program arguments”中输入Zookeeper配置文件的路径(例如“conf/zoo.cfg”)...

    prettyZoo,zookeeper window客户端

    "prettyZoo" 是一个针对Zookeeper的Windows客户端工具,它提供了方便的界面,使得用户可以更直观、快捷地查看和管理Zookeeper集群中的数据和配置。 **描述解读:** 描述中提到,"快速查看zookeeper内容" 指的是...

    zookeeper-3.4.12 linux

    在多台服务器上部署Zookeeper,形成集群,需要在每台机器的`zoo.cfg`中配置集群节点信息,如`server.1=ip1:port1:port2`。每个节点的`myid`文件需设置为对应服务器ID。 五、监控与维护 1. 状态检查:通过`zkServer....

    zookeeper入门练习demo

    2. **Zookeeper日志**:分析`logs`目录下的日志文件,了解服务运行情况和异常信息。 3. **JMX监控**:Zookeeper支持JMX(Java Management Extensions),可以与其他管理工具结合,如JConsole或VisualVM,对...

    C# 关于zookeeper主从选举的源码

    - 在Zookeeper中,每个节点(称为Server)都可以成为领导者或跟随者。选举的目标是确保只有一个节点作为领导者,负责处理客户端的所有写请求。 - 选举过程通常包括节点间的通信、投票、结果确认等步骤。当...

    zookeeper调优

    案例中展示了如何在`zkServer.sh`文件中配置JVM参数。通过设置`-server-Xms1024m-Xmx1024m`来指定JVM的堆内存大小。这种配置有助于提升Zookeeper的性能和稳定性。可以通过`jmap –heap [PID]`命令来检查JVM的实际...

    linux-ZooKeeper管理工具

    安装完成后,可以通过`zookeeper-server-start.sh`脚本启动服务,使用`zookeeper-server-stop.sh`停止服务。 2. 配置管理:ZooKeeper的配置文件是`conf/zoo.cfg`,包含了服务器模式(standalone或ensemble)、数据...

    Zookeeper-release-3.5.4 源码,部分有注释

    `org.apache.zookeeper.server.ZooKeeperServer`是Zookeeper服务器的核心类,处理请求和响应。 此外,`zookeeper-release-3.5.4`中还包括了测试用例,这为我们提供了很好的示例,了解如何与Zookeeper进行交互。例如...

    zookeeper-3.4.9的源码

    - `ZooKeeperServer`:Zookeeper服务器的核心实现,处理客户端的请求并更新内存数据。 - `DataTree`:数据树,存储Zookeeper中的所有节点数据。 - `ZKDatabase`:持久化数据库,用于保存Zookeeper的数据。 - `...

Global site tag (gtag.js) - Google Analytics