本文目录
部署托管 Durable Objects 的 Worker 之后,流量还在跑,实例却可能继续执行上一版代码长达约五分钟。多半是默认延迟更新在起作用。自 2026-10-30 起,Cloudflare 的 Durable Objects 文档与 Changelog 把默认代码更新策略设为 deferred,默认 max_delay 为 300 秒。活跃对象可以一直用当前版本,直到休眠——或延迟到期、运行时重置并装上新代码。
在 Durable Objects 上跑 AI Agent、长会话或 Hibernation WebSocket 时,关键是搞清部署何时真正换码。规则以 2026 年 10 月 30 日的 Cloudflare Changelog,以及同日最后更新的 Durable Objects 代码更新文档为准。Wrangler、渐进放量与 REST Create deployment 的每条路径我们暂时还没有都测过;用过可通过底部站长联系方式反馈。
站内相关:Cloudflare 已修复 Workers AI 上 GLM-5.3 的跨请求 KV 缓存暴露、AWS 开源 Infinity:面向高并发 Agent 的研究型运行时、Cursor Agent SDK 发布:文件夹定义、Eval 与部署、同一个模型换套 coding harness,通过率几乎不动,账单为什么差这么多?。
2026-10-30 起默认改了什么
在这套默认之前,不少团队会把「部署完成」读成「每个 Durable Object 实例都已切完」。Changelog 与 Durable Objects 文档给出的新基线正好相反:
- 默认模式:
deferred - 默认延迟: 省略字段时
max_delay= 300 秒(5 分钟) - 允许范围:
0–86400秒(24 小时);API 接受处可到毫秒精度
活跃的 Durable Object 可以继续跑当前代码,直到休眠或触及 max_delay。延迟到期时若仍活跃,运行时会重置对象并加载新代码。休眠之后,唤醒它的下一次请求使用新版本。
所以 CI 里部署已经绿了,粘着的 Agent 会话、alarm 处理或 WebSocket 仍可能像昨天的构建一样跑上几分钟。
immediate 与 deferred
实务上就两种模式:
| 模式 | 行为(按 Durable Objects 文档) |
|---|---|
immediate | 立刻重置并采用新代码,不等休眠。 |
deferred | 尽力等待休眠,上限是 max_delay。 |
还有紧凑写法:{ "mode": "deferred", "max_delay": 0 } 实质立刻应用。意图若是「现在就重置」,显式 immediate 半年后再看也不费解。
Hibernation WebSocket。 Changelog 写明:使用 Hibernation API 的 WebSocket,在对象休眠并随后采纳新码时可以保留连接。这对 Agent UI、长聊天套接字很有用——也正因为如此,不能把「连接还在」读成「代码已经换完」。我们暂时还没有针对 2026-10-30 默认把每条 Hibernation WebSocket 路径都测过;以 Changelog 原文为准。
Wrangler:durable_objects.code_update_strategy
在 wrangler.toml/Wrangler 配置里,把策略写在 Durable Object bindings 同级(也包括只有 ctx.exports、没有显式 bindings 列表的 Worker):
[durable_objects]
# 示意形状 — 以当前 Wrangler schema 字段名为准
code_update_strategy = { mode = "deferred", max_delay = 300 }具体 TOML/JSON 写法随 Wrangler 代际可能不同;Durable Objects 文档里的字段名是 durable_objects.code_update_strategy(mode 与可选 max_delay)。省略该块的部署会回到平台默认 { deferred, 300 }——而且这次选择不会自动继承到下一次部署。每次省略都会重新落回默认。
CLI 优先于配置,且 deferred 必须带时长
Wrangler CLI 标志适用于 wrangler deploy、versions deploy 与 rollback:
--durable-objects-code-update-mode immediate--durable-objects-code-update-mode deferred <duration>——例如deferred 30s
按 Durable Objects 文档(不只看 Changelog 示例):CLI 上模式为 deferred 时必须带时长。优先级为:
- CLI 标志
- Wrangler 配置(
durable_objects.code_update_strategy) - 平台默认
{ deferred, 300 }
Changelog 示例常突出 immediate。运维侧仍以 文档规则——CLI 写 deferred 必须带 duration——为硬约束。
连续部署与独立计时器
同一对象保持活跃时连续发版 A、B、C,每次部署都会为该对象各开一个独立的 max_delay 计时器。最先到期的计时器触发时,对象采用当时已经部署的最新版本——不一定是启动该计时器的那一版。中间若有 immediate 部署,会立刻强制更新,并可跳过中间版本。
对 AI Agent 集群的含义:快速连发不等于保证「A→B→C」三次软着陆。计时器在竞速;第一个到期时在场的最新代码胜出(除非已经被 immediate 提前切开)。
渐进部署(gradual)
渐进放量调高某个 Worker 版本流量百分比时,deferred/immediate 机制只作用于新划入该版本的对象。已经在该版本上的对象不会因为百分比上调再被延迟一次。可能在 deferred 窗口与 gradual 期间并存的版本之间,Durable Object 状态与协议仍需前后兼容。
REST Create deployment:只写不回显
Create deployment 请求体可以带 code_update_strategy。该字段属于 deployment,不属于 Worker version 资源,且为 write-only:Create/get/list 响应不会回显策略。去往返 deployment JSON 找「已保存的模式」不会出现在响应里——若需要非默认策略,下次 Create 再写一遍。
作用范围:哪些 class 共用策略
同一 Worker 导出的全部 Durable Object class 在该次部署共用一条策略——包括只经 ctx.exports 暴露的 class。经 script_name 引用其他 Worker 的 class,由被引用 Worker 自己的策略控制。跨脚本绑定不会悄悄沿用调用方的部署策略。
尽力而为——以及策略管不到的地方
Durable Objects 文档把 deferred 明确写成尽力而为(best effort):
- 不保证切换前每项进行中的操作都干净收尾。
- 不保证对象跑满整个
max_delay(平台事件仍可能提前重置)。 - 策略不会推迟与发布新 Worker 版本无关的重启——例如 Workers runtime 更新。
因此 deferred 只是尽力而为:不保证零中断,不保证任务跑完,也不等于省费用。我们暂时还没有在 2026-10-30 默认下测量中断率或账单影响。
Agent/WebSocket 运维清单
- 默认从哪天起。 自 2026-10-30 起,除非配置或 CLI 另有说明,按 deferred + 300 秒预期。
- 意图。 必须立刻切的热修 →
immediate(或仅在有意时用 deferred +max_delay: 0)。可以等休眠 → deferred 并显式写max_delay。 - CLI deferred 必带时长。 如
deferred 30s——不带 duration 的裸deferred不符合文档规则。 - 每次部署重新声明策略。 省略即回平台默认;跨部署不继承。
- 连续部署。 独立计时器;最先到期采用当时最新已部署版本。
- gradual ≠ 全员再延迟。 进入延迟路径的只有新划入该版本的对象。
- REST 不回显。 Create deployment 上的
code_update_strategy只写不回。 - Hibernation WebSocket。 连接可能跨过休眠与换码仍存活;应用协议仍需单独确认。我们暂时还没有测过全部边角。
- 兼容性。 在可能重叠的版本之间,Durable Object 存储与消息格式保持兼容。
- 相关的 Workers AI 话题。 Workers AI 面上的缓存/隔离问题是另一篇——见上文 GLM-5.3 KV 缓存链接。
小结
Durable Objects 在部署成功之后,仍可能最多约五分钟继续提供旧代码,因为自 2026-10-30 起,平台基线就是 deferred 外加默认 300 秒 的 max_delay。重置才是正确产品行为时用 immediate;可以等休眠则保留 deferred——deferred 只是尽力而为,不保证任务完成或持续可用。改生产部署前,以 Durable Objects 文档核对现行 CLI 与配置 schema。
