大家好,我是程序员柏风,AI 最全的 Vibecoding 学习地图 http://coderoadmap.cn 作者。
边缘计算概览
这一课你将能做到
- 用一句话向同事解释什么是边缘计算、它和传统中心机房的本质区别
- 说清楚 Cloudflare Workers 与传统服务器(VPS / 容器 / Serverless 函数)的差异,并能判断什么场景该用 Workers
- 理解 V8 Isolate 模型为什么能让 Workers 做到毫秒级冷启动
为什么要学
你写完一个接口,部署到自己买的服务器上,用户在北京访问很快,但纽约用户要等 300ms 以上——因为物理距离摆在那里,光速也救不了。
人话:边缘计算就是把你的代码部署到离用户最近的机房。Cloudflare 在全球 300+ 个城市有数据中心,你的 Worker 代码会被复制到所有这些节点上,用户请求进来时,由地理上最近的节点处理。
对前端工程师尤其重要:本站前端是 Next.js,传统做法是部署到一个中心机房或 Vercel。但当用户遍布全球时,仅靠 CDN 加速静态资源是不够的——动态接口也需要「跑在边缘」。Cloudflare Workers 就是让你把动态逻辑(鉴权、改写、聚合、A/B 测试)放到离用户 50ms 以内的地方。
先建立图像
传统架构:
[北京用户] ── 30ms ──> [上海机房] <── 250ms ── [纽约用户]
│
[数据库]
边缘架构:
[北京用户] ── 5ms ──> [Cloudflare 北京节点] ─┐
├──> [源站/数据库(必要时回源)]
[纽约用户] ── 8ms ──> [Cloudflare 纽约节点] ─┘
Workers vs 其他方案的对比:
| 维度 | VPS / 容器 | AWS Lambda | Cloudflare Workers |
|---|---|---|---|
| 运行位置 | 固定机房 | 单 Region | 全球 300+ PoP |
| 冷启动 | 常驻 | 100ms - 数秒 | < 5ms(几乎为 0) |
| 计费模型 | 包月/按小时 | 请求 + 时长 | 请求次数 + CPU 时间 |
| 运行时 | Linux 全功能 | Linux 容器 | V8 Isolate(类浏览器) |
| 长连接 | 支持 | 受限 | 支持 WebSocket(DO) |
跟着做
步骤 1:注册并安装 Wrangler
到 https://dash.cloudflare.com 注册账号(免费套餐足够学习)。然后:
npm install -g wrangler
wrangler --version
wrangler login
wrangler login 会打开浏览器完成 OAuth 授权。
步骤 2:创建第一个 Worker
npm create cloudflare@latest my-first-worker -- --type hello-world --ts true
cd my-first-worker
选择「Hello World」模板 + TypeScript。生成后的 src/index.ts 大致如下:
export default {
async fetch(request: Request, env: Env, ctx: ExecutionContext): Promise<Response> {
return new Response('Hello from the Edge!', {
headers: { 'content-type': 'text/plain;charset=utf-8' },
});
},
} satisfies ExportedHandler<Env>;
步骤 3:本地启动
npx wrangler dev
控制台会输出 Ready on http://localhost:8787,用 curl 验证:
curl http://localhost:8787
# Hello from the Edge!
步骤 4:看看「边缘」到底发生了什么
修改代码,把请求的一些边缘信息打出来:
export default {
async fetch(request: Request): Promise<Response> {
const cf = (request as any).cf ?? {};
return Response.json({
colo: cf.colo, // 处理请求的机房代号(如 SJC、HKG)
country: cf.country,
city: cf.city,
timezone: cf.timezone,
asn: cf.asn,
});
},
} satisfies ExportedHandler<Env>;
重启 wrangler dev,访问后你会看到 colo 字段——本地开发时会显示最近的实际节点。
步骤 5:部署到全球
npx wrangler deploy
几秒钟后,Wrangler 会返回一个 *.workers.dev 域名。把它发给国外朋友访问,他们的请求会被路由到离他们最近的节点。
讲清楚要点
- 边缘计算 ≠ CDN:CDN 缓存静态内容,边缘计算执行你的代码。Cloudflare 既是 CDN,也是边缘计算平台。
- V8 Isolate 模型:传统 Serverless 为每个请求/并发启动一个容器或 microVM,Workers 复用同一个 V8 引擎进程内的 Isolate,冷启动几乎为 0,内存占用只有几 MB。
- 请求驱动模型:Worker 没有「常驻进程」,代码只在请求到达时运行,结束后回收。不能写
setInterval做后台任务(要用 Cron Triggers 或 Queues)。 - Worker 不等于完整的 Node.js:它是类浏览器运行时,支持 Fetch、Streams、WebCrypto、Cache API,但不支持
fs、net、child_process。需要 Node 兼容包时开启nodejs_compat。 - 免费套餐足够学习:每天 100,000 次请求免费,写 Demo、跑个人项目完全够用。
你可能会懵的地方
-
Worker 真的部署到全球 300+ 节点了吗? 是的。
wrangler deploy后,代码会自动同步到 Cloudflare 全网 PoP。但这不意味着每次部署都「瞬间」全球生效,通常需要几秒到几十秒的传播时间。 -
那数据库怎么办?也在边缘吗? 不完全是。D1、KV、R2 都是「边缘友好」的存储,但底层主副本仍在中心区域。这就是为什么 Cloudflare 提供 Durable Objects(强一致)和 KV(最终一致)两种不同语义。
-
Workers 能不能跑 Java? 不能。原生支持 JavaScript/TypeScript,其他语言通过 WebAssembly(Rust、C、Go 可以编译到 WASM)。Java 至今没有实用的 WASM 方案。
-
和 Vercel Edge Functions 有什么区别? Vercel Edge 底层跑的就是 Cloudflare Workers。区别是定价、生态、是否锁定 Next.js 平台。直接用 Cloudflare 通常更便宜、控制力更强。
-
我会不会被锁死? Worker 的
fetchhandler 是 Web 标准 API,业务逻辑容易迁移。但 KV、D1、Queues、Durable Objects 这些是 Cloudflare 特有的,迁出去要重写。
错法对照
| 错法 | 问题 | 正解 |
|---|---|---|
在 Worker 里 setInterval(fetch, 5000) 想定时拉数据 | Worker 没有后台执行环境,请求结束进程就停 | 用 Cron Triggers 或 Queues |
import fs from 'fs' 读本地文件 | 运行时没有文件系统 | 把数据放到 KV / R2 / D1 |
| 期望请求间共享全局变量存用户状态 | 同一 Worker 实例会被多请求复用,但不保证,且跨节点不共享 | 用 Durable Objects 或外部存储 |
写 await fetch(...) 不设置超时 | 上游挂掉时 Worker 会被拖到超时(默认 30s CPU/墙钟上限) | 用 AbortController 设置超时 |
| 在边缘直接连中心数据库做多次往返 | 抹杀边缘的低延迟优势 | 减少回源、用 KV 缓存、或用 Cloudflare Hyperdrive |
卡点急救
- 执行
wrangler login后浏览器没反应:在终端按提示复制 URL 到浏览器手动打开;或改用wrangler login --browser=false+ API Token 方式。 - 部署成功但访问 404:确认访问的是
*.workers.dev域名而不是自定义域名;自定义域名需要在 DNS 里把对应主机名接入 Cloudflare。 - 本地 dev 改了代码不生效:
wrangler dev默认监听文件变化,但偶尔失效,Ctrl+C 重启即可。
面试常问
-
Cloudflare Workers 冷启动为什么快? 它基于 V8 Isolate 而不是容器/虚拟机。Isolate 共享同一个 V8 进程,启动只需分配内存和加载 JS 代码,毫秒级;Lambda 这类方案需要拉起 Firecracker microVM,至少几十到几百毫秒。
-
边缘计算适合什么场景? 延迟敏感、读多写少、逻辑轻量的:API 网关、鉴权中间件、A/B 测试、Header 改写、地理位置路由、SSR 边缘渲染。不适合:长任务、重计算、强一致写、大状态。
-
如果数据库在美国,Worker 在欧洲节点运行,怎么办? 三条路:(1) 用 KV/D1 这种边缘存储减少回源;(2) 用 Durable Objects 把状态「钉」在用户附近;(3) 接受回源延迟,但用 Smart Placement 让 Worker 自动调度到离数据库最近的节点。
自测三问
- Worker 代码跑在哪个隔离层?它和 Docker 容器的区别是什么?
- 为什么在 Worker 里不能用
fs.readFile? - 举一个适合放在边缘的业务场景,再说一个不适合的。
小结一句话
边缘计算把代码搬到离用户最近的机房,Cloudflare Workers 用 V8 Isolate 实现了毫秒级冷启动的请求驱动 Serverless。
延伸
- Cloudflare Workers 官方文档
- How Workers works(Isolate 模型详解)
- 下一课:Wrangler 与本地开发,掌握脚手架、绑定、变量、密钥、模拟器全套工具链。