当 Durable Object 正在主动执行 JavaScript — 处理请求或运行事件处理器 — 或处于空闲但不满足休眠条件时,会产生 duration 费用。符合休眠条件的空闲 Durable Object 不会产生 duration 费用,即使在运行时休眠之前的短暂窗口内也是如此。
对象从内存中驱逐后,下次需要时会重新创建(再次调用构造函数)。
有几个因素可能阻止 Durable Object 休眠并导致其继续产生 duration 费用。
更多信息请参阅 Durable Object 的生命周期。
是的,虽然很少。空表根据列数(表宽度)至少消耗几千字节。空 SQLite 数据库大约消耗 12 KB 存储。
对 SQLite 支持的 Durable Object 的所有写入都会在 Durable Object 的内部表中存储 nominal 数量的元数据,这会计入你的可计费存储。
元数据保留在 Durable Object 中,直到你调用 deleteAll()。
Durable Objects 可以在许多 Durable Object 之间水平扩展。每个单独的 Object 本质上是单线程的。
- 单个 Object 的软限制为每秒 1,000 个请求。每个命名空间可以有无限数量的单独对象。
- 对直接返回响应的小值进行的简单 storage
get()可能比(例如)序列化和/或反序列化大型 JSON 值的 Durable Object 实现更高的请求吞吐量。 - 同样,执行多个
list()操作的 Durable Object 在请求吞吐量方面可能更受限制。
收到过多请求的 Durable Object 在尝试排队后,会向调用方返回过载错误。
Durable Objects 的设计使得系统中的单独对象数量不需要受限,可以水平扩展。
- 你可以在给定的 Durable Object 命名空间 中创建并运行任意数量的单独 Durable Objects。
- 在 Workers Paid 计划上使用 SQLite 支持的 Durable Objects 时,每个账户的存储没有限制。
- 每个 SQLite 支持的 Durable Object 在 Workers Paid 计划上的存储限制为 10 GB。
- 更多信息请参阅 Durable Object 限制。
Durable Objects 是 Worker 脚本,与任何 Worker 一样具有相同的每次调用 CPU 限制。请注意,CPU 时间是主动处理时间:不包括等待网络请求、存储调用或其他一般 I/O 的时间,这些不计入 CPU 时间或 Durable Objects 计算消耗。
默认情况下,每次 Durable Objects 调用(HTTP 请求、WebSocket 消息或 Alarm)的最大 CPU 时间为 30 秒,但可以通过在 Wrangler 配置中设置 limits.cpu_ms 为与 Durable Object 定义关联的所有 Durable Objects 增加此限制:
{
// ...rest of your configuration...
"limits": {
"cpu_ms": 300000, // 300,000 milliseconds = 5 minutes
},
// ...rest of your configuration...
}[limits]
cpu_ms = 300_000当 SQLite 支持的 Durable Object 达到其最大存储限制(Workers Paid 上为 10 GB,Free 计划上为 1 GB)时,写入操作(如 INSERT、UPDATE 或对 put() 和 sql.exec() 存储 API 的调用)将失败并显示以下错误:
database or disk is full: SQLITE_FULL读取操作(如 SELECT 查询、get() 和 list() 调用)将继续工作,DELETE 操作也将成功,以便你可以删除数据以释放空间。
要在 Durable Object 中处理此错误,请捕获存储 API 抛出的异常:
try {
this.ctx.storage.sql.exec(
"INSERT INTO my_table (key, value) VALUES (?, ?)",
key,
value,
);
} catch (e) {
if (e.message.includes("SQLITE_FULL")) {
// Storage limit reached — reads and deletes still work
// Consider deleting old data or returning a meaningful error to the caller
}
throw e;
}你可以使用 $workers.durableObjectId 来识别生成日志条目的特定 Durable Object 实例。