2016-12-26 5 views
1

저는 Chord와 같은 여러 분산 시스템에 대한 연구를하고 있으며, 알고리즘을 작성하고 데스크탑만으로 분산 시스템의 시뮬레이션을 수행하고 싶습니다.Simpy를 사용하여 Chord 분산 시스템을 시뮬레이션하십시오.

시뮬레이션에서 각 노드가 독립적으로 실행되고 서로 통신 할 수 있어야하며 지연, 패킷 손실, 임의 충돌 등의 요소를 수동으로 유도해야합니다. 그런 다음 데이터를 수집하여 체계.

일부 검색을 마친 후 SimPy가 내 용도에 적합한 후보라는 것을 알았습니다.

SimPy이 작업에 적합한 라이브러리입니까? 그렇다면 그러한 시스템을 구현하기위한 제안/경고는 무엇입니까?

답변

1

나는 그렇다고 대답 할 것입니다.

필자는 박사 학위의 일환으로 임의의 통신 네트워크를 시뮬레이트하기 위해 SimPy (버전 2)를 사용했습니다. 그것은, 그러나, 약간의 밀도가 아니라 아주 잘 설명되어 있습니다

https://github.com/IncidentNormal/CommNetSim

: 당신은 여기에 코드를 볼 수 있습니다. 또한 2가 더 이상 지원되지 않기 때문에 SimPy 버전 3으로 실제로 번역되어야합니다 (그리고 3은 2로 찾은 제한 사항을 수정했습니다).

일부 개념/아이디어를 내가 유용하다는 것을 발견

  • 워크 아웃 당신이 그것을 구현 시작하기 전에 시뮬레이션에서 원하는; 통신 네트워크 시뮬레이션은 시스템에서 발생하는 비상 동작을 효과적으로 모니터링/측정하려는 경우 작은 설계 변경에 매우 민감합니다.
  • 시뮬레이션에서 오버 엔지니어링을 시작하기 쉽습니다. 네이티브 SimPy 객체를 사용하면 디자인에서 노이즈를 제거 할 때 거의 항상 충분합니다.
  • Stores를 사용하여 패킷/페이로드 전송을위한 미디어를 시뮬레이션합니다. SimPy 문서에서 대기 시간을 시뮬레이션하기위한 예제가 있습니다. https://simpy.readthedocs.io/en/latest/examples/latency.html
  • 이벤트는 까다 롭습니다. 시뮬레이션 단계마다 한 번만 실행되므로 이벤트가 여러 번 발생하면 효과적으로 작동하지 않으므로 버그가 발생할 수 있습니다. 한 단계에서 같은 사건. 견고성을 위해 위에서 언급 한 것처럼 통신 네트워크 (낮은 수준의 제품은 거의 필요하지 않음)에서 동작을 나타내는 데 사용하지 말고 의도적으로 대기열처럼 작동하므로 상점을 대신 사용하십시오.
  • 임의성 생성에 사용하는 확률 분포에 세심한주의를 기울이십시오. Expovariate 배포본은 대개 균일 한 배포판보다 자연스러운 시스템을 시뮬레이션하는 것과 비슷하지만 사용하는 모든 배포를 확인해야합니다. 예를 들어, 네트워크 트래픽 생성은 일반적으로 Poisson 분포를 따르고 데이터 양은 종종 Power Law (Pareto) 분포를 따릅니다.