Cloudflare Workers 赋予开发者将无服务器代码即时部署到 Cloudflare 全球网络的能力。
Cloudflare Workers 在其执行模型和架构上与其他无服务器计算提供商显著不同。
单个 Worker 项目可以具备开发者所期望的复杂或简单的逻辑。较小规模的项目可能看起来像是一个在单个路由上返回小型 HTML 页面的 Worker。而更复杂的 Worker 项目将跨越多个域名、每个域名的多个路由以及每个路由的不同逻辑。开发者决定其 Worker 项目的架构复杂度。
你的应用程序可以由多个协同工作的 Workers 组成,并向最终用户交付单一体验。Workers 还可以与 Cloudflare 开发者平台的技术功能(如存储、媒体和 AI)集成。你将在 开发者平台模块 中了解更多相关信息。
Workers 运行时 ↗旨在符合 JavaScript 标准并支持 Web 互操作性。Workers 运行时使用 V8 引擎——与 Chromium 和 Node.js 使用的引擎相同,并拥有开源版本 workerd ↗。
Cloudflare Workers 运行时运行在 Cloudflare 全球网络 ↗ 的每个数据中心。每个 Worker 都在其自己的隔离区 (isolate) 内运行。隔离区架构正是使 Workers 保持高效的原因。
Workers 使用隔离区 (isolates):即轻量级上下文,为你的代码提供它可以访问的变量以及可以被执行的安全环境。你甚至可以将隔离区视为函数在其中运行的沙盒。
运行时的单个实例可以运行数百或数千个 isolate,在它们之间无缝切换。每个 isolate 的内存完全隔离,因此每段代码都受到运行时中其他不受信任或用户编写代码的保护。Isolate 还设计为快速启动。与为每个函数创建虚拟机不同,isolate 是在现有环境中创建的。此模型消除了虚拟机模型的冷启动。与使用容器化进程 ↗(每个进程运行一个语言运行时实例)的其他无服务器提供商不同,Workers 在容器启动时只需支付一次 JavaScript 运行时的开销。Workers 进程能够运行几乎无限数量的脚本,几乎没有单独的开销。任何给定的 isolate 启动速度比容器或虚拟机上的 Node 进程快约一百倍。值得注意的是,启动时 isolate 消耗的内存少一个数量级。
大多数 Worker 都是默认 Workers 流程的变体:
export default {
async fetch(request, env, ctx) {
return new Response('Hello World!');
},
};export default {
async fetch(request, env, ctx): Promise<Response> {
return new Response('Hello World!');
},
} satisfies ExportedHandler<Env>;对于使用 ES modules 语法 编写的 Worker,当 Cloudflare 任一数据中心收到对你的 *.workers.dev 子域或 Cloudflare 托管域的请求时,该请求会使用给定请求调用 Worker 代码中定义的 fetch() handler。你可以通过返回 Response 对象来响应请求。
通过阅读本页,你已了解到:
- Worker 项目如何组织的基础知识。
- Workers 在 Cloudflare 网络上如何执行的基础原理。
- 请求到响应的流程如何执行。
在下一个模块中,你将构建并部署你的第一个 Worker 到 Cloudflare 全球网络。
- 没有容器的云计算 ↗ - 一篇详细阐述在 Cloudflare 上容器与隔离区之间差异的博客文章。
- Workers 如何工作 - 了解 Workers 运行时与传统浏览器及 Node.js 之间的区别。
- 缓存如何工作 - 了解 Workers 如何与 Cloudflare 缓存交互。
要改进此学习路径或报告任何缺失或不准确的信息,请在 GitHub 上提交 Issue ↗。
在 Discord 上与 Cloudflare 开发者平台社区 ↗建立连接,提出问题、分享你正在构建的内容,并与其他开发者讨论该平台。