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

Zookeeper源代码12-FLE(封装)算法集群选举原理进程源代码

时间:2023-03-07 00:43:21 网络应用技术

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

  上一篇文章已经分析了FLE算法之间建立通信结构的过程源代码,也就是说,在分析原理过程时,可以正常发送和接收各种机器。观看和理解:fle(fle(faceLelelect)算法集群选举通信原理和过程结构(类解释)和fle(fastlederelect)算法群集以构建群集内部通信配对源代码源代码分析源代码分析的源代码分析

  本文将根据源代码分析每台机器的选举状况和选举通信。它仍然使用上一篇文章的三个机器信息,并且机器之间的通信完成。机器信息如下:

  选举机制的整体流程图:

  接下来,开始对源代码的选举原则进行分析。

  无论是刚开始还是上一代的领导者,新领导者都将选举产生,并且在选举过程开始时的每台机器状态,并且将执行fastlederelectection选举对象的公共过程。该对象的公共过程。关键源代码如下:

  在上一篇文章中,我们了解到,每台机器将在集群中的每台计算机之间进行通信,而SendWorker是负责监视收集以发送消息的线程对象。以机器为例,它将在开始选举之前的集群中。收集肯定会将消息发送给B和C,SendWorker在启动启动启动关键源代码后将发送这些消息与B和C机器相同:如下:

  假设上述分析和通信对发送者将线程对象发送为机器A,则存储在内部的SID是机器C,即机器的发送器A将通信消息发送给目标计算机C和机器C的通信配对接收消息线程对象recvworker Will Will Will Will Will Will Will Will Will Will Will Will Will Will Will并处理它。

  然后,假设逻辑刚刚消失了,现在A机器已经发送了一条消息,并且转向RVWorker的RecVworker接收消息并执行相应的逻辑处理。关键源代码如下:

  到这个时候,两台机器之间的通信已经完成了信息交互。机器A已将消息发送到机器C以发送到机器C。当然,信息交互过程也与此示例相同。

  在上一篇文章分析中,fle选举算法对象与cuorumcnxmanager连接到管理对象之间的消息通信是由集合传达的,集合所操作的线程对象是WorkerReceiver,这是fle对象的内部类。关键源代码如下:

  查看此线程对象,此线程对象只是帮助逃离选举对象和QuorumcnxManager对象。

  该分析选举过程从这个地方开始。关键源代码如下:

  在lookforleader()方法中,如果将投票对象返回到投票对象,以解释该机器选举负责人的任务已经结束,则每台机器已连续修改了自己的状态并确定了自己的角色。C,最大的SID C被选为领导者,其余两台机器将是追随者。

  接下来,我们开始分析真正执行选举逻辑的方式。LookForleLeader():整个选举代码,我们拆除了3个说明:

  将自己投资为初始领导者之后,您将继续处理收到的投票信息:

  5.3.1.1验证您的投票和更适合Leadern的每个人。选举:外国通知所在的选举逻辑时钟

  LogicalClock.get():获取当前服务器选举的逻辑时钟

  在正常情况下,每个服务器的选举期应该相同,也就是说,它们处于同一一轮选举中,这是通过Current CurturnEpoch+1获得的,而不是同步。也有例外。例如,在第18届选举中,一个节点A被挂断了,其他节点完成了领导者的选举,但这并不需要很长时间,领导者再次悬而未决,因此他参加了第19届领导者选举,同时又参加了节点。A.Restore并加入领导者选举,然后是节点A的逻辑AS 18,而其他节点的逻辑是19。对于这种情况,节点A的逻辑A将直接更新为19,并参加了19届领导者选举。

  目前,投票所在的选举的逻辑时钟等于当前服务器选举的逻辑时钟。通过N.Electepoch和LogicalClock.get()的值,有三种情况:

  例如,已选择5台机器。两个已通知,另外两个不知道。目前,刚刚上任的领导人突然又挂了起来。

  接下来,我将尝试采取“ 3.1.2选举是否可以结束的判断”,但是如果选举刚刚开始,选举将结束一半的选票,因此绝对不会结束。打破开关,然后循环直到回收开始,删除通知,继续处理...

  终端断言:确定当前服务器推荐的领导者的支持率是否超过一半

  我在代码中清楚地听到了,我不会详细介绍。

  在上一系列的通信之后,集群机最终选出了领导者和追随者。在示例中,C是领导者。接下来,简要分析了LookForLeader()方法,以及如何通过选举过程在返回后输入数据同步过程。

  该代码仍然是上一篇文章中已经分析的Quorumpeer代码,但现在将通过确认领导者进行分析。关键源代码如下:

  在这一点上,选举过程已经结束,下一个过程已在领导者,追随者和观察者的特定对象中完成,即数据同步过程。在线人们被用来称其为广播模式,但是我更愿意称此数据同步过程流程流程过程。因为此过程的实际操作是在每台计算机之间和选举过程之间同步请求数据在源代码级别上也已广播,因此此数据同步过程不合适。数据同步过程将在下一篇文章中分析过程和源代码,并期待它。

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

  ## ZK源代码分析系列

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

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