jsonscraper
市场
返回期刊

Cloudflare 延迟更新 Durable Objects,让活动任务得以完成

部署后,活动对象可在旧版本上运行最长五分钟;使用 Hibernation API 的 WebSocket 可在版本切换后保持连接。

编辑政策 报告错误

部署后,活动中的 Cloudflare Durable Object 现在可以继续运行当前版本的代码,直到进入休眠状态或达到设定时限。10 月 30 日,Cloudflare 将延迟更新设为默认行为,最长延迟为五分钟。对于开发者而言,这改变了部署期间已运行对象的行为:更新不必立即中断它们,而受支持的 WebSocket 连接在切换到新版本时也可能保持连接。

文章:Cloudflare 延迟更新 Durable Objects,让活动任务得以完成
摘要:自 10 月 30 日起,Cloudflare 默认对 Durable Objects 采用延迟代码更新。这让活动对象有时间进入休眠状态,但并不保证任何操作都能完成,也不会保留所有 WebSocket 连接。
图片用途:封面——核心主题
章节:
视觉主题:对持久化云计算对象的概念性编辑插图
插图展示了更新机制的核心:活动对象可继续使用旧代码运行,直到进入休眠状态或达到设定时限。© jsonscraper · AI 生成

部署期间会发生什么

Durable Objects 是具有持久标识和状态的可寻址对象。Cloudflare 将其用于协调客户端、运行长时间任务以及管理 WebSocket 会话等场景。单个对象同一时间只运行一个代码版本。因此,如果立即替换版本,活动实例可能会被重置,导致任务或连接中断。

现在的默认流程是延迟切换。部署后,活动对象会继续使用旧版本处理请求。如果它先进入休眠状态,下次收到请求时就会启动新版本。如果五分钟期限已到而对象仍处于活动状态,它就会被重置并采用新版本。Worker 的部署会单独完成:延迟影响的是已活动对象开始运行新代码的时机。

这对哪些场景有用

这一变化对由单个对象在请求之间维持工作的服务尤为重要,例如长时间会话、多客户端协调或 WebSocket 连接。延迟切换创造了一个缓冲期,让对象有机会自然完成当前活动或进入休眠,然后再更新。对于 WebSocket,Cloudflare 特别指出一个条件:使用 Hibernation API 的连接,在对象从休眠状态恢复并采用新代码后仍会保持连接。

团队的实际做法是,找出可能持续忙碌数分钟以上的活动对象,并确认使用的是哪一种 WebSocket API。这将决定新的部署流程能否让应用平稳切换,还是连接会在强制更新时终止。

五分钟是缓冲期,不是保证

Cloudflare 将延迟更新描述为尽力而为:对象可能更早被重置,例如运行时环境更新时。如果对象在最长延迟结束前仍未进入休眠状态,平台就会通过重置应用新版本。因此,重要状态应保存在持久化存储中,操作也应考虑到可能重新运行的情况。Cloudflare 文档建议保存需要跨部署保留的状态,而不是依赖活动实例的内存。

团队可以在 Durable Objects 配置中覆盖此行为:设置为立即更新,或为延迟切换选择其他期限。如果新版本必须立即生效,例如需要紧急修复,立即模式会很有用;更长的延迟则能为对象争取更多时间,但也会延长部分实例仍在运行旧版本的时段。

下次部署前应检查什么

确认 Worker 与 Durable Object 在可能运行不同版本期间的请求兼容性。检查关键状态是否保存在存储中,而不只是内存里。对于 WebSocket,请确认应用是否使用 Hibernation API:普通连接可能会在更新生效时终止。如果部署要求立即切换,请明确检查模式设置,而不要依赖新的默认值。

总之,Cloudflare 改变了部署时的默认取舍:活动对象获得有限时间来平稳切换,团队仍可通过配置加快更新。对开发者最有帮助的做法,是在下次部署前检查新旧版本的兼容性、状态持久化情况以及 WebSocket 类型。

人们

尚未列出本文的人员。

继续阅读智能体通过处理器缓存传递秘密——无需网络或共享文件
阅读下一篇文章

将阅读内容转化为可用的集成

探索 jsonscraper 社交数据 API、测试请求并构建下一个工作流。

查看 API