Cloudflare Dynamic Workers 让沙箱运行速度提升 100 倍

BBetter Stack
Internet TechnologySmall Business/StartupsComputing/Software

Transcript

00:00:00(欢快的音乐)
00:00:01Cloudflare 最近发布了 Dynamic Workers,
00:00:04这是一种更底层的 Worker 原语,
00:00:06可以由现有的 Worker 以编程方式创建。
00:00:09它们的速度比传统的容器快 100 倍,内存效率更高,
00:00:12因为它们运行在 V8 隔离槽 (Isolates) 上。
00:00:16由于它们的成本非常低,
00:00:18你可以根据需要随时生成,
00:00:20用于运行 AI 生成的代码、开发预览、
00:00:23自定义自动化任务等等。
00:00:25官方甚至表示,如果你愿意,
00:00:29每秒可以运行 100 万个 Dynamic Workers。
00:00:31但是,只能运行 JavaScript 这点
00:00:33会限制它们的使用吗?
00:00:36点个订阅,让我们一探究竟。
00:00:37(欢快的音乐)
00:00:40去年,我做过一段关于 Cloudflare Sandboxes 的视频,
00:00:44它们基本上是运行在 Durable Object 上的
00:00:47短寿命 Linux 容器。
00:00:49如果听起来一头雾水,
00:00:50可以去看看那段视频。
00:00:52但如果你需要一个完整的操作系统容器,
00:00:55拥有文件系统并能运行几乎任何语言
00:00:59和二进制文件,它们就是完美的。
00:01:01但如果你想要更快的东西,
00:01:03实际上是快得多,而且更轻量,
00:01:06能够运行无限的并发沙箱,
00:01:09且限制与常规 Worker 相同,
00:01:12那么你可能需要用到 Dynamic Worker。
00:01:15让我们来看看如何设置。
00:01:16这里是我刚用 Wrangler 创建的一个基础 Worker,
00:01:19里面满是 TypeScript 错误,
00:01:21也许是因为我忘了运行 Wrangler types。
00:01:23但在我们的 Wrangler 配置文件中,
00:01:26我添加了这个 worker loaders 数组,
00:01:28带有一个名为 loader 的绑定。
00:01:30虽然你可以给它起任何名字,
00:01:32但我选择了 loader,因为这更符合惯例。
00:01:34这个绑定允许我们创建
00:01:37并控制其他的 Worker。
00:01:38在更新后的代码中,我们定义了一个新的 worker 常量,
00:01:42它使用这些值通过 loader 绑定进行创建。
00:01:45你可以把这想象成嵌套 Worker 的
00:01:49Wrangler 配置文件,
00:01:50这里的 compatibility date 告诉 Worker
00:01:53它应该使用的运行时版本。
00:01:55这是它将要运行的代码。
00:01:57如你所见,代码与普通的 Worker 非常相似。
00:01:59它也有一个 fetch 函数,
00:02:00接收 request、env 和 context 参数。
00:02:05它在这里所做的只是
00:02:06从沙箱中返回 "Hello World"。
00:02:08然后我们阻止了所有的网络访问,
00:02:10使用初始 Worker 的 request 参数运行 fetch 函数,
00:02:13并返回结果。
00:02:16如果我们本地运行 Worker 并 curl localhost,
00:02:19应该能看到 "Hello from the sandbox"。
00:02:21但如果再次运行同样的 curl 请求,
00:02:24就会报错。
00:02:24这是因为目前
00:02:26我们每次都在加载一个全新的 Worker。
00:02:28不过我们可以改为获取现有的 Worker,
00:02:31给它起名为 worker 1,
00:02:33然后以异步函数的形式运行代码。
00:02:35这意味着现在运行 curl 时,会得到 "Hello from the sandbox"。
00:02:38如果再次运行,它会从
00:02:41现有的 worker 1 沙箱中获取信息。
00:02:43我刚才展示的
00:02:45当然是一个非常简单的例子,
00:02:47但你可以用 Dynamic Workers 做一些很酷的事情,
00:02:50比如定义自定义绑定,
00:02:52像这个 chatroom post 方法来创建一个桩 (stub),
00:02:55Worker 使用 Cap'n Proto over Web 进行通信,
00:02:57没错,我们也做过相关的视频,
00:02:59感兴趣的话可以去看看。
00:03:00你可以使用 Hono 之类的 NPM 依赖,
00:03:03并使用 create worker 函数将它们打包。
00:03:05你甚至可以拦截出站请求,
00:03:08来完成诸如注入凭据之类的操作。
00:03:10使用 Dynamic Workers 的一大重要原因,
00:03:13是运行由 AI 智能体生成的代码。
00:03:17让我们来试一下。
00:03:18这是来自 E2B cookbook 的代码,
00:03:21它使用 Anthropic SDK 来运行 Sonnet 3.5,
00:03:25配合这个系统提示词和一个自定义工具,
00:03:28在 Jupyter 笔记本中执行 Python 代码。
00:03:31它的工作原理是:当检测到
00:03:33使用了自定义工具时,
00:03:34就会在 E2B 沙箱中运行,
00:03:38我们可以在这里看到相关代码。
00:03:40它使用一个非常具体的提示词来运行,
00:03:42通过 1000 次迭代的蒙特卡罗方法
00:03:46来计算圆周率 Pi 的值。
00:03:47因为它有文件系统的访问权限,
00:03:50它可以创建这个 image.png,
00:03:52保存后供用户下载,
00:03:54或用于其他用途。
00:03:56遗憾的是,Dynamic Workers 没有
00:03:58文件系统的访问权,
00:04:00尽管它们可以使用这个 shell 库
00:04:02创建一个虚拟文件系统。
00:04:04但因为它们是通过 Worker 运行的,
00:04:06我们可以为其提供诸如 R2 存储桶的信息,
00:04:08这是 Cloudflare 版的 S3,
00:04:11图片可以保存在里面。
00:04:12让我们看一下代码,
00:04:14它与 E2B 的例子很相似,
00:04:16首先可以看到正在使用的系统提示词。
00:04:19还有自定义的 Python 执行工具,
00:04:22在这里它不使用 Jupyter 笔记本,
00:04:25但会生成可视化内容的 SVG。
00:04:28这里是 Worker 的代码,
00:04:30它除了运行 JavaScript,也能运行 Python。
00:04:33我们可以看到它正在使用 Sonnet 3.5。
00:04:35这是使用的提示词。
00:04:37这里是智能体代码在沙箱中执行的地方。
00:04:41沙箱的响应
00:04:43会返回到主 Worker,
00:04:45主 Worker 会从中提取 SVG 代码,
00:04:47然后将其保存到 R2。
00:04:49访问该 URL 时虽然需要一点时间,
00:04:51但它确实生成了包含
00:04:53来自 Claude 相关信息的页面。
00:04:55向下滚动,
00:04:56就能看到从 R2 加载的这个 SVG。
00:05:01它看起来与 E2B 的那个非常不同,
00:05:03但我相信 Claude Sonnet
00:05:04生成了正确的信息。
00:05:06当然,我提到过
00:05:09以编程方式生成任意数量的 Dynamic Workers 也是可能的,
00:05:13你可以使用这样的代码来实现。
00:05:16这是一个根据 API 返回值
00:05:19创建全新 Worker 的 for 循环。
00:05:21它还会检查 Worker 是否已存在,
00:05:23如果存在则重用。
00:05:25它运行的代码基本上就是 console.log
00:05:27以及来自 Worker 的响应,
00:05:29响应包含基于循环索引的
00:05:31特定 Worker ID。
00:05:32代码运行后,
00:05:34我可以瞬间生成 50 个
00:05:36全新的 Dynamic Workers,可以看到它们瞬间就创建好了。
00:05:40速度非常快。
00:05:41现在让我们尝试 10,000 个,
00:05:43但我不会在本地运行,
00:05:44因为我不想让我的机器爆掉。
00:05:46所以我把父 Worker 部署到了 Cloudflare,
00:05:49这样就能利用他们的基础设施。
00:05:50现在我要生成 10,000 个不同的 Worker。
00:05:53按下回车,它们全部以惊人的速度创建完成。
00:05:56我们可以看到这里每页显示 30 个,
00:05:59我可以翻页查看所有不同的 Worker ID。
00:06:03事实上,翻得越远,显示的页数就越多。
00:06:05我可以与特定的 Worker 通信,
00:06:07比如 worker 1156,
00:06:09它会回复 "Hello from worker 1156"。
00:06:12以上就是 Dynamic Workers 的简要概述,
00:06:15Cloudflare 的 code mode 已经在使用它了,
00:06:18还有 Zite 用它来运行 LLM 生成的应用。
00:06:21但我应该提一下,虽然现在它们是免费的,
00:06:24但不会永远免费。
00:06:25所以,虽然每秒可以运行 100 万个 Dynamic Workers,
00:06:28除非你财力雄厚,
00:06:30否则你可能还是得克制一点。
00:06:32既然聊到了 Cloudflare,
00:06:34如果你想了解更多关于他们开源的 VIBE SDK,
00:06:38它可以让你构建像 v0 和 Lovable 这样的应用生成器,
00:06:42那就请看下一段视频。

Key Takeaway

Cloudflare Dynamic Workers 通过 V8 隔离技术实现了极速且廉价的编程化沙箱环境,为 AI 代码执行和大规模并发计算提供了全新的基础架构方案。

Highlights

Cloudflare 推出的 Dynamic Workers 是一种底层原语,允许 Worker 以编程方式动态创建其他 Worker。

其运行在 V8 隔离槽(Isolates)上,启动速度比传统容器快 100 倍,且内存效率极高。

用户可以利用此技术运行 AI 生成的代码、开发预览及自动化任务,理论上每秒可生成百万个实例。

Dynamic Workers 虽然缺乏原生文件系统,但可以通过绑定 R2 存储或虚拟文件系统库来弥补。

通过实际演示证明,在 Cloudflare 基础设施上可以瞬间生成并运行上万个独立的沙箱环境。

该功能目前处于免费阶段,但未来将转为付费模式,适合需要大规模并发沙箱的应用场景。

Timeline

Dynamic Workers 简介与核心优势

本段介绍了 Cloudflare 最新发布的 Dynamic Workers 这一底层原语工具。它允许现有的 Worker 动态创建子环境,其核心优势在于运行在 V8 隔离槽上,速度比传统容器快 100 倍。这种极高的内存效率和低成本特性,使其非常适合用于运行 AI 生成的代码或自动化任务。官方宣称在极端情况下,用户每秒甚至可以生成高达 100 万个此类 Worker。尽管目前仅支持 JavaScript 运行,但这足以应对大多数轻量级计算需求。

与 Linux 容器沙箱的对比及配置方法

演讲者对比了去年推出的基于 Durable Object 的 Linux 容器沙箱。虽然全功能容器支持文件系统和多种语言,但 Dynamic Workers 在轻量化和并发能力上更胜一筹。视频展示了如何通过 Wrangler 配置文件添加 worker loaders 绑定来实现这一功能。代码实现上,通过 loader 绑定可以像定义配置文件一样设置兼容日期和运行代码。这种模式下的 Worker 结构与普通 Worker 类似,均包含 fetch 函数并能接收 standard 参数。

实例演示:持久化沙箱与高级功能

通过简单的 curl 测试,演讲者演示了如何从加载全新 Worker 转变为重用现有的特定沙箱。通过为 Worker 命名,开发者可以在多次请求之间保持状态,实现从特定沙箱获取信息的功能。除了基础运行,Dynamic Workers 还支持自定义绑定和 Cap'n Proto over Web 通信协议。用户甚至可以引入 Hono 等 NPM 依赖,或者拦截出站请求以注入必要的凭据。这些高级特性极大地扩展了动态沙箱在复杂分布式系统中的应用潜力。

AI 智能体集成与数据存储方案

这一章节重点讨论了如何使用 Dynamic Workers 运行由 AI(如 Claude 3.5 Sonnet)生成的代码。虽然它不像 E2B 砂箱那样拥有物理文件系统,但可以结合 Cloudflare R2 存储来保存生成的 SVG 或图片。视频演示了 AI 智能体如何在沙箱内执行 Python 计算任务,并将结果返回给主 Worker 处理。主 Worker 随后将生成的可视化内容保存至 R2,并最终在网页上成功展示。这证明了在缺乏本地存储的情况下,通过云端生态链依然能完成复杂的数据交互。

大规模压力测试与未来展望

演讲者展示了 Dynamic Workers 惊人的扩展性,演示了如何在瞬间生成 50 个乃至 10,000 个独立的 Worker。在部署到 Cloudflare 基础设施后,成千上万个带唯一 ID 的 Worker 被快速创建,且能与特定 ID 的实例进行实时通信。目前 Cloudflare 的代码模式及 Zite 等应用已经开始利用这一技术运行 LLM 生成的内容。作者提醒虽然目前该功能免费,但未来会转入计费阶段,因此开发者在大规模部署时仍需考虑财务成本。最后,视频引导观众关注 VIBE SDK 等相关开源工具,以构建更复杂的生成式应用。

Community Posts

View all posts