Durable Objects 是一种特殊的 Worker,因此 Workers 限制 根据您的 Workers 计划适用。此外,Durable Objects 还有本页列出的特定限制。
| 功能 (Feature) | 限制 (Limit) |
|---|---|
| 对象数量 (Number of Objects) | 无限制(在账户内或给定类中) |
| 每个账户的最大 Durable Object 类数量 (Maximum Durable Object classes per account) | 500 (Workers Paid) / 100 (Free) 1 |
| 每个账户的存储空间 (Storage per account) | 无限制 (Workers Paid) / 5 GB (Free) 2 |
| 每个类的存储空间 (Storage per class) | 无限制 3 |
| 每个 Durable Object 的存储空间 (Storage per Durable Object) | 10 GB 3 |
| 键大小 (Key size) | 键和值的总和不能超过 2 MB |
| 值大小 (Value size) | 键和值的总和不能超过 2 MB |
| WebSocket 消息大小 (WebSocket message size) | 32 MiB(仅适用于接收到的消息) |
| 每次请求的 CPU 时间 (CPU per request) | 30 秒(默认值)/ 可配置为 5 分钟的有源 CPU 时间 4 |
| 每次请求同时进行的传出连接数 (Simultaneous outgoing connections/request) | 6(与 Workers 相同) |
对于具有 SQLite 存储 的 Durable Object 类,适用以下 SQL 限制:
| SQL 功能 | 限制 (Limit) |
|---|---|
| 每张表的最大列数 (Maximum number of columns per table) | 100 |
| 每张表的最大行数 (Maximum number of rows per table) | 无限制(不包括单个对象的存储限制) |
最大字符串、BLOB 或表行大小 (Maximum string, BLOB or table row size) |
2 MB |
| 最大 SQL 语句长度 (Maximum SQL statement length) | 100 KB |
| 每次查询的最大绑定参数数量 (Maximum bound parameters per query) | 100 |
| 每个 SQL 函数的最大参数数量 (Maximum arguments per SQL function) | 32 |
LIKE 或 GLOB 模式中的最大字符数(字节) (Maximum characters (bytes) in a LIKE or GLOB pattern) |
50 字节 |
| 功能 (Feature) | 具有键值存储后端的类的限制 (Limit for class with key-value storage backend) |
|---|---|
| 对象数量 (Number of Objects) | 无限制(在账户内或给定类中) |
| 每个账户的最大 Durable Object 类数量 (Maximum Durable Object classes per account) | 500 (Workers Paid) / 100 (Free) 5 |
| 每个账户的存储空间 (Storage per account) | 50 GB(可通过联系 Cloudflare 调高) 6 |
| 每个类的存储空间 (Storage per class) | 无限制 |
| 每个 Durable Object 的存储空间 (Storage per Durable Object) | 无限制 |
| 键大小 (Key size) | 2 KiB (2048 字节) |
| 值大小 (Value size) | 128 KiB (131072 字节) |
| WebSocket 消息大小 (WebSocket message size) | 32 MiB(仅适用于接收到的消息) |
| 每次请求的 CPU 时间 (CPU per request) | 30 秒(包括 WebSocket 消息) 7 |
| 每次请求同时进行的传出连接数 (Simultaneous outgoing connections/request) | 6(与 Workers 相同) |
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;
}挂钟时间(也称为 wall-clock time)是从调用开始到结束的总经过时间,包括等待网络请求、I/O 和其他异步操作所花费的时间。这与 CPU 时间不同,后者仅衡量 CPU 主动执行代码所花费的时间。
下表总结了开发者平台上不同类型 Worker 调用的挂钟时间限制:
| 调用类型 | 挂钟时间限制 | 详细信息 |
|---|---|---|
| 传入 HTTP 请求 | 无限制 | 客户端保持连接时没有硬性限制。仍在流式传输响应正文的 Worker 保持活动。waitUntil() 在响应或断开连接后将执行延长最多 30 秒。 |
| Cron Triggers | 15 分钟 | 计划 Worker 每次调用最长挂钟时间为 15 分钟。 |
| Queue 消费者 | 15 分钟 | 每次消费者调用最长挂钟时间为 15 分钟。 |
| Durable Object alarm handler | 15 分钟 | Alarm handler 调用最长挂钟时间为 15 分钟。 |
| Durable Objects(RPC / HTTP) | 无限制 | 调用方保持与 Durable Object 连接时没有硬性限制。Durable Objects 在请求、RPC 调用、响应流、WebSocket 或待处理 I/O 进行中时保持活动。 |
| Workflows(每步) | 无限制 | 每个步骤可以运行无限挂钟时间。各个步骤受配置的 CPU 时间限制约束。 |
-
Durable Objects 的计费和存储测量均基于千兆字节
(1 GB = 1,000,000,000 字节),而非 gibibyte (GiB)。
↩ -
每个传入 HTTP 请求或 WebSocket 消息 将剩余可用 CPU 时间重置为 30 秒。这允许 Durable Object 在每个传入网络请求后消耗最多 30 秒的计算,每个新网络请求重置计时器。如果在传入网络请求之间消耗超过 30 秒的计算,单个 Durable Object 被驱逐和重置的可能性会增加。每次请求调用的 CPU 时间可以增加。 ↩
-
Durable Objects 的计费和存储测量均基于千兆字节
(1 GB = 1,000,000,000 字节),而非 gibibyte (GiB)。
↩ -
每个传入 HTTP 请求或 WebSocket 消息 将剩余可用 CPU 时间重置为 30 秒。这允许 Durable Object 在每个传入网络请求后消耗最多 30 秒的计算,每个新网络请求重置计时器。如果在传入网络请求之间消耗超过 30 秒的计算,单个 Durable Object 被驱逐和重置的可能性会增加。每次请求调用的 CPU 时间可以增加。 ↩