【问题标题】:Simulating node failure in a DHT在 DHT 中模拟节点故障
【发布时间】:2012-07-27 14:31:20
【问题描述】:

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

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

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

我正在运行 Mac OS X 雪豹,有兴趣听听任何建议吗?

【问题讨论】:

  • 为什么不在真正的虚拟机上运行并真正“失败”虚拟机?
  • 除了 VMWare fusion 等之外,我在 VM 方面没有丰富的经验,但有问题的节点数量将超过 100。运行这么多 VM 是否合理?
  • 除非你有一台非常大的机器,否则这可能有点推动它。您可能可以使用用户模式 ​​Linux 或 OpenVZ 之类的东西来做到这一点,即容器级虚拟化。

标签: java performance-testing dht fault-tolerance


【解决方案1】:

有不同形式的节点故障。

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

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

另一个常见问题是 NAT 导致的可达性问题。该节点的可见性可能取决于 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 实现能够很好​​地扩展。

因此,您可能需要在每台计算机有几千个节点的网络上运行此程序才能获得接近真实的结果。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-22
    • 2013-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-28
    相关资源
    最近更新 更多