Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cluster computing 什么';高级主选举算法比欺负算法有什么好处?_Cluster Computing_Distributed Computing_Apache Zookeeper_Paxos_Raft - Fatal编程技术网

Cluster computing 什么';高级主选举算法比欺负算法有什么好处?

Cluster computing 什么';高级主选举算法比欺负算法有什么好处?,cluster-computing,distributed-computing,apache-zookeeper,paxos,raft,Cluster Computing,Distributed Computing,Apache Zookeeper,Paxos,Raft,我读过当前的主选举算法,比如Raft、Paxos或Zab如何在集群上选举主,我不明白为什么他们使用复杂的算法而不是简单的欺负算法 我正在开发一个集群库,并对心跳消息使用UDP多播。每个节点加入一个多播地址,并定期向该地址发送数据报数据包。如果节点发现有一个新节点将数据包发送到此多播地址,则该节点将被简单地添加到集群中,类似地,当集群中的节点没有从节点获取任何数据包时,它们会将其从集群中移除。当我需要选择主节点时,我只需迭代集群中的节点,然后选择最旧的节点 我读过一些文章,这些文章暗示这种方法并不

我读过当前的主选举算法,比如Raft、Paxos或Zab如何在集群上选举主,我不明白为什么他们使用复杂的算法而不是简单的欺负算法

我正在开发一个集群库,并对心跳消息使用UDP多播。每个节点加入一个多播地址,并定期向该地址发送数据报数据包。如果节点发现有一个新节点将数据包发送到此多播地址,则该节点将被简单地添加到集群中,类似地,当集群中的节点没有从节点获取任何数据包时,它们会将其从集群中移除。当我需要选择主节点时,我只需迭代集群中的节点,然后选择最旧的节点

我读过一些文章,这些文章暗示这种方法并不有效,应该使用Paxos等更复杂的算法来选择主节点或通过心跳消息检测故障。我不明白为什么Paxos比传统的bully算法更适用于裂脑场景或其他网络故障,因为我可以很容易地找到节点的仲裁何时离开集群而不使用Raft。我看到的唯一好处是每个服务器必须处理的数据包数量;Raft中只有master发送心跳消息,而在这种情况下,每个节点都必须相互发送心跳消息。然而,我不认为这是一个问题,因为我可以简单地实现类似的心跳算法,而不改变我的主选举算法


有人能详细解释一下吗?

从理论角度来看,Raft、Paxos和Zab不是领导人选举算法。他们解决了一个叫做共识的不同问题

在您的具体场景中,区别如下。使用领导人选举算法,您只能保证最终有一个节点是领导人。这意味着,在一段时间内,多个节点可能会认为他们是领导者,因此,可能会像一个节点一样行事。相比之下,使用上面的一致性算法,您可以保证在一个逻辑时间瞬间最多有一个领导者

结果就是这样。如果系统的安全取决于单一领导人的存在,那么仅仅依靠领导人选举可能会遇到麻烦。考虑一个例子。节点从UDP多播接收消息,如果发送方是领导者,则执行A,如果发送方不是领导者,则执行B。如果两个节点在稍微不同的时间点检查集群中最早的节点,它们可能会看到不同的引线。然后,这两个节点可能会接收多播消息并以不同的方式对其进行处理,这可能会违反您希望保持的系统的某些安全属性(例如,所有节点要么执行a或B,但从来没有一个执行a,另一个执行B)

使用Raft、Paxos和Zab,您可以克服这个问题,因为这些算法创建了某种逻辑时代,每个时代最多有一个领导者


这里有两个注释。首先,定义了同步系统的bully算法。如果您真的按照Garcia Molina在论文中描述的那样实现它,我相信您可能会在部分同步系统中遇到问题。其次,Zab算法依赖于异步系统的一种欺负算法。通过比较其历史记录的长度来选择领导者(这将最小化系统的恢复时间)。一旦领导人当选,它会尝试启动Zab协议,这反过来会锁定领导人的纪元。

如果您的网络中有一个临时拆分,随后被密封,节点可能会不同意谁是最老的,对吗?