欺凌算法的描述通常不包括故障的实际检测。
我有一个欺负算法的工作实现,它使用选举本身来检测失败,而不是让失败触发选举。
简而言之,我的实现中的选举是按计划执行的,而不是在检测到故障时执行的。
显然,这意味着产生了网络流量,但它似乎是一个简单的解决方案,否则可能会变得复杂(例如,有一个单独的故障检测机制,它将有自己的网络流量)。
任何人都可以看到这个问题吗?
欺凌算法的描述通常不包括故障的实际检测。
我有一个欺负算法的工作实现,它使用选举本身来检测失败,而不是让失败触发选举。
简而言之,我的实现中的选举是按计划执行的,而不是在检测到故障时执行的。
显然,这意味着产生了网络流量,但它似乎是一个简单的解决方案,否则可能会变得复杂(例如,有一个单独的故障检测机制,它将有自己的网络流量)。
任何人都可以看到这个问题吗?
让我们假设您的分布式系统中有 4 个节点 A、B、C 和 D。让我们假设当前的领导者是 A。只有当节点 B、C 或 D 中的任何一个节点识别出协调器 A 没有响应时,才会发生选举。领导者 A 的失败可以理解为消息超时或协调者未能发起握手。与标准欺负算法中的算法不同,仅在协调器失败或引入具有更高进程 ID 的新节点时才会执行选举。
通常,当成员怀疑不再有领导者时,即在(本地)超时之后,开始选举领导者。通常,本地超时是不够的,还需要领导者的预期动作。
应用这种方案,不需要定期重新选举,也不需要特殊的故障检测。