在做 灰度发布、HTML 缓存、智能路由 时,很多同学都会纠结一个问题:
自己写 Cloudflare Worker,真的能比阿里云 DCND + 负载均衡更快吗?
DCND 会不会存在"两次回源"?Worker 是不是最多一次?
这篇文章从真实请求链路 出发,拆清楚这两个方案的结构差异,以及它们在实际工程中的优劣。
一、先统一一个概念:什么叫「回源」
为了避免概念混乱,先统一口径:
- 回源 :
指请求从 CDN / 边缘节点 打到业务源站 - 不包含 DNS
- 不包含边缘规则 / Worker 执行
二、DCND 的真实请求链路(为什么看起来像"两次回源")
1️⃣ 典型 DCND + 负载均衡架构
在很多生产环境中,DCND 并不是直接连业务容器,而是:
plain
用户
↓
阿里云 DCND 边缘节点
↓(缓存未命中)
DCND 回源(第 1 跳)
↓
阿里云 SLB / ALB
↓
负载均衡转发(第 2 跳)
↓
真实业务源站(ECS / K8s / Ingress)
2️⃣ 为什么工程师常说 DCND 是"两次回源"?
从严格定义上说:
- DCND 只"回源"了一次
- SLB → ECS 不算 CDN 回源
但从真实网络视角看:
- 源站请求经过 两次网络跳转
- 两次 TCP / TLS / 转发路径
- 两次排队与调度
👉 对延迟和抖动来说,本质就是两跳
所以很多一线工程师会说:
"DCND + 负载均衡,本质是源站被打了两层"
三、Cloudflare Worker 的请求链路(天然更轻)
1️⃣ Worker + 单源站(无缓存命中)
plain
用户
↓
Cloudflare 边缘节点(Worker 执行)
↓
回源(仅 1 次)
↓
业务源站
特点非常明确:
- 灰度逻辑在 边缘执行
- 没有额外负载均衡跳转
- 最多一次回源
2️⃣ Worker + Cache / KV 命中(最优路径)
plain
用户
↓
Cloudflare 边缘节点
↓
直接返回(0 次回源)
这在以下场景中尤其明显:
- HTML 页面缓存
- 灰度版本隔离缓存
- KV 控制版本号
👉 这是 DCND 很难做到的部分
四、回源次数与链路复杂度对比
| 架构方案 | 边缘逻辑 | 源站跳数 | 典型特征 |
|---|---|---|---|
| DCND + SLB | 规则系统 | 2 跳 | 稳定但重 |
| DCND + 多级转发 | 更复杂 | 2~3 跳 | 延迟累积 |
| Cloudflare Worker | JS 逻辑 | 1 跳 | 轻 |
| Worker + Cache/KV | JS + KV | 0 跳 | 极快 |
结论很清晰:
从"链路结构"上,Worker 更容易做到「最多一次回源」
五、但为什么 DCND 在国内仍然很强?
这里有一个必须承认的现实:
⚠️ 跳数少 ≠ 一定更快
DCND 在中国大陆的优势不在结构,而在网络质量:
- 节点在国内
- 与三大运营商深度合作
- 丢包率低、链路稳定
- TCP / 弱网优化激进
而 Cloudflare Worker:
- 节点在境外
- TLS / TCP 穿境
- RTT 抖动不可控
👉 所以在纯国内访问场景下:
- DCND 即使多一跳,仍然可能更稳、更快
六、Worker 真正的结构性优势在哪里?
Worker 的优势不在"网络工程" ,而在 "计算架构":
- 灰度发布(Cookie / UID / Header)
- HTML 动态缓存
- KV 版本控制
- 秒级规则生效
- 逻辑即代码(可测试、可回滚)
一句话总结:
灰度本质是逻辑判断,而逻辑写在 Worker 里,是最短路径。
七、工程级结论(不是选边站)
✅ 正确的架构思路不是二选一
plain
【中国大陆用户】
DNS → 阿里云 CDN / DCND → 国内源站
【海外用户】
DNS → Cloudflare Worker
→ 灰度逻辑
→ Cache / KV
→ 海外源站
- DCND:负责国内网络稳定性
- Worker:负责灰度、路由、版本、HTML 缓存
八、最后一句总结
Cloudflare Worker 写得好,不是"比 DCND 快",而是"比 DCND 更聪明"。
在该它上的地方,它能做到 0~1 次回源;
在不该它上的地方,网络条件会成为瓶颈。