MoonSim 是专为 MoonBit 语言设计的确定性离散事件仿真(Discrete-Event Simulation, DES)与分布式网络并发测试框架。在复杂分布式系统、并发排队优化及供应链调度开发中,物理环境下的时间成本高昂且多线程竞态条件极难复现。MoonSim 将物理时钟彻底重构为纯函数式、毫秒级执行且 100% 确定性运行的虚拟事件驱动内核(Clock)。
版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号-9
京公网安备 11010802047560号
MoonSim: 确定性离散事件与分布式网络仿真框架 (MoonBit)
MoonSim是专为 MoonBit 语言设计的确定性离散事件仿真(Discrete-Event Simulation, DES)与分布式系统网络测试框架。项目融合了SimPy的协程进程排队模型与ns-3的确定性虚拟网络注入机制,旨在为复杂并发算法、分布式共识协议(如 Raft/Paxos)、排队论优化及物流供应链调度提供毫秒级、零竞态、可重复验证的仿真环境。Why MoonSim?(选题与核心价值)
在分布式系统与并发软件研发中,物理或真实环境测试常面临两类致命瓶颈:
MoonSim彻底解决了这些痛点。通过将整个世界的物理时钟替换为纯函数式的**虚拟事件时钟驱动器 (Clock)**,MoonSim能够:核心架构与模块说明
MoonSim采用严密的模块化分层架构设计,各核心组件高内聚、低耦合:1.
core/clock(虚拟时间内核)SimTime/EventId**:以Double精准表示虚拟秒数;每个事件赋予全局唯一自增seq序号,消除了时间戳相同时的竞态歧义。EventHeap**:基于最小堆(Min-Heap)实现的超高性能事件调度器,支持 (O(\log N)) 插入与弹出,以及 (O(N)) 的惰性/立即事件取消。2.
core/event(协程化仿真调度)EventManager/Process**:通过闭包状态机 ((ProcessContext) -> Double?) 在纯 MoonBit 中完美模拟生成器(Generator)流程。返回Some(wait_time)即自动挂起并在指定延时后唤醒,返回None则终止,支持嵌套调度。3.
resource(并发与竞争同步原语)Resource:支持有限容量 (capacity) 竞争与优先级等待队列。高优先级请求可插队获取服务,支持设置超时放弃 (request_with_timeout)。Store[T]**:离散物品 FIFO 缓冲区,完美契合生产者-消费者模型。Container**:连续状态缓冲池(如油箱电量、水库水位),当容量达到阈值或枯竭时自动唤醒等待协程。4.
stats(时间加权与 SLA 遥测)TimeWeightedSummary**:解决传统算术平均值在排队论仿真中失效的问题。严格按照事件持续时间加权积分计算平均排队长度与资源利用率。Histogram&SlaMonitor**:实时收集耗时分布直方图、吞吐率变化及 SLA 超时违约比例。5.
network(分布式网络故障台)NetworkTopology[T]**:基于确定性 LCG 随机数发生器的多节点网络集群测试床。Online/Offline/Partitioned)、单链路延迟抖动与自定义丢包率 (drop_probability)。快速上手与运行示例
项目包含所有依赖配置,无需额外第三方安装,直接使用
moon命令行工具即可。1. 运行所有单元测试 (测试覆盖率 100% 且 0 警告)
2. 运行案例一:多窗口银行排队与服务 SLA 监测
场景概述:模拟 2 个业务办理窗口,8 名顾客依次到达申请办卡。由于柜员不足引发排队,系统自动记录每个顾客等待时间并由
SlaMonitor实时判定是否存在超过 5 秒的超时违约。3. 运行案例二:Raft 分布式集群心跳与网络分区故障注入
场景概述:模拟 Node 1 (Leader) 向 Node 2 & 3 发送心跳数据包。系统在
t=0.12s动态切断 Node 3 链路注入网络分区故障,并于t=0.28s恢复。日志直观展示分区期间丢包与恢复后的同步。4. 运行案例三:自动化制造产线与蓄电池储能回充
场景概述:供应商向缓冲区 (
Store) 供应原料,机械臂 (Resource) 消耗零件与蓄电池电量 (Container) 进行加工。当电量低于 40 时,调度中心自动触发网络化快充系统补充能量。代码精简代码示例
只需短短数行,即可创建一个完整的仿真环境:
参赛自查与规范遵从
本项目严格对照并完全满足 OSC 2026 MoonBit 国产基础软件开源大赛的各项审查要求:
core/,resource/,stats/,network/),moon.mod和各层moon.pkg配置规范无错误。@test.eq,inspect, 避免derive(Show)废弃宏,全面去除f!(..)旧语法)。LICENSE(Apache License 2.0) 文件。License
Licensed under the Apache License, Version 2.0. See LICENSE for more details.