Skip to content

快照与分叉

快照保存运行中沙箱的内存、进程和磁盘;沙箱可以回到快照、从快照启动,或分叉成多个副本,各自从这一刻继续运行。

更新于

快照

POST /v1/sandboxes/{id}/snapshots (glac sandboxes snapshots create web --name before-upgrade) 在沙箱继续运行的同时,保存它在某一时刻的内存、进程和磁盘。快照有一个 name(replace 会从当前用着这个名称的快照那里拿走名称),还可以有 expires_at。

调用 作用
POST /v1/sandboxes 带上 snapshot 一个新沙箱,从创建快照的那一刻继续运行,进程仍在运行 (glac sandboxes create --snapshot before-upgrade)。
POST /v1/sandboxes/{id}/restore 原地回到某个快照:id、名称和链接都不变。沙箱回退之前的状态会保存为另一个快照,在响应中给出名称,所以回退可以撤销 (glac sandboxes restore web before-upgrade)。
GET /v1/snapshots, GET, DELETE /v1/snapshots/{id} 项目的快照;查看一个;删除一个。从它创建的沙箱继续运行。
PATCH /v1/snapshots/{id} {name?, expires_at?} 换一个名称(null:不要名称),或换一个自行删除的时间(null:永不删除):glac sandboxes snapshots rename before-upgrade old-state。

快照创建后会被复制到所在区域的对象存储中。replicated 说明何时复制完成:从那时起,区域中的任何机器都能从它创建沙箱。在此之前,只有创建它的那台机器可以,需要其他机器的调用会被拒绝(409 snapshot_not_replicated,并说明复制进行到哪里)。

沙箱以读写方式持有的云盘会以版本的形式包含在它的快照中,不复制任何数据。从这个快照创建的沙箱会在相同路径上得到每个云盘的一个分叉,内容是云盘当时的内容;云盘本身仍属于第一个沙箱。参见沙箱的快照与它的云盘。

snap = sbx.snapshot(name="before-upgrade")
sbx.run("rm -rf /srv/*")                              # something that goes wrong
sbx.restore(snap)                                     # as it was before
other = glac.sandboxes.create(snapshot=snap)          # another sandbox from the same moment

分叉

POST /v1/sandboxes/{id}/fork 带上 count(1 到 64),创建这么多个副本,每个都是一台独立的机器,都带着原沙箱的内存、进程和磁盘从这一刻继续运行。要么全部创建,要么一个都不创建。分叉会唤醒被复制的沙箱。

glac sandboxes fork web --count 3        # prints three ids
copies = sbx.fork(3)
print([c.run("python3 -c 'import random; print(random.random())'").stdout for c in copies])
for c in copies:
    c.delete()

分叉计入创建的沙箱数(每分钟,以及项目每小时)和运行中的沙箱数:参见限制。

模板

模板是一个启动过一次并被保存下来的镜像:包括它的内存、设备和磁盘。沙箱都是它的副本,所以模板启动的程序在每个沙箱中都已经在运行,程序用的内存在沙箱改动之前都是共享的。每个镜像针对每种规格、每种启动命令和就绪检查,以及启动命令的每种环境,各有一个模板。模板会自动为你创建,不收费。

费用

快照按它自己的字节计费(它自己的内存页、设备状态和磁盘层,不包括它与模板共享的部分),按 GB·月计,每 GB·月 $0.02,保留多久就计多久。免费版 15 GB 的存储额度和付费版的 20 GB·月 都包括快照,与休眠沙箱和云盘共用。参见价格与套餐。

导航

输入以搜索……

↑↓ 切换↵ 选择Esc 关闭