跳转到内容
搜索文档

Cloudflare Workers 架构与运行时

最后更新 查看 MarkdownAgent 设置

Cloudflare Workers 赋予开发者将无服务器代码即时部署到 Cloudflare 全球网络的能力。

Cloudflare Workers 在其执行模型和架构上与其他无服务器计算提供商显著不同。

你可以使用 Workers 做什么

单个 Worker 项目可以具备开发者所期望的复杂或简单的逻辑。较小规模的项目可能看起来像是一个在单个路由上返回小型 HTML 页面的 Worker。而更复杂的 Worker 项目将跨越多个域名、每个域名的多个路由以及每个路由的不同逻辑。开发者决定其 Worker 项目的架构复杂度。

你的应用程序可以由多个协同工作的 Workers 组成,并向最终用户交付单一体验。Workers 还可以与 Cloudflare 开发者平台的技术功能(如存储、媒体和 AI)集成。你将在 开发者平台模块 中了解更多相关信息。

运行时 (Runtime)

Workers 运行时旨在符合 JavaScript 标准并支持 Web 互操作性。Workers 运行时使用 V8 引擎——与 Chromium 和 Node.js 使用的引擎相同,并拥有开源版本 workerd

执行 (Execution)

Cloudflare Workers 运行时运行在 Cloudflare 全球网络 的每个数据中心。每个 Worker 都在其自己的隔离区 (isolate) 内运行。隔离区架构正是使 Workers 保持高效的原因。

隔离区 (Isolates)

Workers 使用隔离区 (isolates):即轻量级上下文,为你的代码提供它可以访问的变量以及可以被执行的安全环境。你甚至可以将隔离区视为函数在其中运行的沙盒。

运行时的单个实例可以运行数百或数千个 isolate,在它们之间无缝切换。每个 isolate 的内存完全隔离,因此每段代码都受到运行时中其他不受信任或用户编写代码的保护。Isolate 还设计为快速启动。与为每个函数创建虚拟机不同,isolate 是在现有环境中创建的。此模型消除了虚拟机模型的冷启动。与使用容器化进程(每个进程运行一个语言运行时实例)的其他无服务器提供商不同,Workers 在容器启动时只需支付一次 JavaScript 运行时的开销。Workers 进程能够运行几乎无限数量的脚本,几乎没有单独的开销。任何给定的 isolate 启动速度比容器或虚拟机上的 Node 进程快约一百倍。值得注意的是,启动时 isolate 消耗的内存少一个数量级。

Scheduling and routing
Scheduling and routing
HTTP client
HTTP client
HTTP server
HTTP server
Inbound
HTTP proxy
[Not supported by viewer]
Outbound
HTTP proxy
[Not supported by viewer]
Supervisor
[Not supported by viewer]
Main Runtime Process
Main Runtime Process
Outer Sandbox
Outer Sandbox
Disk
Disk
Control plane
[Not supported by viewer]
HTTP
[Not supported by viewer]
Cap'n Proto RPC
[Not supported by viewer]
In-process calls
[Not supported by viewer]
Other
[Not supported by viewer]
V8 Isolate
[Not supported by viewer]
V8 Isolate
[Not supported by viewer]
V8 Isolate
[Not supported by viewer]
V8 Isolate
[Not supported by viewer]
Process
Sandbox
[Not supported by viewer]
V8 Isolate
[Not supported by viewer]
Scheduling and routing
Scheduling and routing
Process
Sandbox
[Not supported by viewer]
V8 Isolate
[Not supported by viewer]
Scheduling and routing
Scheduling and routing

按请求计算 (Compute per request)

大多数 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 全球网络。

相关资源

反馈

要改进此学习路径或报告任何缺失或不准确的信息,请在 GitHub 上提交 Issue

社区

在 Discord 上与 Cloudflare 开发者平台社区建立连接,提出问题、分享你正在构建的内容,并与其他开发者讨论该平台。

这篇文档对您有帮助吗?