这段时间按照 DeepSeek 的 DSec 论文,做了一个 sandbox platform 的开源、自托管实现:OpenDsec。
项目地址: https://github.com/Kernflux/opendsec
先说明一下:这是独立项目,不包含 DeepSeek 代码,也不是 DeepSeek 官方发布或维护的项目。架构和主要设计来自论文;论文没有明确说明、或者我们采用不同方案的地方,都在 SPEC 里单独标注了。
整体架构分为控制面和节点运行时。
控制面里,stateless apiserver 负责认证、配额、调度和请求转发;IAM 用 Raft 保存身份、项目和配额状态;watcher 汇总各节点的健康与负载;每台计算节点运行一个 edge,负责最终准入和 sandbox 生命周期。组件之间走 gRPC + mTLS,sandbox id 里编码所在 edge,因此 apiserver 不需要维护 per-sandbox 路由表。
节点侧目前支持三种后端:
- Firecracker microVM
- Linux container
- 完整 QEMU VM
sandbox 内运行 Aether,负责和 edge 通信;Chronus 维护持久 shell session。exec、文件、HTTP、process、PTY 使用同一套 runtime API。
目前实现的一些能力:
- microVM 冷启动约 0.1 秒,内存快照恢复约 55 ms
- 可以 pause 成内存快照,也可以 fork 正在运行的 VM,并保留内存状态
- 同节点 fork 共享内存页;跨节点时从源节点拉取快照
- 从 OCI registry 导入镜像,不复制数据即可组合 image layers,并支持把 sandbox 修改 pack 成新镜像
- 网络默认拒绝,可按 domain、CIDR、port 放行
- 多级 project、quota、审计日志和短期可撤销 token
- 批量 pause/resume、节点重启后重新接管运行中的 sandbox
- 提供 E2B-compatible gateway,已有 E2B SDK 客户端可以直接接入
- 支持离线安装,适合内网或 air-gapped 环境
在我们的硬件上,一台 384 线程节点做过单批 5,120 个 microVM;两节点集群做过单批 8,192 个 container,未出现创建失败。这些都是 OpenDsec 在自有硬件上的实测,不是论文中的数字。
项目目前在一个小型生产集群上运行。代码、quickstart、架构文档和各项测量都放在仓库里。欢迎对 sandbox、Firecracker、agentic RL 基础设施感兴趣的朋友试用,也很想听听大家对架构和实现取舍的意见。