gpt4 book ai didi

java - 在 DHT 中模拟节点故障

转载 作者:行者123 更新时间:2023-12-04 05:37:56 25 4
gpt4 key购买 nike

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

目标是在一定数量的节点宕机时监控对 DHT 的影响。我的问题是我不确定消除节点的最佳方法。目前,每个节点都在我机器上的不同端口上运行。我正在使用 Pastry API 中的 destroy() 方法销毁这些节点 http://www.freepastry.org/FreePastry/javadoc21a3/rice/pastry/PastryNode.html#destroy ()

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

我正在运行 Mac OS X snow leopard,有兴趣听取任何建议吗?

最佳答案

节点故障有多种形式。

最常见的是节点离线,因为运行 DHT 的应用程序已关闭。

家庭互联网连接的动态 IP 的更改本质上具有微妙的不同效果,因为它会使所有现有的路由表条目无效,但总节点数不会下降。你失去一个,你得到一个新的。

另一个常见问题是 NAT 导致的可达性问题。该节点的可见性可能取决于 NAT 类型以及您最近是否与它有过接触。

流失的结果实际上可能非常复杂。首先,单个节点的正常运行时间通常遵循指数分布。许多只能在短时间内使用,很少能保持稳定数天或数月。

假设您有一个稳定的核心,由中等至长生命周期的节点组成,这些节点实际上占网络的 90%。 10% 的相同节点不断出现和消失会导致一些开销流量,但它们不会对网络造成太大伤害。
你有很多流失,但影响很小。

如果 10% 的节点在 10 分钟后离线,并被非 Activity 池中的一组全新节点替换,那么您实际上每 10 分钟就会失去 10% 的冗余。如果节点之间的数据复制跟不上,甚至不存在,您的数据将呈指数衰减。
你也有很多流失,但影响巨大。

我什至不确定什么样的模拟会以最好的方式反射(reflect)现实。我想最现实的限制就是拥有一个固定的潜在节点池。那是安装了 DHT 实现的计算机。

然后每个节点都会有一个关于它平均保持多长时间和平均下降多长时间的时间曲线(这两个参数彼此部分相关。长时间正常运行的节点通常不会有很长的停机时间因为它们可能一直在线)。并且每个节点独立地作用于这些参数。
实际上,一天中的时间也起着重要作用,在这里很容易看出:http://dsn.tm.uni-karlsruhe.de/english/2936.php

所以......长话短说,仅仅随机运行和杀死几个节点不会给你一个关于 DHT 弹性的真实结果,因为影响会大不相同。

至于技术部分,您可能希望在同一个 java VM 中运行所有这些,并使用多线程或非阻塞 IO 来减少在单独的 VM 中运行每个实例的开销。这也将允许您以更现实的方式安排他们的启动和停机时间。

由于您可以为一台计算机分配多个 IP,因此您应该能够仅根据 IP/端口数在一台计算机上运行数十万个节点。但是,即使是最快的系统,该过程的资源消耗最终也会陷入困境,因为实际上很少有 DHT 实现能够很好​​地扩展。

因此,您可能需要在每台计算机有几千个节点的网络上运行它,才能使任何事情接近现实。

要么是这样,要么你求助于更多的数学模拟,而不是运行实际的实现。

关于java - 在 DHT 中模拟节点故障,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11689920/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com