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

Zookeeper源代码14群集数据同步(广播模式)建立通信连接原理代码分析

时间:2023-03-05 17:02:40 网络应用技术

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

  上一篇文章分析了在ZK群集数据同步(广播模式)中建立通信连接的过程。本文分析了建立通信连接的源代码的逻辑。

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

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

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

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

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

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

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

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

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

  尽管代码的这一部分并不多,因为对象之间的通信太多,但源代码分析与过去有所不同,因为建立通信后,我将其分为七个阶段以分析它。因此,分析正在分析分析。在此过程中,它也将其分为七个阶段。每个阶段将分别分析。这更容易理解。同时,它还可以详细分析七个阶段的细节。

  建议同时跟进源代码同时进行跟进,以跟进上面的阶段,这更容易理解当前的进度和位置,以免丢失源代码分析主意。

  追随者和观察者在集群中共同称为学习者,但是由于此过程分析主要分析追随者,因此学习者可以在源代码中集体称为追随者。

  注意:此源代码分析与ZK的源代码不一致。为了促进理解,将按顺序修改某些代码,而不会影响整体逻辑。

  领导者和追随者的准备阶段,例如领导者,以创建一个LearnerCnxAcceptor对象,以接收其他机器的连接,而诸如追随器之类的机器开始连接领导者机器的LearneNXAcceptor对象,以实例化和与机器相对应的LearnerHandler对象。

  在此阶段,领导者将执行加载日志文件,以立即操作LearnerCnxAcceptor对象的操作。关键源代码如下:

  从Quorumpeer对象获取领导者配置的连接信息并连接。源代码如下:

  Front追随者使用插座连接领导者的插座服务器,并且socketServer由LearnerCnXacceptor对象管理,因此LearnerHandler对象的诞生位于Learnercnxacceptor线程对象中。源代码。源代码如下:如下:如下:

  在第一阶段之后,领导者通过LearnerCnxAcceptor线程对象接收了追随者连接请求,并实例化了与套接字对象相对应的维护对象LearnerHandler,然后正式启动领导者和追随者机器之间的通信连接过程。

  当追随者连接领导者机器的对象时,serversocket成功了,该对象将输入正式消息发送和接收过程。源代码如下:

  当在LearnerCnxAcceptor对象中创建LearnerHandler时,它只会维护相应的套接字对象,直到发生异常。源代码如下:

  实例化learnercnxacceptor对象以验证集群中的机器是否已成功交换了LeaderInfo和FollowerInfo消息后,领导对象将输入验证群集信息交换状态。源代码如下:

  在那个阶段,已发送已发送的消息已发送,并将执行时期信息同步结果。

  此过程非常简单,但是只需将Ackepoch消息发送给领导者,源代码就如下:

  学习者的过程也很简单。收到Ackepoch后,确认领导对象的访问信息以完成判决的一半以上并继续后续过程的方法。源代码如下:

  以前的追随者已将Ackepoch类型的消息发送给LeanerHandler。接下来,您只需要验证领导者对象是否验证集群的半机械声音。源代码如下:

  第四阶段的源代码稍长,因为先前的日志信息需要同步到跟随者,但是领导者不会参与此阶段。

  在此阶段,将在此阶段分析H5,H6和H7的过程,特殊注释过程的开始和结尾将在代码中特别注释。源代码如下:

  在分析了LearnerHandler的H5,H6和H7过程之后,F5和F6流程开始分析F5和F6流程。源代码如下:

  在前四个阶段之后,领导者向相应的追随者发送了同步消息,并且已经处理了追随者。之后,ACK响应需要追随者机器,表明该过程已经结束。

  追随者直接发送ACK响应。源代码如下:

  当LearnerHandler收到相应的追随者响应的相应ACK消息时,它将执行相应的处理并让领导者执行一半以上的验证。源代码如下:

  集群中的追随者响应ACK类型消息。收到后,LearnerHandler将调用领导者方法以进行一半以上的验证。源代码如下:

  第五阶段结束后,LeaderHandler将将相应的追随者流程发送到机器状态的末尾。

  这次使用先前的H8过程,分析H9进程,将UpTodate类型消息发送到相应的关注器的过程。源代码如下:

  发送更新类型消息后,LeanerHandler将接收并处理相应的追随者。源代码如下:

  在通信的前六个阶段之后,领导者最终完成了需要同步的信息,并完成了集群中每个追随者和领导者的ZXID和时期信息。保留当前的通信状态。

  从领导者开始分析其标准化代码的进入。代码的这一部分的作用是启动Zookeeperser对象并保持群集中机器的心跳检测。关键源代码如下:

  LearnerHandler的下一个标准化代码是保持领导者和各种铅机之间的通信。源代码如下:

  接下来,为追随者执行F9和F10进程,并启动ZookeeperServer对象并输入循环的归一化以接收LearnerHandler发送的消息。源代码如下:

  在这一点上,已经分析了建立通信连接的整个26个过程。下一个过程是ZK群集接收ZK客户端并在集群中执行同步操作的请求。

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

  ## ZK源代码分析系列

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

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