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

部署期间会发生什么
Durable Objects 是具有持久标识和状态的可寻址对象。Cloudflare 将其用于协调客户端、运行长时间任务以及管理 WebSocket 会话等场景。单个对象同一时间只运行一个代码版本。因此,如果立即替换版本,活动实例可能会被重置,导致任务或连接中断。
现在的默认流程是延迟切换。部署后,活动对象会继续使用旧版本处理请求。如果它先进入休眠状态,下次收到请求时就会启动新版本。如果五分钟期限已到而对象仍处于活动状态,它就会被重置并采用新版本。Worker 的部署会单独完成:延迟影响的是已活动对象开始运行新代码的时机。
这对哪些场景有用
这一变化对由单个对象在请求之间维持工作的服务尤为重要,例如长时间会话、多客户端协调或 WebSocket 连接。延迟切换创造了一个缓冲期,让对象有机会自然完成当前活动或进入休眠,然后再更新。对于 WebSocket,Cloudflare 特别指出一个条件:使用 Hibernation API 的连接,在对象从休眠状态恢复并采用新代码后仍会保持连接。
团队的实际做法是,找出可能持续忙碌数分钟以上的活动对象,并确认使用的是哪一种 WebSocket API。这将决定新的部署流程能否让应用平稳切换,还是连接会在强制更新时终止。
五分钟是缓冲期,不是保证
Cloudflare 将延迟更新描述为尽力而为:对象可能更早被重置,例如运行时环境更新时。如果对象在最长延迟结束前仍未进入休眠状态,平台就会通过重置应用新版本。因此,重要状态应保存在持久化存储中,操作也应考虑到可能重新运行的情况。Cloudflare 文档建议保存需要跨部署保留的状态,而不是依赖活动实例的内存。
团队可以在 Durable Objects 配置中覆盖此行为:设置为立即更新,或为延迟切换选择其他期限。如果新版本必须立即生效,例如需要紧急修复,立即模式会很有用;更长的延迟则能为对象争取更多时间,但也会延长部分实例仍在运行旧版本的时段。
下次部署前应检查什么
确认 Worker 与 Durable Object 在可能运行不同版本期间的请求兼容性。检查关键状态是否保存在存储中,而不只是内存里。对于 WebSocket,请确认应用是否使用 Hibernation API:普通连接可能会在更新生效时终止。如果部署要求立即切换,请明确检查模式设置,而不要依赖新的默认值。
总之,Cloudflare 改变了部署时的默认取舍:活动对象获得有限时间来平稳切换,团队仍可通过配置加快更新。对开发者最有帮助的做法,是在下次部署前检查新旧版本的兼容性、状态持久化情况以及 WebSocket 类型。