了解如何在P2P Chord / Pastry类网络中管理消息路由方向

时间:2011-05-13 21:50:43

标签: networking routing p2p distributed-system

这是一个关于大型可扩展P2P网络方法的问题:逻辑环网ovrlay。

考虑P2P网络的背景。有N台计算机通过一个环相互连接。 每个节点都有一个记忆前导节点和后继节点的路由表。 当路由表仅存储前任和后继时,这是最简单的情况。 每个节点都提供一个id,它是一个数字。 环的组织使得在时钟方向上分配升序数。

所以我们可以有这样的情况:* - 12 - 13 - 45 - 55 - 180 - 255 - * 该网络有6个节点,它们以圆圈形式连接。

当一个节点必须向另一个节点发送消息时,使用路由表,如果通用节点有一个传入消息,它会查看dest地址,如果不在他的路由表中,则查找后继或前置节点。路由它。

现在让我们考虑这个例子。 在我的简单网络中,节点13想要向节点255发送消息。 由于每个节点只能看到前任和后继节点,因此每个节点都无法考虑全局网络,在P2P中,实际上节点只能看到网络的一部分。因此节点13决定采取:路由消息的位置(因为目的地不在其附近)?消息是否必须发送到45或12? (顺时针还是逆时针?)。

嗯,显然,发送到12是一个更好的决定,但节点13如何能够知道这一点?

最简单的解决方案是:始终顺时针方向,但在这种情况下,在很长一段时间内将会到达一个非常接近的节点.....当它落在角落后面时......

如何处理?

PS: 像Fingering这样的解决方案适用于基于顺时针路由的方法。 指法将路由表放入其他地址以创建跳转链接... 这是一个可以使用但只能顺时针路由的解决方案......

http://en.wikipedia.org/wiki/File:Chord_route.png

我想知道一个很好的解决方案,以便找到正确的路由方向......它是否存在? Chord如何处理这个问题?

谢谢。

1 个答案:

答案 0 :(得分:2)

如果每个节点都记住链接到下一个,第二个,第四个,第八个,依此类推,那么只需log(n)时间就可以找到任何节点。我相信这很快就不考虑你是否应该去cw或ccw。