【问题标题】:Routing table creation at a node in a Pastry P2P network在 Pastry P2P 网络中的节点创建路由表
【发布时间】:2012-10-12 05:29:51
【问题描述】:

这个问题是关于在基于 Pastry 的 p2p 网络中的节点处创建路由表的。

我正在尝试在单个 JVM 中模拟这种路由表创建方案。我似乎无法理解这些路由表是如何从第一个节点的加入点创建的。 我有 N 个独立节点,每个节点都有一个 160 位 nodeId 作为 SHA-1 散列生成,以及一个确定这些节点之间接近度的函数。假设第一个节点启动环并加入它。协议说这个节点此时应该已经建立了它的路由表。但是此时我在环中没有任何其他节点,那么它是如何开始创建它的路由表的呢?

当第 2 个节点希望加入环时,它会向第 1 个节点发送加入消息(包含其 nodeID),然后将其传递到环中已经存在的第 2 个节点最近的可用邻居。这些跃点有助于为这个新的第二个节点创建路由表条目。同样,在没有足够数量的节点的情况下,如何创建所有这些条目?

我刚刚开始查看 FreePastry 实现以获得这些答案,但目前似乎还不是很明显。如果有人可以在这里提供一些指示,那也将有很大的帮助。

【问题讨论】:

    标签: p2p dht


    【解决方案1】:

    无论如何,我对 Pastry 的理解并不完整,但这足以构建算法的或多或少的工作版本。也就是说,据我所知,我的实现功能正常。

    回答你的第一个问题:

    协议说这个[第一个]节点应该有它的路由表 此时设置。但我在环中没有任何其他节点 至此,它是如何开始创建路由表的呢?

    我通过首先创建节点及其状态/路由表解决了这个问题。当您考虑时,路由表只是有关网络中其他节点的信息。因为这是网络中唯一的节点,所以路由表是空的。我假设您有某种方法可以创建空路由表?

    回答你的第二个问题:

    当第二个节点希望加入环时,它发送一个 Join 消息(包含它的 nodeID)到它传递的第一个节点 已经跳到此第二个节点的最近可用邻居 存在于环中。这些跃点有助于创建路由 这个新的第二个节点的表条目。再次,在没有 足够多的节点,所有这些条目是如何创建的?

    您应该再看一下描述 Pastry 的 the paper(PDF 警告!);它很好地解释了节点加入和退出集群的过程。

    如果没有记忆,第二个节点发送的消息不仅包含它的节点ID,而且实际上使用它的节点ID作为消息的键。消息像网络中的任何其他消息一样被路由,这确保了它在 ID 最接近新加入节点的 ID 的节点处快速结束。消息通过的每个节点都将其状态表发送到新加入的节点,该节点用于填充其状态表。这篇论文解释了一些深入的逻辑,这些逻辑在使用它来填充状态表时考虑了信息的来源,我相信这种方式旨在降低计算成本,但在我的实现中,我忽略了这一点,因为它的实施成本会更多,而不是更少。

    但是,要具体回答您的问题:第二个节点将向第一个节点发送加入消息。第一个节点将其状态表(空)发送到第二个节点。第二个节点将状态表的发送者(第一个节点)添加到它的状态表中,然后将接收到的状态表中的适当节点添加到它自己的状态表中(在这种情况下没有节点)。第一个节点将消息转发到 ID 与第二个节点的 ID 更接近的节点,但不存在这样的节点,因此消息被视为“已传递”,并且两个节点都被视为目前正在参与网络。

    如果第三个节点加入并将加入消息路由到第二个节点,第二个节点将向第三个节点发送其状态表。然后,假设第三个节点的 ID 更接近于第一个节点的 ID,第二个节点会将消息转发给第一个节点,第一个节点会将其状态表发送给第三个节点。第三个节点会根据这些接收到的状态表构建它的状态表,此时它被认为参与了网络。

    希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-22
      • 2021-11-24
      • 2020-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多