当前位置: 首页 > 网络应用技术

Zookeeper源代码13群集数据同步(广播模式)过程原理分析

时间:2023-03-06 18:47:54 网络应用技术

  欢迎大家注意github.com/hsfxuebao。我希望这对每个人都会有所帮助。如果您认为有可能

  在前几篇文章中,已经分析了如何建立通信连接的ZK群集。对于并使用FLE选举算法来完成选举,将从本文中分析,该文章大致分为四个部分:

  本文用作开胃菜。首先,通常引入数据同步过程的原理,以及流程图和其他辅助分析和对整体过程的理解的使用。当然,在选举过程之后,SID最大的机器C已成为集群的领导者,根据源代码级别的B和C对以下文章进行了分析。B和C是追随者。

  在此过程中,观察者的角色也没有分析。将来,将来可以单独分开一两个文章,以分析观察者在集群中的作用以及如何在源代码级别运行。

  注意:本文基于ZK版本3.7分析。

  同时建立沟通的过程可以被视为向中央王朝的中央王朝致敬的过程,也就是说,每个追随者都积极向领导人发送连接请求。领导者在收到每个追随者机器的请求后接收相应的处理器。这些处理器可能被视为中央王朝发送的接收。当然,这必须由一系列逻辑确定,以确定领导者机器是否是真正的合格领导者。您需要获得每个追随者的支持和验证。否则,篡夺皇帝,当然,ZK集群比这简单得多。

  一般交流过程的角色和互动关系如下:如下:

  对于过程和注意点,您需要具体解释:

  领导者和追随者之间的沟通建立主要是插座通信。其中大多数是固定的异步即时消息传递。因此,如果没有例子,那将是令人头晕的。可以说,如果选举成功,仍然需要一些旧数据需要同步。

  通信交互过程的建立仍然是原始机器A,B和C。一般流程图如下:

  整个过程更为复杂,因为插座即时消息涉及两台机器,每个接收方法过程都会阻止该过程。因此,需要理解整个过程。应该注意的是,LearnerHandler对象和追随者对象之间的套接字通信介质是Quorumpacket clusterPackage对象,将集体称为消息。

  从数字可以看出,总共有26个流,但总的来说,整个过程中总共有7个阶段:

  在整个过程中,它可以分为三个角色过程:`

  接下来,将根据图的右侧箭头方向分析上述七个主要阶段,因为该过程可能描述了机器之间的通信过程。特定过程分析如下:

  在领导者和每个追随者之间建立通信的过程已经经历了26个步骤。应当指出的是,超过一半的机器响应领导者的机器,这意味着,如果是三个机器A,B和C,C,C,C,仅需要接收A或B的响应,以及C的呼叫机器本身以完成验证。

  沟通过程的建立已经完成,将分析领导者以接收客户请求过程。

  刚刚完成此过程之后,现在领导者机器和特定追随者机器的学习者对象已经建立了独家频道通信。接下来,分析领导者字符请求收到ZK客户端请求的请求之后的特定过程。

  在特定分析之前,请查看领导者机器中的请求处理链。在阅读了单个机器ZK接收客户端请求处理过程之后,您可以知道RequestProcessor链是ZK处理请求,群集数据同步和其他进程的核心过程。它也嵌入了处理链中。

  领导者机器请求处理器处理链:

  在图中,框表示普通对象。圆形帧代表线程对象。有七个RequestProcessor接口实现类。Leaderzookeeeeeeeeeeeeeeeererver对象负责创建实施类并建立请求处理器处理链。每个RequestProcessor接口的实施类的一般效果如下:

  在Leader Machine中的RequestProcessor处理链具有一般功能效果之后,它将在领导者接收ZK客户端请求时开始分析处理过程。一般流程图如下:

  通常,此过程将涉及三个字符:领导者,追随者和观察者,但是现在我们现在正在分析领导者和追随者的两个主要角色,观察者忽略了它。代表性领导者机器的操作过程在图中开始,并且代表追随者执行的操作过程从F开始。图片中的领导者和跟随对象的交互是由LearnerHandler执行的。

  从数字可以看出,数据同步的完成分为三个阶段:

  这次,Leader收到了请求消息,因此该过程中领导者的请求过程必须负责主要处理。追随者中的一些请求处理器仅完成了简单的ACK响应,日志快照保存和其他操作。

  领导者机器接收ZK客户端请求,并同步领导者机器以接收ZK客户端请求并通过简单的提案ack-commit进程在群集中同步。,集群已完成数据同步。数据同步的成功徽标是完成将请求写入日志文件的请求。实际上,没有效果(仅限于请求请求)。

  请求请求请求在ZK群集中的请求的参与受到限制。与单个计算机ZK服务器不同,该机器在收到请求后会收到整个过程。根据该机器再次接收请求逻辑后,这仅是因为Leader未收到最终最终RequestProcessor直接退出,而追随者将回复发送请求请求的ZK客户端。

  在分析追随者机器接收ZK客户端的请求之前,有必要了解其RequestProcessor处理链之间的关系,如下所示:

  

  追随者收到请求有点特别。由于ZK群集的特征以领导者为中心,因此ZK客户端通过的请求必须通过Leader Machine并将消息从领导者发送到每台计算机。

  原始https://juejin.cn/post/7100930577016045599当领导者接收请求请求时,它进入熟悉的过程:领导者从ZK客户端接收请求请求处理过程。向领导者的请求数据等同于输入刚刚分析的请求请求处理过程,但最后一个FinalRequestProcessor处理器。执行相应的恢复。

  一般流程图如下:

  与请求请求相比,追随者的处理过程只有一个阶段,也就是说,有四个阶段:

  您可以看到追随者收到了ZK客户端的请求,而领导者接收过程实际上与处理过程相似,但是追随者收到了向领导者的附加请求。在理解了接收请求请求处理过程的领导者之后,我去看了追随者接收处理处理处理过程。该过程将要简单得多。

  接下来,详细分析处理过程。从F4-F5流程中,请求处理过程将通过领导者接收。

  只要领导者收到请求并执行相应的响应,分析追随者接收请求的请求的过程很容易,因为追随者接收请求的过程是领导者接收请求过程的包装。追随者实际上没有参数数据。同步核心进程只会被动地同步消息,这确实反映了领导者和追随者之间的关系。

  在对领导者和追随者之间建立通信连接的先前分析中,最终在领导者对象中提到了Lead()方法末尾的领导者对象是一个死周期,可以检测群集中的每台机器。如果在集群中,则如果群集与机器的一半,则死亡周期将跳出选举过程。

  簇之间的心跳检测非常简单,过程如下:

  这是一个简单的领导者,向每个追随者发送消息。收到消息后,追随者响应Ping消息。该过程如下:

  簇之间的心跳检测是如此简单。应当指出的是,收到LearnerHandler的任何消息后,TickofNextackDeadline属性将更新为tick+Synclimit,因为收到消息意味着机器是正常的。

  先前分析了支架ZK服务器和ZK客户端的心跳检测过程的原理,但是群集ZK服务器和ZK客户端的心跳检测与架子 - alone -Alone:集群的ZK Server会话的到期时间由领导者维护。其他关注者或观察者只保存一个会话副本。每当群集之间的ping消息与学习者角色之间的互动时,会话副本将同步到领导者机器。与其他群集(例如其他机器)相似,该机器的操作更加方便,可以理解所有领导者的操作。

  过程图如下:

  上图中的过程看起来很混乱,因为A,B,F,P,T和L的角色有六个不同的角色,但这已经是ZK Client Session heartbeat Dinceion的ZK群集的简单流程图。DON'感觉很复杂。上图可以大致分为三个不同的功能块:

  在了解途中三个功能块的一般函数之后,您可以轻松理解上面的图片。这无非是创建实际会话的实际会话集合的对象。Sessessnapshot同步领导者。特定过程分析如下:

  在这一点上,本文的任务基本完成了。本文介绍了集群中关键点的过程原理。鉴于内容过多,源代码分析已发布到以下文章中。

  Zookeeper 3.7版本GitHub源代码注释分析

  ## ZK源代码分析系列

  Zookeeper原理和源代码学习系列Zookeeper学习系列Zookeeper源代码系列

  原始:https://juejin.cn/post/7100930577016045599