PRODSoeverein Europees BaaS-platformOpen Dashboard →

Techniek · 8 min gelezen

Rust/WASM Edge Functions versus Cloudflare en Vercel Edge

Affane Daylami · Fondateur · 22 juni 2026

Terug naar blog

Cloudflare Workers en Vercel Edge Functions voeren uw code uit in V8-isolaten, een lichtgewicht JavaScript-context, geen container of virtuele machine. Aurabase biedt een tweede pad, geverifieerd in de code: een wasm-modus die Rust, gecompileerd in WebAssembly, rechtstreeks uitvoert in de aura-functionsservice, via de Wasmtime-runtime.

Deze Engelse tekst is automatisch gegenereerd op basis van het Franse origineel en is nog niet beoordeeld.
Deze pagina is automatisch vertaald. De Engelse versie is gezaghebbend.

De standaardmodus van Aurabase blijft echter Deno (V8 isoleert ook), zoals gedocumenteerd in Aurabase's Rust-kern. “Edge Functions in Rust” omvat drie verschillende realiteiten, afhankelijk van het platform: een community SDK aan de Cloudflare-kant, geen officiële route aan de Vercel-kant, een native uitvoeringsmodus met een eigen CLI aan de Aurabase-kant. Deze vergelijking beschrijft de drie architecturen zonder te mengen wat geverifieerd wordt en wat een platformdoelstelling blijft.

De essentie

  • Aurabase biedt twee Edge Functions-runtimes: deno (V8 isolaten, speciale service, standaardmodus) en wasm (rust gecompileerd, native uitgevoerd via Wasmtime).
  • Cloudflare Workers draait op V8-isolaten en kan daarnaast WebAssembly uitvoeren, met name via de workers-rscommunity SDK. Het is geen speciale native Rust-runtime zoals de wasm-modus van Aurabase.
  • Vercel Edge Functions vertrouwt op de Edge Runtime, een subset van Node.js API op isolaten V8: geen officiële SDK of CLI om de functie zelf in Rust te schrijven.
  • De wasm-modus van Aurabase isoleert elke uitvoering met een Wasmtime-brandstof-CPU-budget, een speciale geheugenlimiet en een time-out per tijdperk, maar biedt momenteel geen uitgaande netwerktoegang tot de gastmodule.
  • Drie verschillende architecturen voor hetzelfde doel: snel starten en elke uitvoering isoleren, zonder de kosten van een complete container.
#
Context

V8-isolaten en WASM-modules: twee sandbox-mechanismen

Een V8-isolaat is een lichtgewicht JavaScript-uitvoeringscontext binnen dezelfde V8-engine: geen nieuwe systeemprocessen, geen nieuwe kernel om te starten. Dit is het mechanisme dat Cloudflare voor het eerst openbaar maakte voor Workers, en dat Vercel hergebruikt voor zijn Edge Runtime. Het doel is aan beide kanten hetzelfde: de kosten van een container of een VM voor elk verzoek vermijden.

Een WebAssembly-module voorziet in dezelfde behoefte via een ander mechanisme. De WASM-bytecode draait in een begrensd lineair geheugen, gedefinieerd door de specificatie zelf. De gastmodule kan zich niet buiten dit gebied richten, ongeacht de brontaal (Rust, C, Go...) die het binaire bestand heeft geproduceerd. Het is dit model dat Wasmtime toepast in de wasm-modus van Aurabase, zoals hieronder beschreven. Voor opstartmetingen tussen de twee mechanismen, zie ons bestand over WebAssembly koude start benchmarks.

#
WASM-runtime

Wat Aurabase wasm-modus draait in productie

Elke Aurabase-functie heeft een veld runtime dat de waarde "wasm" of "deno"heeft. De aanroepengine kiest het uitvoeringspad dienovereenkomstig:

runtime/dispatch.rsrust
// Verzending op basis van runtime: WASM (wasmtime) of Deno (V8 isoleert via edge-runtime)
let resp = if func.runtime == "wasm" {
    state.runtime.invoke(&wasm_bytes, &func.code_hash, req).await?
} else {
    // Proxy voor aura-edge-runtime — V8 isolaten (supabase/edge-runtime, MIT)
    proxy_to_edge_runtime(&state.config.edge_runtime_url, …).await?
};

De sandbox is gebaseerd op drie gecombineerde Wasmtime-mechanismen. Een CPU-budget geteld als “brandstof”: elke WASM-instructie verbruikt het. Een time-out toegepast in epoch-stappen: een speciale thread verhoogt de Wasmtime-klok na de geconfigureerde vertraging, waardoor de huidige uitvoering wordt onderbroken. Een geheugenlimiet ingesteld via StoreLimits. De drie terminals worden geconfigureerd wanneer de engine wordt geïnstantieerd:

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

// Geheugen begrensd door StoreLimits, initiële brandstof = max_fuel,
// timeout = epoch-increment na timeout_secs (speciale thread)

De gecompileerde module wordt in de cache opgeslagen door code_hash: hetzelfde geïmplementeerde binaire bestand wordt niet bij elke aanroep opnieuw gecompileerd. Elke aanroep genereert niettemin een nieuw Store en exemplaar. Geen enkele staat lekt van de ene oproep naar de andere. Het oppervlak dat wordt blootgesteld aan de gastmodule blijft opzettelijk minimaal, vijf hostfuncties in totaal: aura.log, aura.get_input, aura.set_output, aura.get_env en een stub env.abort voor AssemblyScript-compatibiliteit. Er zijn momenteel geen hostfuncties die uitgaande netwerkoproepen zichtbaar maken.

Geverifieerd versus productdoelstelling

De wasm-modus is nu geschikt voor pure berekening: validatie, datatransformatie, scoring, analyse. Een functie die een API van derden moet aanroepen (betaling, e-mail, externe service) moet nog steeds de deno-modus doorlopen. Dit is de standaardmodus voor Aurabase en de aanbevolen modus voor het migreren van bestaande Deno-code.

Aan de implementatiezijde compileert de CLI uw krat lokaal voordat deze wordt verzonden: aura functions new stelt een krat in cdylib, aura functions deploy compileert het en verzendt het vervolgens.

terminalbash
# Steigers: creëert aurabase/functions/<naam>/ (Cargo.toml krat-type = cdylib)
aura functions new my-fn

# cargo build --target wasm32-unknown-unknown --release en vervolgens uploaden
# POST /v1/functions/:project_id { runtime: "wasm", code: <wasm in base64> }
aura functions deploy my-fn
#
Wolkenvlam

Cloudflare Workers: isoleert V8, met daarnaast WebAssembly

Cloudflare Workers voeren JavaScript en TypeScript standaard uit in V8-isolaten, verspreid over het wereldwijde netwerk van Cloudflare. WebAssembly is sinds het begin van het platform een ​​eersteklas burger: een .wasm-module kan net als elke andere module rechtstreeks in een Worker worden geïmporteerd.

Om een Worker volledig in Rust te schrijven, is de meest gebruikte route de community SDK workers-rs, die de code compileert naar wasm32-unknown-unknown en deze uitvoert in de Workers-runtime. Het verschil met de wasm-modus van Aurabase is de beschikbare oppervlakte. Een Worker die via deze SDK in Rust is geschreven, draait in de volledige Workers-omgeving en kan daarom fetch of andere platformbindingen aanroepen. De wasm-modus van Aurabase begint met een opzettelijk verkleind hostoppervlak (vorige sectie).

#
Vercel

Vercel Edge-functies: een Node.js-subset, geen officieel Rust-pad

Vercel's Edge Runtime voert ook code uit in V8-isolaten, met een subset van standaard web-API's (fetch, Request/Response, crypto.subtle…) in plaats van de volledige Node.js-omgeving. Native Node-modules en willekeurige compilatietoolchains horen daar niet thuis.

Het object WebAssembly maakt deel uit van deze subset: niets belet u een binair bestand .wasm te laden en dit handmatig te instantiëren vanuit een JavaScript- of TypeScript-functie. Maar voor zover wij weten, publiceert Vercel geen officiële SDK of CLI om rechtstreeks een Edge-functie in Rust te schrijven, in tegenstelling tot workers-rs aan de Cloudflare-kant of aura functions deploy aan de Aurabase-kant. Het pad blijft mogelijk, maar volledig handmatig, zonder speciaal gereedschap.

#
Beveiliging

Sandbox: WASM lineair geheugen versus V8-isolatie

Een V8-isolaat scheidt de code die wordt uitgevoerd door een speciale heap en zijn eigen context, binnen hetzelfde motorproces. Het is een beproefd mechanisme, op de schaal van miljoenen verzoeken per seconde bij Cloudflare en Vercel, maar het blijft een software-isolatiemechanisme binnen één enkele JavaScript-engine.

Het WASM-model isoleert anders: elke instantie krijgt zijn eigen lineaire geheugen, een aaneengesloten buffer waarbuiten geen toegang mogelijk is door de constructie van het binaire formaat zelf, onafhankelijk van de engine die het uitvoert. In de Aurabase-runtime valideert elke hostfunctie die een aanwijzer van de gastmodule manipuleert (aura.log, aura.get_env…) expliciet de grenzen opnieuw voordat enige geheugentoegang plaatsvindt. Dit is een extra diepgaande verdediging tegen een kwaadaardige module of module met fouten.

#
Overzicht

De drie architecturen naast elkaar

Aurabase (wasm)Cloudflare-werknemersVercel Edge-functies
UitvoeringsmodelNative WASM-module, WasmtimeIsoleer V8 + WASM als optionele moduleIsoleer V8, Node.js-subset
Roest op de voorgrondJa, speciale modus + CLIVia community-SDK (werknemers-rs)Nee, geen officiële route
Netwerktoegang bij het verlaten van de moduleNee, code ingecheckt (geen netwerkhostfunctie)Ja, via de volledige Workers-omgevingJa, standaard ophaal-API
CPU-budgetBrandstofwastijd, configureerbaarCPU-tijdslimiet per verzoek (Cloudflare-document)Duurlimiet per dagvaarding (doc. Vercel)
Toegewijde Rust-implementatieaura-functies inzetten (lokale vracht opbouwen)wrangler + werknemers-rsGeen officieel gelijkwaardig hulpmiddel

Aurabase runtime-specificaties. Cloudflare- en Vercel-kolommen beschreven vanuit de gedocumenteerde openbare architectuur van elk platform (isoleert V8, WebAssembly als builddoel).

#
Besluit

Welke runtime u moet kiezen op basis van uw functie

Pure berekening, zonder netwerkoproepen: schemavalidatie, gegevenstransformatie, scores, lichtgewicht generatie van afbeeldingen. De wasm-modus van Aurabase is direct geschikt, met een strikte geheugensandbox, een expliciet CPU-budget en zonder afhankelijkheid van een externe service.

Functie die een API van derden aanroept (betaling, e-mail, uitgaande webhook). De deno-modus van Aurabase blijft vandaag de dag de standaardkeuze, net zoals een klassieke Cloudflare Worker of een Vercel Edge-functie native op fetch vertrouwt.

Team heeft al geïnvesteerd in het Cloudflare-ecosysteem (KV, Sustainable Objects, R2). Bij Workers blijven is logisch; Met workers-rs kun je Rust geleidelijk introduceren, zonder van platform te veranderen.

Een native Rust-runtime nodig die end-to-end wordt beheerd, met een speciale CLI en dezelfde taal als de rest van de backend. Dit is de invalshoek die documenteert in onze Wasmtime versus Wasmer-vergelijkingover de keuze van de WebAssembly-engine zelf.

#
Veelgestelde vragen

Veelgestelde vragen

Kun je Aurabase Edge Functions in Rust schrijven?+
Ja, via wasm-modus. De CLI zal nieuwe functies hebben, een roestkrat (cdylib van het krattype). De opdracht aura functies implementeren compileert deze lokaal met cargo build --target wasm32-unknown-unknown --release en verzendt vervolgens het binaire bestand naar de aura-functions-service, die het native uitvoert met de Wasmtime-runtime. Dit is niet de standaardmodus: standaard wordt een Aurabase Edge-functie uitgevoerd in JavaScript/TypeScript (Deno runtime, V8 Isolates).
Staat Cloudflare Workers je echt toe om functies in Rust te schrijven?+
Ja, maar indirect: Cloudflare Workers voert JavaScript/TypeScript standaard uit in V8-isolaten. Met de worker-rs community SDK kun je een volledige Worker in Rust naar WebAssembly compileren, maar dit is niet de meest officieel gedocumenteerde route. WASM vormt daar een aanvulling op een Worker in plaats van het JS-model volledig te vervangen.
Ondersteunt Vercel Edge Functions WebAssembly of Rust native?+
De Vercel Edge Runtime maakt standaard web-API's beschikbaar, inclusief het WebAssembly-object, zodat een .wasm-module handmatig kan worden geladen en geïnstantieerd vanuit een JavaScript/TypeScript-functie. Maar voor zover wij weten, publiceert Vercel geen officiële SDK of CLI om een ​​Edge-functie rechtstreeks in Rust te schrijven, in tegenstelling tot worker-rs aan de Cloudflare-kant of aura-functies die aan de Aurabase-kant worden ingezet.
Kan de Aurabase Wasm-modus een API van derden aanroepen (betaling, e-mail, enz.)?+
Vandaag niet: de hostfuncties die aan de gast-WASM-module worden blootgesteld, zijn het logbestand, het lezen van het invoerverzoek en het schrijven van het uitvoerantwoord, evenals het lezen van de omgevingsvariabelen. Voor een functie die een externe API moet aanroepen (netwerk ophalen), is de Deno-runtime (standaard) het aanbevolen pad.

KLAAR VOOR IMPLEMENTATIE?

Uw backend in vijf minuten.

Geen creditcard vereist · 500 MB gratis · 50.000 MAU