Back to Blog

为什么 Cloudflare 能做到毫秒级冷启动,而其它云厂商却不行?

Serverless 冷启动 V8 Isolates 边缘计算 Cloudflare Workers
ErpanOmer
ErpanOmer
· 2026-07-21 · 10 min read
为什么 Cloudflare 能做到毫秒级冷启动,而其它云厂商却不行?

如果你在真实的商业项目里大规模用过传统的 Serverless(无服务器计算),你一定经历过一种极其痛苦的折磨:冷启动(Cold Start)

当你的接口半小时没人访问后,底层的云函数会自动休眠。如果有倒霉的用户在这个时候点了一下按钮,他可能要死死盯着屏幕上的 Loading 圈转上整整 3 到 5 秒钟,接口才会极其艰难地返回数据。

无数后端工程师为了解决这个 3 秒钟的延迟,想尽了各种歪门邪道:写定时脚本每分钟去空跑一次接口(俗称保活热启动)、预留大量的闲置并发实例。

但这简直是一个巨大的工程悖论:我们为了省钱拥抱 Serverless,结果为了对抗冷启动,又不得不花钱去养着那些闲置的机器。

直到 Cloudflare Workers 横空出世(白嫖神奇🤣🤣🤣),冷酷地甩出了一个违背常理的指标:0 毫秒冷启动

为什么在极其烧钱的云计算领域,其他巨头云厂商(如 AWS Lambda,阿里云)砸了上百亿,依然在几百毫秒的冷启动里苦苦挣扎,而 Cloudflare Workers 却能轻松做到极致的毫秒级?

这根本不是谁的代码写得更好的问题,这是一场底层架构的降维打击🖐️


传统 Serverless 到底为什么慢?

要搞懂 Cloudflare 为什么快,你必须先看懂传统 Serverless 到底为什么慢。

传统的云函数(比如 AWS Lambda),为了保证极其严格的多租户安全隔离,底层采用了微虚拟机(MicroVM,比如 Firecracker)或者是极度阉割版的 Docker 容器。

当一个休眠的冷请求打过来时,云厂商的机器到底在后台疯狂地忙些什么?

ChatGPT Image 2026年7月21日 10_13_34.png

它必须先在物理机上冷启动一个 Linux 操作系统内核。
然后分配隔离的虚拟内存和网络栈。
接着启动一个庞大的 Node.js 运行时进程。
最后,把你的业务代码载入内存并执行。

哪怕这套流程被巨头们优化到了极致,受限于物理层面的 OS 启动规律,它也必然要消耗几百毫秒甚至几秒钟。这就好比,你只是想喝一口水,但云服务商为了绝对的安全,每次都硬生生地给你新造了一个杯子,甚至现造了一台饮水机。

这就是基础设施的物理超载🫵


V8 Isolates 掀翻了这个桌子!

Cloudflare 怎么破局的?他们看了一眼传统的容器架构,直接把桌子掀了:我们不要操作系统了,也不要庞大的 Node.js 进程了。

他们直接把谷歌 Chrome 浏览器底层的 V8 引擎剥离出来,部署在了全球几百个边缘节点上。

Cloudflare Workers 里,不同用户的代码不再运行在独立的操作系统或者进程里,而是运行在同一个 V8 进程下的不同 Isolates(隔离区) 里。

ChatGPT Image 2026年7月21日 10_20_59.png

什么是 Isolate?你可以把它理解为浏览器里的一个标签页。你在 Chrome 里打开两个不同的网页,它们共用同一个底层的浏览器进程,但它们的内存堆、上下文是完全物理隔离的。

当你把代码部署到 Workers 时,当冷请求打过来,Cloudflare 不需要去启动任何操作系统,它只需要在已经永远常驻运行的 V8 引擎里,瞬间 new 出一个极轻量级的 Isolate 上下文,然后把你的 JavaScript 代码塞进去执行。

这个创建 Isolate 的时间是多少?不到 5 毫秒

对于人类和普通的网络波动来说,5 毫秒甚至比一个 TCP 握手的时间还要短得多,在体感上,它就是绝对的 0 毫秒冷启动


虽然但是为了极致的快,你必须牺牲什么?

商业世界永远没有免费的午餐。Cloudflare 之所以能达到这种变态的冷启动速度,是以极其严苛的开发环境限制作为代价的。这也是拉开普通开发和边缘架构师差距的深水区。

如果你只是一个天天写 Node.js 业务代码的熟练工,你在 Workers 环境里会寸步难行。

因为这里根本没有底层的 Linux 环境。你不能使用 fs 模块去读写硬盘,你不能用 child_process 去开辟子进程,你甚至不能随意使用那些依赖了 C++ 扩展的 NPM 原生包。你被极其严苛地锁死在了纯正的 Web Standard API(比如 fetchStreams)的沙盒里。

我们来看一段极具代表性的 Cloudflare Workers 网关拦截代码:

// 抛弃所有 Node.js 依赖,全盘拥抱 Web API
export default {
  async fetch(request: Request, env: Env, ctx: ExecutionContext): Promise<Response> {
    // 代码瞬间被 V8 解析并拦截,没有任何容器启动的物理开销
    const url = new URL(request.url);
    
    // 如果没有携带合法 Token,直接在边缘节点掐断请求
    // 恶意流量根本连触碰你核心数据中心源站的资格都没有
    const authHeader = request.headers.get('Authorization');
    if (!authHeader || authHeader !== `Bearer ${env.SECRET_TOKEN}`) {
      return new Response('Unauthorized Edge', { status: 401 });
    }

    try {
      // 必须利用原生的 fetch API 发起回源请求
      const response = await fetch(`https://api.core-backend.com${url.pathname}`, {
        method: request.method,
        headers: request.headers,
      });
      
      // 绕过极度严苛的 CPU 时长限制(通常单次请求仅限几十毫秒)
      // 将耗时的审计打点任务用 ctx.waitUntil 剥离到 HTTP 响应返回之后
      // 这保证了用户的请求绝对不会被后台逻辑拖慢
      ctx.waitUntil(this.logAnalytics(request, response.status));

      // 返回纯净的流,毫无物理阻力
      return new Response(response.body, response);
    } catch (error) {
      return new Response('Edge Gateway Crash', { status: 500 });
    }
  },
  
  async logAnalytics(req: Request, status: number) {
    // 这里执行异步的后台耗时任务,充分榨干边缘节点的空闲算力
  }
}

此外,你还必须面对极其严苛的 CPU 时间限制(通常一个请求只允许执行几十毫秒的 CPU 运算,一旦超时直接被强制杀死)和极度局促的内存上限(通常在 128MB 左右)。

那些在传统服务器上大手大脚、一次性把几百兆数据全塞进内存里做 JSON 转换的低劣代码,在边缘计算节点上连一秒钟都活不过去🫡。


其它云厂商为什么不抄 Cloudflare Workers

不是他们技术不行,而是他们面临的商业定位完全不同。传统的云厂商,必须保证你不仅能跑 JavaScript,还能跑 PythonGo,甚至古老的 Java 巨石应用。为了兼容极其复杂的企业级生态,他们别无选择,只能背上沉重的操作系统和容器外壳。

Cloudflare 作为一家做 CDN 和安全起家的公司,它从一开始就极度克制地选择了只服务于轻量、高频、无状态的边缘逻辑。但作为补偿,它赐予了你突破物理极限的响应速度和一些免费额度。

dash.cloudflare.com_ab2c40f8d8fefbaf5a28177590642968_workers_plans.png

(如果你们手中有轻量级前端项目,或者想白嫖存储和数据库,它的免费额度完全可以满足大家的需求😁,这不是在打广告哦👋)

今天的好东西就分享就到这里吧,谢谢大家🙏

谢谢大家.gif

喜欢我的 Blog 吗?你也可以部署一份属于你的第三空间!

详细的 🚀部署文档 以帮你安排好! 你的 Star 是对我持续开发的最大鼓励!点击右侧按钮前往 GitHub 支持我。

欢迎 Star !