伴随着在线教育和算法竞赛的普及,在线判题系统作为评估算法能力的设施,在高并发的性能和隔离性的要求日渐升高。传统的基于进程隔离或容器化的判题方案,在处理短程评测任务时,展现出了冷启动延迟高,内存资源开销大等缺点,针对上述痛点,设计并实现了一种基于WebAssembly的高性能安全在线判题系统.
点击空白处退出提示
伴随着在线教育和算法竞赛的普及,在线判题系统作为评估算法能力的设施,在高并发的性能和隔离性的要求日渐升高。传统的基于进程隔离或容器化的判题方案,在处理短程评测任务时,展现出了冷启动延迟高,内存资源开销大等缺点,针对上述痛点,设计并实现了一种基于WebAssembly的高性能安全在线判题系统.
本系统主要分为四个模块:(1)客户端:基于React构建的单页应用集成Monaco Editor实现代码编辑与语法检查;(2)LSP代理服务器:将Monaco Editor的LSP请求转发到本地LSP(2)API网关:负责处理用户认证,题目管理,提交请求;(3)消息队列:引入Redis作为异步消息队列判题集群,解耦 API 服务与判题服务,实现削峰填谷。(4)评测节点:基于 Rust 开发的判题节点,内置 Wasmtime 运行时,
前端基于React与Monaco Editor,通过Websocket代理在用户本地运行的语言服务器,获得了类本地 IDE 的智能代码补全与交互体验。后端采用Go + Redis构建,确保了判题任务的高效调度与削峰填谷。
在判题引擎的设计上,本文基于Wasmtime + Rust构建了判题沙箱,并设计了如下优化措施:
1. 针对C/C++,本文提出了一种动态链接技术,将库文件编译为主模块,用户提交代码作为侧模块注入其中。这减小了用户模块体积和序列化开销
2. 针对 Python,本系统引入 Wizer 预初始化技术,通过内存快照将解释器启动过程转移至构建期,实现了任务的毫秒级热启动。
3. 采用基于Fuel的指令计数机制,实现了相比传统基于墙上时间更为确定性的 CPU 资源控制。




评论