Algorithm 在一个有leader的异步分布式系统中,如何找到到leader的距离

Algorithm 在一个有leader的异步分布式系统中,如何找到到leader的距离,algorithm,asynchronous,graph-algorithm,distributed-computing,distributed,Algorithm,Asynchronous,Graph Algorithm,Distributed Computing,Distributed,需要考虑的事情 这是异步的,因此存在竞争条件 图是无向的 节点的数量和直径是未知的 每个节点只知道它的邻居和领导者 我的第一个策略是等待,直到我收到来自所有邻居的消息,并在广播前取min,但这只会导致引线周围的第一层(距离=1)接收消息,因为它们不会收到来自真实距离为2的节点的消息 我假设邻居之间的每条边的长度为一。让每个节点维护到引线的路由,不一定是最短的(最初为空)。让每个节点在找到一条可行的路线后,立即将路线和其所有邻居的列表发送给这些邻居 最初,领导者的邻居将发送他们的路线(一跳)。

需要考虑的事情

  • 这是异步的,因此存在竞争条件
  • 图是无向的
  • 节点的数量和直径是未知的
  • 每个节点只知道它的邻居和领导者

我的第一个策略是等待,直到我收到来自所有邻居的消息,并在广播前取min,但这只会导致引线周围的第一层(距离=1)接收消息,因为它们不会收到来自真实距离为2的节点的消息

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

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

一旦一个节点有一条到前导节点的路由,它就会将该路由连同其邻居列表一起发送到该路由上的下一跳节点,下一跳节点将根据路由本身重新发送该路由及其邻居列表,所以我们知道,在路由上的意见分歧不会导致消息无限期地循环发送

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


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

您的问题非常不清楚。图片或代码示例将大大有助于我们理解您的问题。“一个节点在接收到它的真实距离之前,接收到的距离可能比它到引线的实际距离大”这句话假设了一大堆我们没有的上下文。没有上下文,就不可能提供有用的答案。@JimMischel谢谢你让我知道。我应该把课文说得更清楚些。我认为标题“说了一切”只是为了帮助人们避免答案中的错误,但我错了,我需要澄清这两个方面。有趣的想法。对于任何非先导节点,是否将所有路由消息重新传输到其第一次从中接收路由的节点?如果是,您能否更具体地说明终止条件?领导者如何知道自己收到了来自最远节点的消息?如果不是这样,那么如果两个节点共享一个节点到leader,那么其中一个节点将丢失。我认为每个非leader节点发送一条消息就足够了,该消息给出了它的邻居和到leader的路由,并将从其他节点接收到的任何消息转发给领导者。我添加了一段详细描述领导者何时知道自己拥有所需的所有信息,以及我认为这样做有效的原因。