Cloudflare Workers 是什么

Cloudflare Workers 是 Cloudflare 提供的 Serverless 运行环境:把一段 JavaScript / TypeScript(也支持 Python 和编译成 WebAssembly 的 Rust、Go 等)部署到 Cloudflare 全球的边缘节点上,请求打到离用户最近的节点时直接在那里执行代码并返回响应,不需要自己管服务器。

和 AWS Lambda 这类传统 FaaS 相比,主要区别在运行时:

对比项 Cloudflare Workers 传统 FaaS(如 Lambda)
隔离方式 V8 Isolate,多个 Worker 共享一个进程 容器 / microVM
冷启动 毫秒级,基本可忽略 百毫秒到秒级
部署位置 全球所有边缘节点 选定的一个或几个 region
运行时 类浏览器的 Web 标准 API(fetch、Request、Response 等),部分兼容 Node.js API 完整的 Node.js / Python 等运行时
限制 CPU 时间、内存(128 MB)、包体积有限制 限制相对宽松

V8 Isolate 是 Chrome 的 JS 引擎里用来隔离不同页面的机制,开销比容器小很多,所以冷启动快、单机能跑大量 Worker;代价是不能运行任意二进制,也不能使用依赖原生模块的 npm 包。

典型用途

  • 在 CDN 层改写请求和响应:加 header、重定向、A/B 测试、按地区返回不同内容
  • 轻量 API 后端:配合存储服务直接写业务逻辑
  • 鉴权网关:在请求到达源站之前校验 token
  • 定时任务:Cron Triggers 按 cron 表达式触发 Worker
  • 给静态站点补动态能力:Cloudflare Pages 的 Functions 底层就是 Workers

配套存储和服务

Worker 本身无状态,需要状态时用 Cloudflare 的配套服务,通过 binding 注入到 env 里使用:

服务 说明
KV 全球分布的键值存储,读多写少,最终一致
D1 基于 SQLite 的关系型数据库
R2 对象存储,兼容 S3 API,无出口流量费
Durable Objects 带强一致状态的单实例对象,适合协同、计数、WebSocket
Queues 消息队列
Workers AI 在边缘调用推理模型

一个最小的 Worker

用官方脚手架创建项目:

npm create cloudflare@latest hello-worker
cd hello-worker

src/index.js:

export default {
  // Called for every HTTP request routed to this Worker
  async fetch(request, env, ctx) {
    const url = new URL(request.url);
    if (url.pathname === "/hello") {
      return new Response("hello from the edge\n");
    }
    // Request metadata provided by Cloudflare, e.g. country code
    return Response.json({ path: url.pathname, country: request.cf?.country });
  },
};

配置文件 wrangler.toml(新版本脚手架也可能生成 wrangler.jsonc,字段相同):

name = "hello-worker"
main = "src/index.js"
compatibility_date = "2026-10-01"

# Bind a KV namespace, available as env.MY_KV in code
# [[kv_namespaces]]
# binding = "MY_KV"
# id = "<namespace-id>"

本地开发和部署都用 Wrangler CLI:

# Run locally with the workerd runtime
npx wrangler dev

# Log in and deploy to Cloudflare
npx wrangler login
npx wrangler deploy

部署完成后默认得到一个 hello-worker.<子域>.workers.dev 的地址,也可以在后台或配置里给 Worker 绑定自己域名下的路由(routes)或自定义域名。

和 Cloudflare Pages 的关系

Cloudflare 后台里 Workers 和 Pages 放在同一个「Workers & Pages」入口下:

  • Pages 偏向静态站点托管,连 Git 仓库自动构建,本博客就部署在 Pages 上(见 Hugo + Cloudflare Pages 搭建博客)
  • Pages Functions 是在 Pages 项目里写的 Workers 代码
  • Workers 现在也支持 Static Assets,可以直接托管静态文件,Cloudflare 官方的方向是逐步把新项目引导到 Workers 上

如果只是纯静态站点,Pages 足够;需要较多服务端逻辑或要用 Durable Objects、Queues 等能力时,直接用 Workers 更顺手。用 IaC 管理 Pages 项目的写法见 Cloudflare Pages with OpenTofu。

免费额度和限制

免费计划(以官方文档为准,额度会调整):

  • 每天 10 万次请求
  • 每次请求 CPU 时间 10 ms(付费计划默认 30 s,可调)
  • 单个 Worker 压缩后体积 3 MB(付费 10 MB)

注意这里限制的是 CPU 时间,等待 fetch 子请求、等待数据库返回的时间不计入,所以做转发、聚合类工作时 10 ms 通常够用。

其他厂商的类似产品

AWS

AWS 有两个类似的产品,都挂在 CloudFront 下面:

产品 运行位置 特点
CloudFront Functions 全部 CloudFront 边缘节点 轻量 JS,执行时间在亚毫秒级,不能访问网络,也不能读写请求体;只适合改 header、重定向、URL 重写、简单校验 token;可配合 CloudFront KeyValueStore 存少量数据
Lambda@Edge CloudFront 区域边缘缓存(比边缘节点少) 本质是 Lambda,支持 Node.js 和 Python,能发网络请求、处理请求体;冷启动和价格都比 Workers 高,部署要从 us-east-1 复制出去

Workers 一个产品同时覆盖了这两者的场景。AWS 拆成「极轻量」和「完整 Lambda」两档,两者都不是 V8 Isolate 模式。普通 Lambda 只跑在选定的 region,不算边缘计算。

其他厂商

厂商 产品 说明
Fastly Compute(原 Compute@Edge) 基于 WebAssembly,支持 Rust、JS、Go,冷启动也很快,是 Workers 最直接的对标
Akamai EdgeWorkers JS,跑在 Akamai 的 CDN 节点上
Vercel Edge Middleware / Edge Functions 基于 V8 Isolate,和 Next.js 结合紧密;Vercel 近来更推 Node 运行时(Fluid compute)
Netlify Edge Functions 基于 Deno
Deno Deno Deploy V8 Isolate,模式和 Workers 很像
Google Cloud 无直接对应 Cloud Run、Cloud Functions 都是 region 级;Media CDN 和 Cloud Load Balancing 的 Service Extensions 支持 Wasm 插件,可在边缘改请求,但能力有限
Azure 无直接对应 Azure Functions 是 region 级;Front Door 只有规则引擎,不能跑通用代码
阿里云 ESA 边缘函数(前身 DCDN EdgeRoutine) JS,跑在阿里云边缘节点
腾讯云 EdgeOne 边缘函数 JS,接口风格和 Workers 接近

怎么选

  • 已经在用 CloudFront,只做简单的请求改写:CloudFront Functions;需要更多能力再上 Lambda@Edge
  • 想要全球部署、冷启动可忽略、还带存储(KV / D1 / R2)的完整方案:目前 Cloudflare Workers 最完整,Fastly Compute、Deno Deploy 也是这个方向
  • 面向中国大陆用户:国外这些产品在大陆没有节点或需要备案,一般用阿里云 ESA 或腾讯云 EdgeOne

各家产品和限额变化较快,以官方文档为准。

参考