使用SimPy模拟Chord分布式系统

时间:2016-12-26 00:56:03

标签: modeling distributed-system simpy chord

我正在对几个分布式系统(如Chord)进行一些研究,我希望能够只用我的桌面编写算法并运行分布式系统的模拟。

在模拟中,我需要能够让每个节点独立执行并相互通信,同时手动诱导滞后,丢包,随机崩溃等元素。然后收集数据以估计系统的性能。

经过一番搜索后,我发现SimPy是我目的的好候选人。

SimPy是否适合执行此任务? 如果是,那么实施这样一个系统的建议/注意事项是什么?

1 个答案:

答案 0 :(得分:1)

我会说是的。

我使用SimPy(版本2)模拟仲裁通信网络,作为我博士学位的一部分。你可以在这里看到代码:

https://github.com/IncidentNormal/CommNetSim

然而,它有点密集,并没有很好的记录。它也应该真正被翻译成SimPy版本3,因为不再支持2(并且3修复了我在2中找到的一些限制)。

我发现有用的一些概念/想法:

  • 在开始实施之前,计算出你想要的模拟结果;通信网络模拟对小型设计变更非常敏感,因为您正在有效地尝试监视/测量系统中的紧急行为。
  • 开始过度设计模拟很容易,当您从设计中消除噪音时,使用原生的SimPy对象几乎总是足够的。
  • 使用商店模拟传输数据包/有效负载的媒介。有一个这样的示例用于模拟SimPy文档中的延迟:https://simpy.readthedocs.io/en/latest/examples/latency.html
  • 事件是棘手的 - 因为它们每个模拟步骤只能触发一次,所以这通常会成为错误的根源,因为如果多个事情在一个步骤中触发同一事件,行为就会被有效地丢失。为了提高稳健性,尽量不要用它们来表示通信网络中的行为(你很少需要低级别的东西),如上所述 - 改为使用Stores,因为这些就像设计一样排队。
  • 密切关注用于生成随机性的概率分布。渐变分布通常比统一分布更接近模拟自然系统,但请务必检查您用于理智的每个分布。例如,生成网络流量通常遵循泊松分布,并且数据量通常遵循幂律(帕累托)分布。