基于生成树的选举算法

Posted by Xsp on July 12, 2018

论文:An optimal distributed algorithm for failure-driven leader election in bounded-degree networks

算法分为两个步骤: 1) 检测到当前leader故障的节点开始选举,以当前发起选举的节点作为根节点,发送广播消息,最终到达叶子节点,然后从叶子节点开始发送回复,在回复的过程中收集最大权重的节点,最后消息汇集到根节点,根节点确定最终选举的leader。

算法描述

算法分为两个步骤: 第一个步骤是:broadcast & reply;第二个步骤是:

broadcast & reply.

broadcast

发起选举的节点广播带有时间戳的 “Campaign-for-leader”(CPL)消息。在消息传递的过程中,生成生成树,根节点即是发起选举的节点。收到消息的节点把消息发送者当做父节点。最终,消息传递到达叶子节点,然后开始reply。(需要等到所有的叶子节点同时开始吗?)

reply

叶子节点回复父节点一个 voting 消息(相当于对上面的CPL消息的响应)。一个父节点收集到自己的所有的子节点的 voting 消息后,继续向上(父节点)回复。

对于同时有多个节点发起选举的情况,生成树中会有多个广播消息传递,那么某个节点收到多个CPL消息,此时,它选择时间戳最小的作为父节点,如果时间戳相同,则按照 发起者的id的字典序排序选择父节点。如果消息完全相同(id也相同?),把第一个收到的消息对应的发送者当做父节点。 在这个竞争中,假定我们认为有最小时间戳的CPL消息获胜,那么接下来会有两个操作:1)接管失败的CPL消息已经经过的节点,2)继续向下广播。

伪代码

一些符号: