我目前正在使用免费的糕点DHT进行一些性能测试。FreePastry是在Java完成的开源DHT。

目标是在一定数量的节点下降时监视对DHT的影响。我的问题是我不确定消除节点的最佳方式。目前每个节点在我的机器上运行不同的端口。我正在使用来自Pastry API http://www.freepastry.org/freepastry/javadoc21a3/rice/pastry/pastrynode.html#destroy ()

我担心,这在模拟节点故障中可能是不现实的,以及我是否应该以不同的方式杀死节点,例如使用TCPKILL?

我正在运行Mac OS X Snow Leopard,并将有兴趣听取任何建议吗?

有帮助吗?

解决方案

有不同形式的节点故障。

最常见的是只需脱机的节点,因为运行DHT的应用程序被关闭。

国内Internet连接的动态IP的变化基本上具有齐全的效果,因为它使其无论是所有现有的路由表条目都无效,但遍布所有节点计数都不会下降。你失去了一个,你获得了一个新的。

其他常见问题是由于NATS的可达性问题。该节点的可见性可能取决于NAT类型以及您最近与其联系。

衰退的产生效果实际上可以非常复杂。首先,各个节点的正常运行时间通常遵循指数分布。许多人只能在短时间内使用,几天或几个月非常稳定。

假设您具有中度到长期节点的稳定核心,实际上构成了90%的网络。一个10%的相同节点不断突出,并且会导致一些开销流量,但它们不会危害网络。 你有很多潮流,但影响很小。

如果10分钟后10%的节点群体脱机,并且由非活动池中的全新节点组替换,然后您每10分钟丢失冗余的10%。如果节点之间的数据复制不会跟上该数据,或者甚至不存在数据,则会逐步衰减。 你也有很多潮流,而且影响了很大的影响。

我甚至不确定什么样的模拟将是最好的方式反映现实。我猜最逼真的约束只是具有固定池的潜在节点。这是安装了DHT实现的计算机。

每个节点那么将有时间平均保持时间,平均持续时间是多长时间的(其中两种参数彼此部分相关。长期时间节点通常没有很长的时间下降,因为他们可能永远都是开启)。每个节点独立地在这些参数上起作用。 实际上,一天中的时间也起到这里可以很容易地看到的角色: http: //dsn.tm.uni-karlsruhe.de/english/2936.php

所以......长话短说,刚刚运行和杀死一些节点随机不会给你一个关于DHT的恢复力的真实性结果,因为冲击会很大。

为技术部件,您可能希望在同一Java VM中运行所有它们,并使用多线程或非阻塞IO来减少在单独的VM中运行每个实例的开销。这也允许您以更现实的方式安排他们的上涨和下降时间。

由于您可以将多个IP分配给单个计算机,因此您应该能够简单地根据IP /端口计数运行计算机上的百分之份。但是该过程的资源消耗最终甚至最快的系统越来越快,因为很少很少的DHT实现实际上是为了比例缩放。

所以你可能需要在网络上运行它,每台计算机几千节节点来获得靠近逼真的东西。

或者您还求助于更多数学模拟而不是运行实际实现。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top