【问题标题】:Use SimPy to simulate Chord distributed system使用 SimPy 模拟 Chord 分布式系统
【发布时间】:2016-12-26 00:56:02
【问题描述】:

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

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

经过一番搜索,我发现 SimPy 非常适合我的目标。

SimPy 是适合这项任务的库吗? 如果是,对于实施这样的系统有什么建议/注意事项?

【问题讨论】:

    标签: modeling distributed-system simpy chord


    【解决方案1】:

    我会说是的。

    我在攻读博士学位期间使用 SimPy(第 2 版)来模拟任意通信网络。您可以在此处查看代码:

    https://github.com/IncidentNormal/CommNetSim

    但是,它有点密集并且没有很好的文档记录。此外,它真的应该被翻译成 SimPy 版本 3,因为不再支持 2(并且 3 修复了我在 2 中发现的一系列限制)。

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

    • 在开始实施之前确定您想要从模拟中得到什么;通信网络仿真对小的设计更改非常敏感,因为您正在有效地尝试监控/测量系统的紧急行为。
    • 开始过度设计仿真很容易,当您去除设计中的噪音时,使用原生 SimPy 对象几乎总是足够的。
    • 使用 Store 来模拟传输数据包/有效负载的媒介。在 SimPy 文档中有这样一个模拟延迟的示例:https://simpy.readthedocs.io/en/latest/examples/latency.html
    • 事件很棘手 - 因为它们在每个模拟步骤中只能触发一次,因此通常这可能是错误的根源,因为如果多个事物在一个步骤中触发相同的事件,行为实际上会丢失。为了稳健性,尽量不要使用它们来表示通信网络中的行为(您很少需要低级别的东西),如上所述 - 使用 Store 代替,因为它们在设计上就像队列。
    • 密切注意用于生成随机性的概率分布。与均匀分布相比,Expvariate 分布通常更接近于模拟自然系统,但请务必检查您使用的每个分布是否合理。例如,生成的网络流量通常遵循泊松分布,而数据量通常遵循幂律 (Pareto) 分布。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-02-23
      • 2022-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-02
      • 2011-11-05
      相关资源
      最近更新 更多