2016-12-26 126 views
1

我正在对几个分布式系统(如Chord)进行一些研究,我希望能够用我的桌面编写算法并运行分布式系统的模拟。在模拟中,我需要能够让每个节点独立执行并相互通信,同时手动诱发诸如滞后,丢包,随机崩溃等元素。然后收集数据以估计性能系统。使用SimPy来模拟Chord分布式系统

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

SimPy是否适合此任务? 如果是,那么实施这样的系统有哪些建议/警告?

回答

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,因为这些行为就像设计中的队列一样。
  • 密切关注您用于产生随机性的概率分布。世博变量分布通常比统一分布更接近于模拟自然系统,但要确保检查每一个分布,以保证理性。例如,生成网络流量通常遵循泊松分布,数据量通常遵循幂律(帕累托分布)。