跳转到内容
搜索文档

限制

最后更新 查看 MarkdownAgent 设置

Durable Objects 是一种特殊的 Worker,因此 Workers 限制 根据您的 Workers 计划适用。此外,Durable Objects 还有本页列出的特定限制。

SQLite 支持的 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 相同)

SQL 存储限制

对于具有 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
LIKEGLOB 模式中的最大字符数(字节) (Maximum characters (bytes) in a LIKE or GLOB pattern) 50 字节

键值支持的 Durable Objects 通用限制

功能 (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 Object 可以完成多少工作?

Durable Objects 可以在许多 Durable Object 之间水平扩展。每个单独的 Object 本质上是单线程的。

  • 单个 Object 的软限制为每秒 1,000 个请求。每个命名空间可以有无限数量的单独对象。
  • 对直接返回响应的小值进行的简单 storage get() 可能比(例如)序列化和/或反序列化大型 JSON 值的 Durable Object 实现更高的请求吞吐量。
  • 同样,执行多个 list() 操作的 Durable Object 在请求吞吐量方面可能更受限制。

收到过多请求的 Durable Object 在尝试排队后,会向调用方返回过载错误。

我可以创建多少个 Durable Objects?

Durable Objects 的设计使得系统中的单独对象数量不需要受限,可以水平扩展。

  • 你可以在给定的 Durable Object 命名空间 中创建并运行任意数量的单独 Durable Objects。
  • 在 Workers Paid 计划上使用 SQLite 支持的 Durable Objects 时,每个账户的存储没有限制。
  • 每个 SQLite 支持的 Durable Object 在 Workers Paid 计划上的存储限制为 10 GB。
  • 更多信息请参阅 Durable Object 限制

我可以增加 Durable Objects 的 CPU 限制吗?

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

当 Durable Object 超过其存储限制时会发生什么?

当 SQLite 支持的 Durable Object 达到其最大存储限制(Workers Paid 上为 10 GB,Free 计划上为 1 GB)时,写入操作(如 INSERTUPDATE 或对 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 时间限制约束。

Footnotes

  1. 与 Workers 脚本限制 相同。

  2. Durable Objects 的计费和存储测量均基于千兆字节
    (1 GB = 1,000,000,000 字节),而非 gibibyte (GiB)。

  3. Workers Free 计划的账户 Durable Objects 总存储限制为 5 GB。 2

  4. 每个传入 HTTP 请求或 WebSocket 消息 将剩余可用 CPU 时间重置为 30 秒。这允许 Durable Object 在每个传入网络请求后消耗最多 30 秒的计算,每个新网络请求重置计时器。如果在传入网络请求之间消耗超过 30 秒的计算,单个 Durable Object 被驱逐和重置的可能性会增加。每次请求调用的 CPU 时间可以增加

  5. 与 Workers 脚本限制 相同。

  6. Durable Objects 的计费和存储测量均基于千兆字节
    (1 GB = 1,000,000,000 字节),而非 gibibyte (GiB)。

  7. 每个传入 HTTP 请求或 WebSocket 消息 将剩余可用 CPU 时间重置为 30 秒。这允许 Durable Object 在每个传入网络请求后消耗最多 30 秒的计算,每个新网络请求重置计时器。如果在传入网络请求之间消耗超过 30 秒的计算,单个 Durable Object 被驱逐和重置的可能性会增加。每次请求调用的 CPU 时间可以增加

这篇文档对您有帮助吗?