2016-12-26 125 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,因爲這些行爲就像設計中的隊列一樣。
  • 密切關注您用於產生隨機性的概率分佈。世博變量分佈通常比統一分佈更接近於模擬自然系統,但要確保檢查每一個分佈,以保證理性。例如,生成網絡流量通常遵循泊松分佈,數據量通常遵循冪律(帕累託分佈)。