PROD欧洲主权BaaS平台打开仪表板 →

工程 · 8 最小读取值

Rust/WASM Edge Functions 与 Cloudflare 和 Vercel Edge

Affane Daylami · Fondateur · 2026年6月22日

返回博客

Cloudflare Workers 和 Vercel Edge Functions 在 V8 隔离区(轻量级 JavaScript 上下文,而不是容器或虚拟机)中运行您的代码。 Aurabase 提供了第二条路径,并在其代码中进行了验证:wasm 模式,通过 Wasmtime 运行时直接在 aura-functionsservice 中本地执行在 WebAssembly 中编译的 Rust。

该英文文本是根据法文原文自动生成的,尚未经过审查。
该页面已自动翻译。英文版具有权威性。

但是,Aurabase 的默认模式仍然是 Deno(V8 也隔离),如 Aurabase 的 Rust 核心中所述。 “Rust 中的边缘功能”根据平台涵盖了三种不同的现实:Cloudflare 端的社区 SDK、Vercel 端没有官方路线、Aurabase 端具有自己的 CLI 的本机执行模式。此比较详细介绍了三种架构,但没有混淆已验证的内容和仍然是平台目标的内容。

要点

  • Aurabase 提供两种 Edge Functions 运行时:deno(V8 隔离、专用服务、默认模式)和 wasm(Rust 编译,通过 Wasmtime 本地运行)。
  • Cloudflare Workers 在 V8 隔离上运行,并且还可以运行 WebAssembly,特别是通过 workers-rs社区 SDK。它不是像 Aurabase 的 wasm 模式那样的专用本机 Rust 运行时。
  • Vercel Edge Functions 依赖于 Edge Runtime,它是隔离 V8 上的 Node.js API 的子集:没有官方 SDK 或 CLI 可以用 Rust 编写函数本身。
  • Aurabase 的 wasm 模式通过 Wasmtime 燃料 CPU 预算、专用内存限制和每个周期的超时来隔离每次执行,但目前不向访客模块公开任何传出网络访问。
  • 三种不同的架构实现相同的目标:快速启动并隔离每次执行,而无需花费完整容器的成本。
#
背景

V8 隔离和 WASM 模块:两种沙箱机制

V8 隔离是同一 V8 引擎内的轻量级 JavaScript 执行上下文:不需要新的系统进程,不需要启动新的内核。这是 Cloudflare 首次向 Workers 公开的机制,Vercel 在其 Edge Runtime 中重用了该机制。双方的目标是相同的:避免每个请求的容器或虚拟机成本。

WebAssembly 模块通过不同的机制满足相同的需求。 WASM 字节码在由规范本身定义的有界线性内存中运行。无论生成二进制文件的源语言(Rust、C、Go…)如何,来宾模块都无法在该区域之外寻址。 Wasmtime 在 Aurabase 的 wasm 模式中应用的正是这个模型,下面详细介绍。有关两种机制之间的启动测量,请参阅 WebAssembly 冷启动基准测试中的 文件。

#
WASM 运行时

Aurabase wasm 模式在生产环境中运行

每个 Aurabase 函数都带有一个 runtime 字段,其值是 "wasm" 或 "deno"。调用引擎相应地选择执行路径:

runtime/dispatch.rsrust
// 根据运行时调度:WASM(wasmtime)或 Deno(V8 通过边缘运行时隔离)
let resp = if func.runtime == "wasm" {
    state.runtime.invoke(&wasm_bytes, &func.code_hash, req).await?
} else {
    // aura-edge-runtime 的代理 — V8 隔离 (supabase/edge-runtime, MIT)
    proxy_to_edge_runtime(&state.config.edge_runtime_url, …).await?
};

沙箱依赖于三种 Wasmtime 机制的结合。 CPU 预算计入“燃料”:每个 WASM 指令都会消耗它。以纪元增量应用超时:专用线程在配置的延迟后增加 Wasmtime 时钟,这会中断当前的执行。通过 StoreLimits设置内存限制。三个终端在引擎实例化时配置:

runtime/wasm.rsrust
let mut cfg = Config::new();
cfg.consume_fuel(true);
cfg.epoch_interruption(true);

// 内存受 StoreLimits 限制,初始燃料 = max_fuel,
// timeout = timeout_secs 之后的纪元增量(专用线程)

已编译的模块由 code_hash缓存:每次调用时不会重新编译相同的部署二进制文件。尽管如此,每次调用都会实例化一个新的 Store 和实例。从一次调用到下一次调用都不会发生状态泄漏。暴露给来宾模块的表面区域故意保持最小,总共五个主机函数: aura.log、 aura.get_input、 aura.set_output、 aura.get_env 和一个用于 AssemblyScript 兼容性的存根 env.abort 。此时没有主机函数公开传出网络调用。

已验证与产品目标

wasm 模式现在适用于纯计算:验证、数据转换、评分、分析。必须调用第三方API(支付、电子邮件、外部服务)的功能仍然必须经过deno模式。这是 Aurabase 的默认模式,也是迁移现有 Deno 代码的推荐模式。

在部署方面,CLI 在发送之前在本地编译您的包: aura functions new 搭建一个包 cdylib, aura functions deploy 编译它然后发送它。

terminalbash
# 脚手架:创建 aurabase/functions/<name>/ (Cargo.toml crate-type = cdylib)
aura functions new my-fn

# Cargo build --target wasm32-unknown-unknown --release,然后上传
# POST /v1/functions/:project_id { 运行时:“wasm”,代码:<base64 中的 wasm> }
aura functions deploy my-fn
#
云耀

Cloudflare Workers:隔离 V8,另外还有 WebAssembly

Cloudflare Workers 在分布于 Cloudflare 全球网络的 V8 隔离中本机运行 JavaScript 和 TypeScript。自平台诞生以来,WebAssembly 一直是一等公民:.wasm 模块可以像任何其他模块一样直接导入到 Worker 中。

要完全用 Rust 编写 Worker,最常用的途径是社区 SDK workers-rs,它将代码编译为 wasm32-unknown-unknown 并在 Workers 运行时中执行。与 Aurabase 的 wasm 模式的区别在于可用表面积。通过此 SDK 用 Rust 编写的 Worker 在完整的 Workers 环境中运行,因此可以调用 fetch 或其他平台绑定。 Aurabase 的 wasm 模式从故意减少的主机表面开始(上一节)。

#
韦尔塞尔

Vercel Edge Functions:Node.js 子集,没有官方 Rust 路径

Vercel 的 Edge Runtime 还使用标准 Web API 的子集(fetch、 Request/Response、 crypto.subtle...)而不是完整的 Node.js 环境在 V8 隔离中运行代码。 Native Node 模块和任意编译工具链在那里没有地位。

WebAssembly 对象是此子集的一部分:没有什么可以阻止您加载 .wasm 二进制文件并从 JavaScript 或 TypeScript 函数手动实例化它。但据我们所知,Vercel 没有发布任何官方 SDK 或 CLI 来直接用 Rust 编写 Edge Function,这与 Cloudflare 端的 workers-rs 或 Aurabase 端的 aura functions deploy 不同。该路径仍然是可能的,但完全手动,没有专用工具。

#
安全性

沙盒:WASM 线性内存与 V8 隔离

V8 隔离将同一引擎进程内的专用堆执行的代码与其自己的上下文分开。这是一种经过验证的机制,在 Cloudflare 和 Vercel 中每秒处理数百万个请求,但它仍然是单个 JavaScript 引擎内的软件隔离机制。

WASM 模型的隔离方式不同:每个实例都有自己的线性内存,这是一个连续的缓冲区,无法通过构建二进制格式本身进行访问,与执行它的引擎无关。在 Aurabase 运行时中,操作由来宾模块提供的指针(aura.log、 aura.get_env...)的每个主机函数都会在任何内存访问之前显式地重新验证边界。这是针对恶意或有缺陷模块的额外深度防御。

#
概述

三种架构并排

Aurabase(wasm)Cloudflare 工人Vercel 边函数
执行模型原生 WASM 模块,Wasmtime隔离V8 + WASM作为可选模块隔离 V8、Node.js 子集
前景中的铁锈是的,专用模式+CLI通过社区 SDK (workers-rs)不,没有官方路线
退出模块的网络访问没有,在代码中检查过(无网络主机功能)是的,通过完整的 Workers 环境是的,标准获取 API
CPU预算燃料浪费时间,可配置每个请求的 CPU 时间限制(Cloudflare 文档)每次召唤的持续时间限制(文档 Vercel)
专用 Rust 部署aura 功能部署(货物构建本地)牧马人 + 工人-rs没有官方等效工具

Aurabase 运行时规范。 Cloudflare 和 Vercel 专栏根据每个平台记录的公共架构进行了描述(隔离 V8、WebAssembly 作为构建目标)。

#
决定

根据您的功能选择哪个运行时

纯计算,无网络调用:模式验证、数据转换、评分、轻量级图像生成。 Aurabase 的 wasm 模式直接适用,具有严格的内存沙箱、明确的 CPU 预算,并且不依赖于外部服务。

调用第三方 API 的函数(支付、电子邮件、传出 webhook)。 Aurabase 的 deno 模式至今仍是默认选择,就像经典的 Cloudflare Worker 或 Vercel Edge Function 本身依赖 fetch 一样。

团队已投资 Cloudflare 生态系统(KV、耐用对象、R2)。留在 Workers 是有道理的; workers-rs 允许您逐步引入 Rust,而无需更改平台。

需要一个本地 Rust 运行时管理的端到端,具有专用的 CLI 和与后端其余部分相同的语言。这是 在我们的 Wasmtime 与 Wasmer 比较中记录的关于 WebAssembly 引擎本身选择的角度。

#
常见问题解答

常见问题解答

您可以用 Rust 编写 Aurabase Edge 函数吗?+
是的,通过 wasm 模式。 CLI 将具有 Rust 板条箱(板条箱类型 cdylib)的新功能。 aurafunctionsdeploy命令使用cargobuild--target wasm32-unknown-unknown--release在本地编译它,然后将二进制文件发送到aura-functions服务,该服务使用Wasmtime运行时在本机运行它。这不是默认模式:默认情况下,Aurabase Edge 函数在 JavaScript/TypeScript(Deno 运行时、V8 隔离)中运行。
Cloudflare Workers 真的允许您用 Rust 编写函数吗?+
是的,但是间接的:Cloudflare Workers 在 V8 隔离中本机执行 JavaScript/TypeScript。 Workers-rs 社区 SDK 允许您将 Rust 中的整个 Worker 编译为 WebAssembly,但这不是最官方记录的路线。 WASM 是对 Worker 的补充,而不是完全取代 JS 模型。
Vercel Edge Functions 本身支持 WebAssembly 或 Rust 吗?+
Vercel Edge Runtime 公开标准 Web API,包括 WebAssembly 对象,因此可以从 JavaScript/TypeScript 函数手动加载和实例化 .wasm 模块。但据我们所知,Vercel 没有发布任何官方 SDK 或 CLI 来直接用 Rust 编写 Edge Function,这与 Cloudflare 端的workers-rs 或 Aurabase 端部署的 aura 函数不同。
Aurabase wasm 模式可以调用第三方 API(支付、电子邮件等)吗?+
今天不是:向客户 WASM 模块公开的主机功能是日志、读取输入请求和写入输出响应,以及读取环境变量。对于需要调用外部 API(网络获取)的函数,推荐使用 Deno 运行时(默认)路径。

准备好部署了吗?

五分钟内完成您的后端。

无需信用卡 · 500 MB 免费 · 50,000 MAU