Vercel 给沙箱配了能留下来的硬盘:16 TiB,Hobby 每月白送 15 GB
一句话:9 月 23 日 Vercel Sandbox 的 Drives 进公开测试。Drive 是一块持久存储,你把它当目录挂进沙箱,沙箱停了、删了,里面的东西还在。
代码长这样:
import { Sandbox, Drive } from '@vercel/sandbox';
const workspace = await Drive.getOrCreate({
name: 'agent-workspace',
});
const sandbox = await Sandbox.create({
mounts: { '/data': workspace },
});
挂在 /data 上的内容,沙箱停掉之后仍然留在 Drive 里。下次换个沙箱再挂同一块 Drive,东西还在。
规格和价目
| 项 | 数值 |
|---|---|
| 每沙箱最多挂载 | 4 块(各自挂在不同路径) |
| 默认上限 | 1 TiB(Hobby 1 GiB) |
| 可配置上限 | 16 TiB(更高需申请) |
| 同时读写挂载 | 1 个 |
| iad1 存储 | 0.05 美元每 GB 每月 |
| iad1 读 | 0.0015 美元每 GB |
| iad1 写 | 0.004 美元每 GB |
| Hobby 每月包含 | 15 GB 存储 + 30 GB 读 + 30 GB 写 |
区域不同价格不同,以文档的区域价表为准。
一块 Drive 怎么给多个 agent 用
Drive 同一时刻只能有一个读写挂载。一旦写入过,多个沙箱可以用只读快照并发读它:
const [reviewSandbox, testSandbox] = await Promise.all([
Sandbox.create({ mounts: { '/data': workspace.snapshot() } }),
Sandbox.create({ mounts: { '/data': workspace.snapshot() } }),
]);
注意语义:每个快照反映的是挂载那一刻的 Drive,之后的写入不在里面,要读新数据得再挂一个新快照。这个设计对”一个 agent 写、多个 agent 读”的流程很合适,对”多个 agent 同时改”的流程不合适——后者会互相覆盖。
对我有什么用
做 agent 的人都知道冷启动有多烦。每次起一个沙箱,npm install 一遍、拉一遍依赖、下一遍模型权重,几分钟就这么没了。Drive 直接把”环境”这个东西变成了可复用的资产:装好的 node_modules、下载好的数据集、微调过的模型,放进 Drive,之后每个沙箱挂上就能用。
第二个用处是 agent 的记忆。以前 agent 的”工作区”是跟着沙箱走的,沙箱没了工作区也没了。现在可以专门开一块 Drive 当它的磁盘记忆,跨任务、跨会话保留。
第三个是并行。把依赖树做成只读快照,起 5 个沙箱并行跑 5 个任务,都读同一份,只付一次存储的钱。
泼冷水
第一,Drive 锁在创建它的区域。官方原话:挂载它的沙箱必须跑在同一个区域,而且不能用 failover 区域。你在欧洲建的 Drive,美国的沙箱挂不上。多区域部署的方案要重新设计。
第二,读写只能一个挂载点。想让两个 agent 同时改同一块 Drive,官方没给方案,你得自己在应用层排队。
第三,快照是”挂载时刻”的点,不是实时视图。指望它做多 agent 之间的数据共享会踩空。
第四,这是 public beta,接口和行为都可能变。别在上面放唯一副本。
第五,Hobby 的 1 GiB 上限和 Pro 的 1 TiB 差了 1000 倍。Hobby 只够放个依赖目录,放数据集得升到 Pro 并把上限配上去。
具体建议
- 先把最耗时的那一步(依赖安装、模型下载)做成 Drive,测一次冷启动时间的前后对比,用数字决定要不要继续。
- Drive 和沙箱建在同一个区域,并在配置里写死 region,别依赖默认值。
- 采用”一个写者 + 多个只读快照”的结构,别让两个 agent 同时读写同一块。
- 定期把 Drive 里真正的不可再生资产(你自己产出的成果,不是能重装的环境)同步到别处。Beta 阶段,Drive 不是备份。
原文与完整代码:https://vercel.com/changelog/drives-for-vercel-sandbox-are-now-in-public-beta Drives 文档(区域与上限):https://vercel.com/docs/sandbox/concepts/drives Sandbox 区域价目:https://vercel.com/docs/sandbox/pricing