在具有领导者的异步分布式系统中,我如何找到与领导者的距离

In an asynchronous distributed system with leader, how do I find distance to leader

需要考虑的事项

我的第一个策略是等到我收到所有邻居的消息并在广播前取最小值,但这导致只有领导者周围的第一层(距离=1)收到消息,因为他们会还没有收到来自真实距离为 2 的节点的消息。

我假设邻居之间的每条边的长度为一。让每个节点维护一条通往领导者的路线,不一定是最短的(最初为空)。让每个节点在有通往领导者的可行路线后立即将路线和所有邻居的列表发送给这些邻居。

最初,leader 的邻居将发送他们的路由(一跳)。这将导致距离两跳的节点计算路由并将其发送出去。在 N 步之后,距离领导者 N 个节点将至少有一条到它的路线,不一定是最短的。

一旦一个节点有一条通往领导者的路由,它就会将该路由连同其邻居列表发送到该路由上的下一跳节点,该节点将重新传输它及其邻居列表,被发送根据路由本身,所以我们知道路由的不同意见不会导致消息无限循环发送。

领导者知道它的邻居,所以它知道它的所有邻居何时向它发送此信息,并且通常它有足够的信息知道它何时收到来自图中所有节点的报告。然后它可以汇集所有最短路线报告中的邻居列表,以计算出从每个节点到领导者的正确最短路线,并将承载该路径的消息发送到图中的每个节点。

在每个时间点,领导者都有一组节点,它从中接收信息(到领导者的路由和邻居列表)和一组它知道存在的节点(它自己的邻居和其他人提到的邻居它收到的消息中的节点)。当它从中接收到信息的节点集与领导者知道存在的节点集相同时,它拥有所需的所有信息。如果有任何其他节点不为领导者所知,请考虑从此类节点到领导者的路由。当您前往领导者时,您最终会遇到领导者或领导者本身已知的节点。考虑第一个这样的节点。要么领导者知道它的邻居,在这种情况下领导者知道一个未知节点存在但它还没有它的邻居列表,要么领导者知道该节点存在但不知道它的邻居。在任何一种情况下,领导者已知的节点集都大于领导者具有邻居列表的节点集,因此领导者知道不要停止收集消息。