Cloudflare Workers RPC 链路追踪:慢请求卡在哪一跳,一眼看清

Cloudflare Workers 现已支持跨 JavaScript RPC 边界追踪请求,把调用方、下游 Worker、Durable Object、嵌套调用与回调串进同一条时间线。本文详解慢请求定位、span 读取、采样设置和按 span 计费逻辑,帮助团队在全面启用前测清事件量、保留期与配额影响。

Thursday, September 17, 2026Omid Saffari
Cloudflare Workers RPC 链路追踪:慢请求卡在哪一跳,一眼看清

2026 年 9 月 17 日,Cloudflare 让慢请求的责任边界更容易定位:Cloudflare Workers 链路追踪现在能沿着 JavaScript RPC 调用进入另一个 Worker 或 Durable Object,不再停在调用方。还没添加手动 span,也不用先怀疑整套系统,就能看出究竟是哪项服务、哪个方法拖慢了请求。

Cloudflare Workers 链路追踪补上的,是中间那一段

RPC 并没有听起来那么复杂。在 Cloudflare Workers 中,远程过程调用就是一个 Worker 通过 binding,调用另一个 Worker 或 Durable Object 暴露的 JavaScript 方法。代码写起来像本地方法调用,实际工作却在别处执行。

Trace 是一次请求的完整时间线,其中每个带计时的片段叫作 span。在这次更新之前,一旦调用方跨过 JavaScript RPC 边界,这条时间线就会中断。你能看到 Worker A 发起调用,却无法把它与 Worker B 或 Durable Object 中真正执行的工作清楚地连起来。

Cloudflare 9 月 17 日发布的更新 补上了这段空白。现在,同一条 trace 可以依次呈现调用方的 session、每次方法调用、被调用方的 invocation、嵌套调用,以及回调到另一个 Worker 的过程。只要启用 tracing,Cloudflare 就会自动记录这些 span。平台会直接完成这层埋点,不需要接入可观测性 SDK,也不用修改应用代码。

Session span 是调用方 RPC session 的容器;复用同一 session 的调用都会收在其中。每个 call span 会记录方法名或属性路径,被调用方则拥有自己的 invocation span。执行从一个 Worker 转移到另一个 Worker,或进入 Durable Object 时,颜色也会随之变化。

原本空白的边界,就这样变成了一张责任归属图。

顺着一次结账请求追下去

以一条发往 POST /checkout 的客户请求为例。

请求先进入 checkout Worker。它会在 inventory Worker 上调用 inventory.reserve(),再在 order Durable Object 上调用 order.commit()。客户感受到的只是一次缓慢的结账,但等待时间可能落在应用里的三处不同位置。

在这次更新之前,checkout 的 trace 可能到 RPC 调用处就戛然而止。要还原后续过程,只能分别查阅各项服务的日志、比对标识符,或自行添加 span。

现在,一条 trace 就能把整次请求串起来。展开 RPC session 后,可以找到 reservecommit 的 method span,看到下游 invocation,并比较实际耗时究竟集中在哪里。Root span 还可以携带 Cloudflare Ray ID、Worker 名称、entrypoint、outcome、CPU time 和 wall time,为处理事故的人提供定位目标请求所需的线索。

展示一次结账请求依次跨过 checkout Worker、inventory Worker 和 order Durable Object 的架构模型,慢速跳转被高亮标出
同一个客户请求现在呈现为一条连贯路径,不再是几段割裂的服务时间线。

这个新视图无法直接证明某个方法为什么慢,却能告诉你下一步该查哪里。如果大部分等待时间落在 inventory invocation,就检查它的存储或上游依赖;如果 Durable Object 调用对应的 span 最宽,就检查该对象的 handler 和存储操作;如果还没开始任何 RPC,调用方就已经很慢,那么下游服务不该是最先被怀疑的对象。

哪些团队最能从中受益

后端已经拆分的独立创业者

把 checkout、inventory 和 order state 分别运行在不同 Worker 上的创业者,可以复现一次缓慢购买,并沿着整条 Cloudflare 路径查下去。最大的收益是缩小排查面:只调查真正承载延迟的 Worker 或 Durable Object,不必重新翻查每项服务。

负责有状态产品的后端负责人

一款协作应用可能会让房间操作先经过边缘 Worker,再进入该房间对应的 Durable Object。后端负责人可以区分时间究竟花在调用方还是有状态对象内部,再把 trace 交给负责该边界的团队。

维护内部 Worker 服务的平台工程师

平台团队可能通过 service binding 连接了多个 Worker,返回的 stub 和回调又让整条路径很难从日志中复原。Session span 和 method span 能显示哪些调用复用了同一 session、每个环节由哪个 Worker 执行,以及嵌套调用从哪里进入这条路径。

需要把客户反馈变成证据的支持负责人

趁事故细节还清晰,支持团队可以请工程团队复现同一条路径。得到的 trace 会明确指出服务名称和方法边界,比“结账感觉很慢”更适合交接。即便最终仍需查看日志、性能分析器或数据库查询计划,这份证据同样有用。

先用一条路径做“周一测试”

第一次上线时,最有价值的做法是先选一条请求路径,而不是一次性覆盖所有生产 Worker。

  1. 选一条客户能感知的路径

    选择一条已经跨过 Worker-to-Worker 或 Worker-to-Durable Object RPC 边界、而且可以稳定复现慢速情况的请求。记下路由、预期发生的下游方法调用,以及准备复现的时间。

  2. 在 Wrangler 中启用 trace

    按照 Cloudflare 文档,为处理这条路径的 Worker 在 Wrangler 配置中加入以下设置:

    Jsonc
    {
      "$schema": "./node_modules/wrangler/config-schema.json",
      "observability": {
        "traces": {
          "enabled": true
        }
      }
    }

    按团队平时的发布流程部署这项配置。这个开关会启用 Cloudflare 的自动 span,不要求在 Worker 内接入 SDK。

  3. 复现一次慢请求

    在受控条件下只运行一次相同请求。保留路由和时间戳;如果支持或日志流程已经记录 Cloudflare Ray ID,也一并保留。受控环境更清晰,因为如果没有另行设置,默认 trace 采样率是 1,也就是追踪 100% 的传入请求。

  4. 从外向内阅读 trace

    在 Cloudflare 中进入 Workers & Pages,选择对应 Worker,再打开 Observability。找到刚刚复现的请求并展开 trace。先看根请求,随后依次查看 RPC session、调用方的 method span、被调用方的 invocation,以及嵌套的 Durable Object 调用。结合 span 宽度与 wall-time 字段,找到最值得继续调查的边界。

  5. 扩大上线前先算清账单

    记录这次复现生成了多少个 span,再用 sampled requests × average spans per sampled trace 估算每月的 trace 事件数量。别忘了加上同样占用可观测性配额的现有日志事件。实测得到的 span 数量,才是决定生产采样率的依据。

成本按 span 计算,不按请求计算

Workers tracing 在最初的 beta 阶段免费。这一安排会在 2026 年 10 月 1 日改变:从当天起,每个 span 都按一个 observability event 计数,并与 Workers Logs 共用配额和定价。

套餐包含的可观测性事件保留期超额费用
Workers Free200,000/天3 天未公布超额费率
Workers Paid20 million/月7 天每额外一百万个事件 $0.60

Enterprise 团队需要查看各自的合同。其他团队则要特别留意计费单位:一次客户请求可能生成 root span、RPC session span、method-call span、被调用方 invocation 和嵌套 binding span。只看请求数量,算不出 trace 账单。

Cloudflare 的 tracing 文档 说明,head_sampling_rate 的默认值是 1,即 100%。文档中的高流量示例使用 0.05,也就是每百个传入请求追踪 5 个。这只是一个控制手段,并非适用于所有场景的标准答案。

Head sampling 的取舍很直接:采样率越低,事件量越少,但是否采样会在请求一开始就决定,罕见的慢请求可能恰好没被选中。受控复现或隔离程度合适的环境可以使用全量采样;生产环境的采样率,则应根据实际流量和实测的每条 trace span 数量来定。

保留期也会改变事故处理流程。Free 套餐的 trace 保留 3 天,Paid 套餐保留 7 天。如果客户反馈晚于这个窗口才到达,需要的 trace 可能已经消失。操作原则很简单:趁证据还在时复现并检查;否则,就把 trace 导出到满足团队保留期要求的系统中。

这项能力有哪些明确限制

Workers tracing 仍处于公开测试阶段。Span 和属性的名称可能改变,Cloudflare 也表示部分属性仍不完整。

有些非 I/O span 即使实际执行时间更长,也可能显示 0 ms。Workers Runtime 要等到发生 I/O 事件才会更新时间,因此显示为零并不能证明某段 JavaScript 没有耗时。

离开 Cloudflare 后,trace 也无法继续自动贯通。导出 Workers trace 时,Cloudflare 目前还不会把 trace ID 传递给外部服务。因此,调用支付服务商或托管在其他地方的数据库时,外部供应商一侧的 trace 不会自动接到 Workers 时间线上。

最后,这次更新的适用范围很窄。对于没有 JavaScript RPC 边界的单个 Worker,它不会带来新的跨服务视图。常规 Workers tracing 对 fetch、binding 和 handler 仍可能有帮助,但 9 月 17 日的更新,主要惠及已经拆分到多个 Worker 或 Durable Object 的应用。

现在该怎么做

如果客户请求会跨过 service binding 或 Durable Object,而团队目前需要拼接多份日志才能找到缓慢的那一跳,就该在本周行动。先从最消耗支持或事故处理成本的路径开始。

如果应用仍只有一个 Worker,或怀疑延迟完全发生在外部服务商内部,可以暂缓。这次更新不会在 Cloudflare 之外创建贯通的 trace。

如果 tracing 已经启用,先查看新增的 RPC span,再决定是否添加自定义埋点。只有当自动 trace 显示你负责的方法内部仍存在明显空白时,才需要自定义 span。

周一要做的事情并不复杂:为一条真实请求路径启用 observability.traces.enabled,复现慢请求,检查 RPC session 与 method span,然后在扩大上线范围前,记下采样率、每条 trace 的平均 span 数量、保留期和预期配额用量。

如果希望平台变化影响工作方式或账单时,只收到一条清晰的操作提示,欢迎订阅邮件通讯。

最近更新
2026年9月17日
分类
Explained

在 Google 中优先显示本站

将 omidsaffari.com 添加为 Google 搜索的优先来源

把 omidsaffari.com 设为优先来源,Google 会在 Top Stories、AI Overviews 和 AI Mode 中为您优先展示。

Vercel 价格不只是月费:Hobby 旧预览可能撑不到 30 天

Vercel 价格不只是月费:Hobby 旧预览可能撑不到 30 天

Vercel Hobby 团队一旦超过 10GB Deployment Storage,未受保护的预览或生产部署可能在 30 天保留期结束前被删除。本文拆解仍受保护的部署、检查存储与回滚目标的方法,以及清理历史记录和升级 Pro 时应按完整 $20 月费而非单独存储单价做出的取舍。2026年9月17日Explained
Cloudflare AI Gateway:别让客户请求记到你的账上

Cloudflare AI Gateway:别让客户请求记到你的账上

Cloudflare AI Gateway 新增“要求提供商凭据”控制:缺少适用密钥的第三方请求会直接返回 HTTP 400,不再回退到 Unified Billing。本文拆解凭据优先级、5% 充值费、BYOK 别名限制、Workers AI 例外,以及从单一路由到全网关上线前必须完成的测试。2026年9月17日Explained
Cloudflare Hyperdrive 打通 Python Workers 与现有数据库

Cloudflare Hyperdrive 打通 Python Workers 与现有数据库

Cloudflare Hyperdrive 现已让 Python Workers 直接连接现有 PostgreSQL 和 MySQL 数据库。本文拆解何时可删除数据库桥接服务、Workers 与 Hyperdrive 的费用边界、驱动和 ORM 限制,并给出从 SELECT 1 到真实路由验证的安全迁移步骤。2026年9月16日Explained
Gemini 3.8 Live:后台查询时,AI 语音助手也能继续对话

Gemini 3.8 Live:后台查询时,AI 语音助手也能继续对话

Gemini 3.8 Live 支持异步函数调用,让 AI 语音助手在日历、订单或预订系统后台查询时继续与来电者沟通。本文拆解标准版与 Extended Thinking 的适用场景、完成信号、音频成本和生产风险,并给出用真实完成任务成本验证试点效果的方法,帮助团队避免误把中间播报当成任务完成。2026年9月16日Explained
Cloudflare Worker 权限细化:把客户部署锁定到单个 Worker

Cloudflare Worker 权限细化:把客户部署锁定到单个 Worker

Cloudflare 现已支持按单个 Worker 配置细粒度权限。本文说明代理商如何用账户拥有的 API Token 将客户 CI 部署限制在一个现有 Worker,并梳理 Editor、Admin、绑定资源、Durable Objects 与 Routes 的实际权限边界,帮助团队缩小凭证泄露后的排查与处置范围。2026年9月15日Explained
Claude Code 网络权限收紧:依赖安装结束即关闭访问

Claude Code 网络权限收紧:依赖安装结束即关闭访问

Claude Code 2.1.271 为沙箱自动模式加入按命令限定的网络权限。本文拆解 allowed_domains 与持久白名单的区别,并用 npm ci 展示如何只在依赖安装期间开放软件源、让后续测试重新回到无网络状态,同时说明托管策略、域名过滤与非沙箱回退仍会如何影响真实边界。2026年9月15日Explained
Vercel AI SDK 订阅计费拆解:Claude Code 与 Codex 到底由谁买单

Vercel AI SDK 订阅计费拆解:Claude Code 与 Codex 到底由谁买单

Vercel AI SDK 可调用宿主机已登录的 Claude Code、Codex 等订阅额度。拆解 auto、direct 与 ai-gateway 的凭证优先级,说明模型费用会落到套餐、供应商 API 还是 AI Gateway,并算清单独支付的 Vercel Sandbox 成本,帮助个人与团队选对计费路径。2026年9月15日Explained
Cloudflare Browser Run 实测:无头浏览器如何锁定域名并开放只读审阅

Cloudflare Browser Run 实测:无头浏览器如何锁定域名并开放只读审阅

Cloudflare Browser Run 新增会话域名白名单和只读 Live View。本文拆解两道边界的适用范围、配置步骤、常见失效点与 Browser Sessions 计费变化,并给出面向客户交付的验证流程和成本公式,帮助你判断这套无头浏览器控制是否值得用于真实客户项目。2026年9月14日Explained
订阅通讯

每周日,一封信。写运转中的系统,不写热评。

每周一期。无垃圾邮件。随时退订。