在Pastry P2P网络中的节点处创建路由表

时间:2012-10-12 05:29:51

标签: p2p dht

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

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

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

我刚开始看一下FreePastry实现来获得这些答案,但目前看来并不是很明显。如果有人能在这里提供一些指示,那也会有很大的帮助。

1 个答案:

答案 0 :(得分:3)

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

回答你的第一个问题:

  

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

我首先创建了Node及其状态/路由表,从而解决了这个问题。当您考虑它时,路由表只是有关网络中其他节点的信息。由于这是网络中唯一的节点,因此路由表为空。我假设您有一些创建空路由表的方法吗?

回答你的第二个问题:

  

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

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

如果内存服务,第二个节点发送的消息不仅包含其节点ID,而且实际上使用其节点ID作为消息的密钥。消息的路由与网络中的任何其他消息一样,这可确保消息在ID最接近新连接节点的ID的节点上快速响起。消息传递的每个节点都将其状态表发送到新加入的节点,该节点用于填充其状态表。本文解释了一些深入的逻辑,它在使用信息来填充状态表时考虑了信息的来源,我认为这种方式旨在降低计算成本,但在我的实现中,我忽略了这一点,因为它实施起来要贵得多,而不是更少。

然而,要具体回答您的问题:第二个节点将向第一个节点发送加入消息。第一个节点将其状态表(空)发送到第二个节点。第二个节点将状态表的发送者(第一个节点)添加到其状态表,然后将接收状态表中的相应节点添加到其自己的状态表(在这种情况下,没有节点)。第一个节点将消息转发到ID更接近第二个节点的节点,但不存在这样的节点,因此消息被视为"已传送&# 34;,并且此时两个节点都被视为参与网络。

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

希望有所帮助。