内容提要
DigitalOcean推出Managed Agents公共预览版,其Harness Runtime为每个会话分配Firecracker微虚拟机,实现隔离、网络、存储与检查点恢复。架构以“单元”为区域级独立实例,分离控制面与主机面,支持暂停、恢复和分叉。通过按需加载内存与磁盘、预建网络端点,热模板可在200毫秒内启动并服务流量。
延伸解读
会话与主机解耦:让计算生命周期超越进程
文章的核心设计是将会话与运行它的主机分离。每个会话分配一个Firecracker微虚拟机,通过检查点保存内存、磁盘和虚拟设备状态,使得会话可以在不同主机上暂停、恢复甚至分叉。这意味着代理的工作环境不再绑定于特定进程或主机,其有效生命周期可以超过宿主进程。这种解耦为需要长时间运行、间歇性交互的代理工作负载提供了基础,但恢复后外部连接(如远程TCP)不会回滚,应用可能需要重新连接。
单元化架构:故障隔离与容量扩展的平衡
平台以“单元”为区域级独立实例,每个单元自带VPC、Kubernetes集群、数据库和存储桶,并拥有独立的主机池。这种设计限制了故障影响范围,一个单元的数据库或路由故障不会波及其他单元。同时,单元作为可重复的容量和操作单位,便于横向扩展。但文章也指出,单元仍依赖共享的区域和平台服务,因此故障隔离并非绝对,只是缩小了爆炸半径。
按需加载:用惰性机制换取毫秒级启动
为了实现200毫秒内启动并服务流量,架构没有选择“更快地加载全部数据”,而是“加载更少”。内存通过userfaultfd按需分页,磁盘通过ublk和内容寻址存储按需读取块。启动路径上只准备可复用的资源(如预建网络端点、热模板检查点),将全量内存和磁盘传输移出关键路径。但冷页仍可能导致执行停顿,缓存和预读策略需要在延迟与带宽之间权衡。
网络与凭证治理:隔离边界与安全注入
每个微虚拟机拥有独立的网络命名空间,内部使用固定的IP和MAC地址,使得检查点恢复后网络配置无需改变。出站流量通过nftables规则和Envoy代理强制执行目标允许列表,防止绕过代理。对于凭证,平台支持在主机代理层注入,避免将API密钥暴露给客户机代码。但文章强调,这并不检查应用在获得访问后的行为,工具权限和审批流程仍需单独控制。
Q&A
DigitalOcean Managed Agents 的 Harness Runtime 为什么选择 Firecracker 微虚拟机而不是容器?
Firecracker 使用 KVM 硬件虚拟化,为每个 guest 提供独立内核,而容器共享宿主内核。这种隔离级别更适合运行未经逐行审查的 agent 代码,同时网络命名空间作为补充而非替代 VM 边界。
MicroVM 平台中的“cell”是什么?它如何提高可用性?
cell 是区域范围内自包含的 MicroVM 平台实例,自带 VPC、Kubernetes 集群、托管 PostgreSQL、Spaces 桶和 hypervisor 主机池。每个 cell 独立完整,一个 cell 的本地数据库或路由故障不会影响其他 cell,从而限制故障爆炸半径,但 cell 仍依赖共享的区域和平台服务。
MicroVM 的检查点(checkpoint)捕获哪些状态?恢复时如何实现毫秒级启动?
检查点捕获三类状态:磁盘(密封的 overlay 和索引)、内存(完整内存镜像)和虚拟设备状态(Firecracker 快照)。恢复时通过 userfaultfd 按需加载内存页,通过 ublk 按需读取磁盘块,避免下载完整镜像,从而在 200 毫秒内(p50)启动并服务流量。
为什么 MicroVM 的 guest 网络使用固定的 IP 和 MAC 地址?
因为检查点会保存 guest 内核的网络视图,包括接口配置和 ARP 缓存。如果恢复时分配新地址,保存的 ARP 条目会失效,导致连接停滞。固定地址(包括网关 MAC)确保恢复后 guest 的网络配置仍然有效,且每个执行有独立的宿主网络命名空间,地址不会冲突。
MicroVM 如何管理出站网络流量和凭证注入?
出站流量通过命名空间级 nftables 规则强制走代理,Envoy 应用目标允许列表。凭证注入将 API 密钥等敏感信息保留在宿主代理,通过 mTLS 从内部秘密管理器兑换授权句柄,Envoy 替换凭证头,guest 只获得公共信任根而非实际密钥。
MicroVM 的磁盘存储如何实现快速启动和写隔离?
磁盘分为不可变基础层(内容寻址存储)和每个执行私有的宿主本地可写 overlay。microvm-ublk 通过 ublk 将组合暴露为块设备。写入只更新本地稀疏 delta 文件和位图,读取按需从基础层或缓存获取,避免下载完整磁盘镜像,同时保证执行间写隔离。