跳转到内容
搜索文档

已知问题

最后更新 查看 MarkdownAgent 设置

Durable Objects 已正式发布。但仍存在一些已知问题。

全局唯一性

全局唯一性保证全球范围内,给定 ID 的 Durable Object 类 实例在任意时刻只有一个在运行。

唯一性在启动新事件(如接收 HTTP 请求)时以及访问存储时强制执行。

事件接收后,如果事件执行需要一些时间且从未访问其持久存储,则该 Durable Object 可能已不再是最新实例,同一 Durable Object ID 的其他实例可能已在别处创建。如果此时事件访问存储,将收到异常。如果事件完成时从未访问存储,它可能不会意识到 Durable Object 已不再是最新实例。

在网络分区或软件更新(包括 Durable Object 类代码更新或 Workers 系统本身更新)时,Durable Object 可能被替换。启用 wrangler tailCloudflare 仪表板 日志需要软件更新。

代码更新

Workers 和 Durable Objects 的代码变更以最终一致的方式全球发布。由于每个 Durable Object 全球唯一,可能出现以下情况:请求到达最新版本的 Worker(运行在世界某处),然后短暂调用(通常为秒到分钟)运行旧版代码的唯一 Durable Object。如果您创建渐进式部署,此时间段由实时部署配置使用多个版本的时间决定。

因此,最佳实践是确保 Workers 与 Durable Objects 之间的 API 变更在代码更新时向前和向后兼容。

开发工具

wrangler tail 对升级为 WebSocket 的请求的日志会延迟到 WebSocket 关闭后才显示。wrangler tail 不应连接到预期会接收大量流量的 Worker。

Cloudflare 仪表板 中的 Workers 编辑器允许您交互式编辑和预览 Worker 和 Durable Objects。在编辑器中,仅当被预览的 Worker 同时导出 Durable Object 类并绑定到它时,预览请求才能与 Durable Object 通信。其他 Worker 导出的 Durable Objects 无法在编辑器预览中通信。

wrangler dev 对 Durable Object 存储具有读访问权限,但写入仅保存在内存中,不会影响持久数据。但是,如果您在 Durable Object 绑定 中显式指定 script_name,则写入会影响持久数据。Wrangler 在此情况下会发出警告。

本地开发中的 Alarms

目前,在本地开发时(使用 npx wrangler dev),Durable Object alarm 方法 在热重载后(在代码本地运行时编辑代码)可能会失败。

为避免此问题,使用 Durable Object alarms 时,编辑代码后请关闭并重新启动 wrangler dev 命令。

这篇文档对您有帮助吗?