Cloudflare Workers 边缘计算

Cloudflare Workers

把你的代码丢到全球几百个机房里跑,用户访问时由最近的机房执行,不用管服务器。

计算与运行时出现时间 · 2017 年前后每天 10 万次请求免费;付费版 5 美元/月起,按请求数与 CPU 时间计费。Serverless边缘计算V8 隔离JavaScript
看官方文档

01 它是干嘛的

Workers 是「无服务器函数」的一种,但部署位置从「某区域的机房」变成「全球每个边缘节点」。它适合处理请求改写、鉴权、A/B 测试、轻量 API,特点是冷启动几乎为零,且能把后端逻辑搬到离用户 20 毫秒的地方。

02 为什么会有它

传统函数计算的两个痛点:冷启动与「只在某一个地区」

传统 Serverless(如早期 Lambda)很方便,但有两点不理想:一是冷启动,函数长时间没人调用后被回收,下一次请求要先「开机」,可能多花几百毫秒到几秒;二是部署区域,函数跑在某个区域(如美东),亚洲用户调用要跨洋,网络延迟无法消除。

这两点都源于底层用了容器或虚拟机来隔离代码。Cloudflare 换了一条路:基于浏览器的 V8 引擎自研隔离技术(Isolate),不做进程级隔离而做引擎级隔离。一个实例里能同时跑上千个用户代码,启动成本几乎为零,内存开销降到几 MB。

结果是开发者第一次可以「写一次、全球部署、毫秒响应」,代价是运行环境受限(没有自带文件系统、不能跑任意二进制、初始 CPU 时间有上限),因此它擅长处理请求链路,不擅长跑长任务。

03 它怎么工作

代码上传后被分发到全球节点,请求到达时在同一进程内创建轻量隔离实例执行,省掉了启动操作系统的开销,因此冷启动通常在毫秒级。

边缘函数为什么几乎没有冷启动① 就近执行② 读写边缘数据③ 需要时再回源同进程内互相隔离用户请求最近的那个节点其他租户的代码同一个进程里你的代码隔离实例毫秒级创建边缘 KV / 配置就近读取外部 API / 源站需要时才远程调用不用容器、不用起一个进程,所以冷启动几乎为零。隔离实例请求流向
注意「同一进程内多个隔离实例」这个画法:这是 Workers 冷启动接近零的根本原因,也是它区别于容器型 Serverless 的地方。

零冷启动是怎么做到的:V8 Isolate 与边缘调度

  1. 1
    ① 代码随流量就近加载

    wrangler deploy 之后,代码包被复制到全球边缘节点,用户请求只会在本地节点执行。

  2. 2
    ② 请求进入最近的隔离实例

    节点复用常驻的 V8 进程,在同一进程里为不同租户建立隔离实例,避免重复启动。

  3. 3
    ③ 执行你的处理逻辑

    可以改写请求头、查询 KV、调用外部 API 或直接返回响应,整个执行受 CPU 时间上限约束。

  4. 4
    ④ 访问边缘数据

    KV 做全球最终一致的配置读取,D1 做关系数据查询,R2 存文件,Queues 做异步任务。

  5. 5
    ⑤ 返回并触发后续动作

    响应直接给用户;需要异步处理的(写日志、发消息)用 ctx.waitUntil() 在后台继续跑。

04 谁在用它

请求改写与路由

根据用户国家、设备、A/B 分组,把请求转发到不同后端或返回不同页面,源站代码零改动。

边缘 API 与 BFF

把鉴权、聚合、格式化放在边缘,后端只提供原子接口,移动端少跑几次远距离请求。

轻量后端服务

配合 D1、KV、R2 搭建博客、短链、待办清单等完整小应用,无需租用服务器。

定时任务与 webhook

用 Cron Triggers 定时跑清理任务,或接收第三方 webhook 后异步处理。

05 怎么用

需要一点 JavaScript/TypeScript 基础,但脚手架非常顺,5 分钟能跑出第一个「Hello World」。

  1. 01安装命令行工具:npm i -g wrangler,登录:wrangler login。
  2. 02创建项目:npm create cloudflare@latest my-worker,选择 Hello World 模板。
  3. 03本地开发:npm run dev,浏览器打开 localhost 调试。
  4. 04编写处理逻辑,导出 fetch 函数接收请求、返回 Response。
  5. 05发布上线:npm run deploy,几秒后即可通过 <项目名>.<账号>.workers.dev 访问。
  6. 06需要数据时绑定 KV / D1 / R2 / Queues,并在 wrangler 配置中声明绑定关系。
一个最小的 Workers 程序ts
export default {
  async fetch(request, env, ctx) {
    const url = new URL(request.url)

    // 1) 按路径返回不同内容
    if (url.pathname === '/api/time') {
      return Response.json({ now: Date.now(), edge: request.cf?.colo })
    }

    // 2) 读取 KV 中的配置(最终一致,读多写少场景)
    const config = await env.MY_KV.get('site-config', 'json')

    // 3) 生成响应,并加上缓存指令让边缘直接缓存
    return new Response(`Hello from the edge. Config: ${JSON.stringify(config)}`, {
      headers: {
        'content-type': 'text/plain; charset=utf-8',
        'cache-control': 'public, max-age=60'
      }
    })
  }
}

避坑提示

  • !默认请求总时长上限 30 秒、CPU 时间更短,长任务(视频转码、大文件处理)应交给专用服务。
  • !不要用进程内全局变量存业务数据,隔离实例可能被回收或复用,状态必须落到 KV/D1/R2。
  • !依赖的 npm 包要在边缘环境兼容(不能用 node 原生模块如 fs),选包前先确认。

06 关键概念

Isolate
V8 引擎级的隔离沙箱,比容器轻得多,是零冷启动的关键。
KV
全球分布的键值存储,读取极快,写入有延迟(最终一致),适合配置与静态数据。
冷启动
函数长时间未调用后的首次启动耗时,Workers 里通常可忽略。
BFF
Backend for Frontend,为前端定制的聚合层,常放在边缘以缩短链路。

07 容易混淆的对比

AWS Lambda@Edge / CloudFront Functions与 AWS CDN 绑定,生态成熟,但开发调试体验与语言限制相对严格。
Vercel / Netlify Functions面向前端框架的托管平台,开发体验极佳,底层也常跑在类似边缘运行时上。
图软件图鉴

纯静态站点,无后端、无追踪。内容为中文原创撰写,用于帮助非技术读者理解主流软件产品。

关于本站

全部内容在构建时生成
产品名称与商标归各自公司所有

© 2026 软件图鉴Nuxt 4 · Vue 3 · Tailwind 4 · 纯静态