跳至正文返回首页Perplexity 公开 SPACE 内部架构:控制面与数据面分离,Pause 与 Suspend 分属两种状态
- 前情提要:Perplexity 已以 Apache 2.0 开源 SPACE,为每个 Agent 任务分配独立 Firecracker microVM,凭证与出站流量在 VM 外部控制;9 个拥有 VM 内 root 权限的模型配置发起 108 次逃逸尝试,均未到达宿主机。
- 五个核心抽象:Template(按 sha256 内容寻址的起始文件系统与运行时配置,不可变)、Sandbox(Template 实例,独立 microVM 加可写文件系统)、Process、Command session(创建即分配进程 ID,attach 才真正启动)、Operation(异步生命周期请求的追踪记录)。
- 控制面 / 数据面:管理面只把期望状态写入 PostgreSQL,由集群控制器与 worker 调和收敛,客户端拿 operation ID 轮询;输出流通过会话级 attachment token 经 SSE 直连沙箱内进程,不经过数据库。管理 token 与 attachment token 不可互换,是明确的安全边界。
- 状态机与冷启动:Pause 保留常驻内存,Suspend 生成 VM 内存、运行时状态与根文件系统的完整快照并释放资源,默认 6 小时无活动自动 Suspend;K8s 部署按「模板版本 × VM 规格」预启 warm pools 供直接领用,单机部署从 base snapshot 恢复,btrfs 写时复制用于快速克隆根文件系统。
- 迁移与可插拔运行时:内置 E2B 兼容层,在边缘翻译请求/响应,用 E2B Python SDK 的应用可近乎无缝迁移(E2B 的 pause 映射为 SPACE 的 suspend);执行环境以主机平台 × 运行时绑定 × 客户平台 × 引导配置等组合做 SHA-256 内容寻址,当前只实现 Linux/KVM/Firecracker 的 E0 定义,但主机平台身份已预留 Linux/Windows/macOS 区分。
- 接入方式:纯 HTTP + SSE,OpenAPI 规范直接服务在
/openapi-m1.json,客户端无需嵌入 Rust 库;配套 space-admin-cli、Web UI、OpenTelemetry 与 mdBook 文档。
🔗 架构拆解原帖 | GitHub 仓库
