跳到正文
meng shao· @shao__meng · X·· 4 小时前AI 评分67
AI 导读

Perplexity 团队(@denisyarats)宣布开源内部 agent 安全运行时沙箱平台 SPACE,GitHub 地址为 https://github.com/perplexityai/SPACE,该平台支撑其 Computer 产品及 RL 训练与评测负载。

正文

Perplexity 开源了团队内部 agent 代码执行平台「SPACE」,把不可信的 Agent 生成代码或用户代码放进 Firecracker microVM 里隔离运行,通过纯 HTTP/SSE API 对外服务

开源地址:https://github.com/perplexityai/SPACE

核心抽象:五个概念 + 严格分离的生命周期
· Template:起始文件系统与运行时配置(不可变,类似镜像),按内容寻址(sha256: digest)
· Sandbox:一个 Template 的实例,独立 microVM + 可写文件系统
· Process:在 Sandbox 内执行的程序,同 Sandbox 内进程共享环境
· Command session:一次命令的连接信息与授权,创建即分配进程 ID,attach 才真正启动
· Operation:异步生命周期请求(create/pause/suspend/wake/delete)的追踪记录

关键设计:Sandbox 的生命周期长于创建它的请求,也长于承载其输出的连接。管理面是异步的,API 只把期望状态写入 PostgreSQL,由控制器和 worker 协调收敛,客户端拿 operation ID 轮询;数据面则完全独立,通过会话级 attachment token 经 SSE 直连沙箱内进程取输出。管理 token 与 attachment token 不可互换,这是它的安全边界之一。

架构:控制面/数据面分离 + 声明式调和
请求与执行分两条路径:
· 管理面:Application → API → PostgreSQL(期望状态)→ 集群控制器 → 沙箱 Pod(K8s 模式下)→ 运行时 shim → Worker 服务 → Firecracker microVM → 客户进程。
· 数据面:Application ↔ Data plane ↔ 客户进程,旁路整个控制面,输出流不经过数据库。

Worker 负责 VM、网络、卷、模板、凭证,用 btrfs 写时复制构建根文件系统(这是快速克隆沙箱的关键);模板与快照走对象存储(本地用 Versity S3 Gateway)。部署形态可插拔:Kubernetes 适配器(本地 Kind、云端 EKS 参考部署)或直接适配器(不经 K8s 直调 worker,支持单机运行)。

Pause 与 Suspend 的区分体现其状态机的严谨性:Pause 保留常驻内存(快恢复但非持久);Suspend 生成 VM 内存 + 运行时状态 + 根文件系统的完整快照并释放资源(真正的持久化),两者都用 Wake 恢复。默认 6 小时无活动自动 Suspend(这是空闲限制而非最长存活时间)。

性能工程:两层抗冷启动
冷启动是 microVM 沙箱平台的体验瓶颈,SPACE 给了两个正交方案:
1. Warm pools(K8s 部署):按“模板版本 × VM 规格”预启动一批就绪沙箱,create 直接领用,池空了才退化为冷启动;
2. Base snapshots(单机部署):从基线快照恢复,跳过完整引导。

配合 Firecracker 本身亚秒级的 VM 启动和 btrfs CoW 文件系统克隆,整体面向“Agent 秒级拿到可用环境”的目标。

“可插拔运行时”:为未来预留的执行环境身份体系
这是仓库描述里 "pluggable-runtime" 的实质,也是设计上最有前瞻性的部分。每个执行环境被定义为主机平台 × 运行时绑定 × 客户平台 × 引导配置 × 隔离语义 × 兼容性Profile 的完整组合,整体 SHA-256 内容寻址。当前只实现了编译进代码的 E0 定义:Linux/x86_64 宿主、KVM、Firecracker 1.15.1(含 jailer)、内核 6.1.155、快照格式 9.0.0。

值得注意的三个原则:
· 结构可解码 ≠ 可执行:解码成功、工件存在、节点健康,都不构成执行授权,三者分离校验;
· 身份不可扩展含糊:任何改变引导/恢复语义的字段都必须产生新的 schema/引用,“加了字段还沿用旧引用”被明令禁止;
· 主机平台类型里已预留 Linux/Windows/macOS 的区分身份,虽然当前只实现了 Linux 适配器。

这明显是在为未来支持其他 hypervisor、客户架构甚至非 Firecracker 运行时铺路,而不是把 Firecracker 硬编码进协议。

安全模型(分层清晰)
· 硬件级隔离:Firecracker microVM 边界(KVM),这是对不可信代码的根本防线;
· token 分域:管理面 bearer token 与数据面 attachment token 隔离;
· 网络策略:沙箱 Pod 独立 namespace(sandboxes),NetworkPolicy 只放行 API 与控制器端口,出站默认限公网 IPv4 + 集群 DNS,可配 egress profile 精细管控,甚至有 TLS 拦截豁免机制;
· 供应链:gitleaks、cargo-deny、supply-chain 目录、pre-commit/lefthook 一应俱全;
· 内部 RPC 走 TLS,模板注册可限制可信 S3 bucket 白名单。

兼容性与工程成熟度
· E2B 兼容层(ECW):在边缘翻译 E2B API 请求/响应,用 E2B Python SDK 的应用可近乎无缝迁移(语义映射:E2B 的 pause → SPACE suspend);
· 客户端零绑定:纯 HTTP + SSE,OpenAPI 规范直接服务在 /openapi-m1.json,不需要嵌入 Rust 库——这对采用率至关重要;
· 运维面齐全:space-admin-cli(节点、暖池、模板构建)、Web UI、OpenTelemetry 可观测性、mdBook 文档;
· 开发体验:tilt up 热重建,单测 + Kind 冒烟套件。

引用Denis Yarats@denisyarats
we open-sourced SPACE, the sandbox platform we use internally for secure agentic runtimes. it powers Computer as well as our RL training and evaluation workloads. https://github.com/perplexityai/SPACE
在 X 查看被引用的帖子

来源:meng shao · x.com