PRODPlataforma BaaS soberana europeaAbrir panel →

Ingeniería · 8 lectura mínima

Rust/WASM Edge Functions frente a Cloudflare y Vercel Edge

Affane Daylami · Fondateur · 22 de junio de 2026

volver al blog

Cloudflare Workers y Vercel Edge Functions ejecutan su código en aislados V8, un contexto de JavaScript liviano, no en un contenedor o máquina virtual. Aurabase ofrece una segunda ruta, verificada en su código: un modo wasm que ejecuta directamente Rust compilado en WebAssembly, de forma nativa, en el servicio aura-functions, a través del tiempo de ejecución Wasmtime.

Este texto en inglés se generó automáticamente a partir del original en francés y aún no ha sido revisado.
Esta página fue traducida automáticamente. La versión en inglés es autorizada.

Sin embargo, el modo predeterminado de Aurabase sigue siendo Deno (V8 Isolates también), como se documenta en Rust corede Aurabase. “Edge Functions in Rust” cubre tres realidades diferentes según la plataforma: un SDK comunitario en el lado de Cloudflare, ninguna ruta oficial en el lado de Vercel, un modo de ejecución nativo con su propia CLI en el lado de Aurabase. Esta comparación detalla las tres arquitecturas sin mezclar lo que se verifica y lo que sigue siendo un objetivo de plataforma.

Lo esencial

  • Aurabase ofrece dos tiempos de ejecución de Edge Functions: deno (V8 aislados, servicio dedicado, modo predeterminado) y wasm (compilado en Rust, ejecutado de forma nativa a través de Wasmtime).
  • Cloudflare Workers se ejecuta en aislados V8 y además puede ejecutar WebAssembly, especialmente a través del SDK de la comunidad workers-rs. No es un tiempo de ejecución nativo dedicado de Rust como el modo wasm de Aurabase.
  • Vercel Edge Functions se basa en Edge Runtime, un subconjunto de la API de Node.js en aislados V8: no hay SDK o CLI oficial para escribir la función en sí en Rust.
  • El modo wasm de Aurabase aísla cada ejecución con un presupuesto de CPU de combustible Wasmtime, un límite de memoria dedicada y un tiempo de espera por época, pero actualmente no expone ningún acceso de red saliente al módulo invitado.
  • Tres arquitecturas diferentes para un mismo objetivo: comenzar rápidamente y aislar cada ejecución, sin el coste de un contenedor completo.
#
Contexto

Aislamientos V8 y módulos WASM: dos mecánicas de sandboxing

Un aislamiento V8 es un contexto de ejecución de JavaScript liviano dentro del mismo motor V8: no hay nuevos procesos del sistema, no hay un nuevo kernel para iniciar. Este es el mecanismo que Cloudflare hizo público por primera vez para los trabajadores y que Vercel reutiliza para su Edge Runtime. El objetivo es el mismo en ambas partes: evitar el coste de un contenedor o una VM por cada solicitud.

Un módulo WebAssembly satisface la misma necesidad a través de un mecanismo diferente. El código de bytes WASM se ejecuta en una memoria lineal limitada, definida por la propia especificación. El módulo invitado no puede direccionar fuera de esta área, independientemente del idioma de origen (Rust, C, Go…) que produjo el binario. Es este modelo el que aplica Wasmtime en el modo wasm de Aurabase, que se detalla a continuación. Para conocer las mediciones de inicio entre las dos mecánicas, consulte nuestro archivo en los puntos de referencia de arranque en frío de WebAssembly.

#
Tiempo de ejecución WASM

Qué modo wasm de Aurabase se ejecuta en producción

Cada función de Aurabase lleva un campo runtime que vale "wasm" o "deno". El motor de invocación elige la ruta de ejecución en consecuencia:

runtime/dispatch.rsrust
// Despacho según tiempo de ejecución: WASM (wasmtime) o Deno (V8 Aisla vía edge-runtime)
let resp = if func.runtime == "wasm" {
    state.runtime.invoke(&wasm_bytes, &func.code_hash, req).await?
} else {
    // Proxy para aura-edge-runtime: aislamientos V8 (supabase/edge-runtime, MIT)
    proxy_to_edge_runtime(&state.config.edge_runtime_url, …).await?
};

El sandbox se basa en tres mecanismos Wasmtime combinados. Un presupuesto de CPU contado en “combustible”: cada instrucción WASM lo consume. Un tiempo de espera aplicado en incrementos de época: un subproceso dedicado aumenta el reloj Wasmtime después del retraso configurado, lo que interrumpe la ejecución actual. Un límite de memoria establecido a través de StoreLimits. Los tres terminales se configuran cuando se crea una instancia del motor:

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

// Memoria limitada por StoreLimits, combustible inicial = max_fuel,
// timeout = incremento de época después de timeout_secs (hilo dedicado)

El módulo compilado se almacena en caché mediante code_hash: el mismo binario implementado no se vuelve a compilar en cada llamada. Sin embargo, cada invocación crea una instancia de un nuevo Store y una instancia. Ningún estado se filtra de una llamada a la siguiente. El área de superficie expuesta al módulo invitado sigue siendo deliberadamente mínima, cinco funciones de host en total: aura.log, aura.get_input, aura.set_output, aura.get_env y un código auxiliar env.abort para compatibilidad con AssemblyScript. Ninguna función del host expone las llamadas de red salientes en este momento.

Verificado versus objetivo del producto

El modo wasm ahora es adecuado para cálculo puro: validación, transformación de datos, puntuación, análisis. Una función que debe llamar a una API de terceros (pago, correo electrónico, servicio externo) aún debe pasar por el modo deno. Este es el modo predeterminado para Aurabase y el modo recomendado para migrar el código Deno existente.

En el lado de la implementación, la CLI compila su caja localmente antes de enviarla: aura functions new estructura una caja cdylib, aura functions deploy la compila y luego la envía.

terminalbash
# Andamio: crea aurabase/functions/<nombre>/ (Cargo.toml crate-type = cdylib)
aura functions new my-fn

# cargo build --target wasm32-unknown-unknown --liberar, luego cargar
# POST /v1/functions/:project_id { tiempo de ejecución: "wasm", código: <wasm en base64> }
aura functions deploy my-fn
#
Llamarada de nube

Cloudflare Workers: aísla V8, con WebAssembly además

Los trabajadores de Cloudflare ejecutan de forma nativa JavaScript y TypeScript en aislados V8 distribuidos en la red global de Cloudflare. WebAssembly ha sido un ciudadano de primera clase desde el inicio de la plataforma: un módulo .wasm se puede importar directamente a un Worker como cualquier otro módulo.

Para escribir un Worker completamente en Rust, la ruta más utilizada es el SDK comunitario workers-rs, que compila el código en wasm32-unknown-unknown y lo ejecuta en el tiempo de ejecución de Workers. La diferencia con el modo wasm de Aurabase es el área de superficie disponible. Un trabajador escrito en Rust a través de este SDK se ejecuta en el entorno de trabajadores completo y, por lo tanto, puede llamar a fetch u otros enlaces de plataforma. El modo wasm de Aurabase comienza desde una superficie de host deliberadamente reducida (sección anterior).

#
Vercel

Funciones de Vercel Edge: un subconjunto de Node.js, sin ruta oficial de Rust

Edge Runtime de Vercel también ejecuta código en aislados V8, con un subconjunto de API web estándar (fetch, Request/Response, crypto.subtle…) en lugar del entorno Node.js completo. Los módulos de nodo nativo y las cadenas de herramientas de compilación arbitrarias no tienen cabida allí.

El objeto WebAssembly es parte de este subconjunto: nada le impide cargar un binario .wasm y crear una instancia de él manualmente desde una función JavaScript o TypeScript. Pero hasta donde sabemos, Vercel no publica ningún SDK o CLI oficial para escribir directamente una función Edge en Rust, a diferencia de workers-rs en el lado de Cloudflare o aura functions deploy en el lado de Aurabase. El camino sigue siendo posible, pero totalmente manual, sin herramientas específicas.

#
Seguridad

Sandbox: memoria lineal WASM versus aislamiento V8

Un aislamiento V8 separa el código ejecutado por un montón dedicado y su propio contexto, dentro del mismo proceso del motor. Es un mecanismo probado, a una escala de millones de solicitudes por segundo en Cloudflare y Vercel, pero que sigue siendo un mecanismo de aislamiento de software dentro de un único motor JavaScript.

El modelo WASM se aísla de manera diferente: cada instancia obtiene su propia memoria lineal, un búfer contiguo fuera del cual no es posible acceder mediante la construcción del formato binario en sí, independientemente del motor que lo ejecuta. En el tiempo de ejecución de Aurabase, cada función de host que manipula un puntero proporcionado por el módulo invitado (aura.log, aura.get_env…) revalida explícitamente los límites antes de cualquier acceso a la memoria. Esta es una defensa adicional en profundidad contra un módulo malicioso o con errores.

#
Descripción general

Las tres arquitecturas, una al lado de la otra

Aurabase (wasm)Trabajadores de CloudflareFunciones de borde de Vercel
Modelo de ejecuciónMódulo WASM nativo, WasmtimeAislar V8 + WASM como módulo opcionalAislar V8, subconjunto Node.js
Óxido en primer planoSí, modo dedicado + CLIA través del SDK comunitario (trabajadores-rs)No, no hay ruta oficial
Acceso a la red saliendo del móduloNo, marcado en el código (sin función de host de red)Sí, a través del entorno de trabajadores completoSí, API de recuperación estándar
Presupuesto de CPUTiempo de combustible, configurableLímite de tiempo de CPU por solicitud (documento de Cloudflare)Límite de duración por convocatoria (doc. Vercel)
Implementación de Rust dedicadaDespliegue de funciones de aura (construcción de carga local)wrangler + trabajadores-rsNo hay herramienta oficial equivalente

Especificaciones del tiempo de ejecución de Aurabase. Las columnas de Cloudflare y Vercel se describen a partir de la arquitectura pública documentada de cada plataforma (aísla V8 y WebAssembly como destino de compilación).

#
decisión

Qué tiempo de ejecución elegir según su función

Cálculo puro, sin llamadas de red: validación de esquemas, transformación de datos, puntuación, generación de imágenes ligeras. El modo wasm de Aurabase es adecuado directamente, con una zona de pruebas de memoria estricta, un presupuesto de CPU explícito y sin dependencia de un servicio externo.

Función que llama a una API de terceros (pago, correo electrónico, webhook saliente). El modo deno de Aurabase sigue siendo la opción predeterminada hoy en día, de la misma manera que un Cloudflare Worker clásico o una función Vercel Edge se basan en fetch de forma nativa.

El equipo ya invirtió en el ecosistema de Cloudflare (KV, Durable Objects, R2). Permanecer en Workers tiene sentido; workers-rs te permite introducir Rust gradualmente, sin cambiar de plataforma.

Necesita un tiempo de ejecución nativo de Rust administrado de extremo a extremo, con una CLI dedicada y el mismo lenguaje que el resto del backend. Este es el ángulo que documenta en nuestra comparación Wasmtime vs Wasmer, sobre la elección del motor WebAssembly.

#
Preguntas frecuentes

Preguntas frecuentes

¿Puedes escribir funciones de Aurabase Edge en Rust?+
Sí, a través del modo wasm. La CLI tendrá funciones de nuevo andamio en una caja Rust (cdylib tipo caja). El comando de implementación de funciones de aura lo compila localmente con cargo build --target wasm32-unknown-unknown --release, luego envía el binario al servicio de funciones de aura, que lo ejecuta de forma nativa con el tiempo de ejecución de Wasmtime. Este no es el modo predeterminado: de forma predeterminada, una función Aurabase Edge se ejecuta en JavaScript/TypeScript (tiempo de ejecución de Deno, V8 Isolates).
¿Cloudflare Workers realmente te permite escribir funciones en Rust?+
Sí, pero indirectamente: Cloudflare Workers ejecuta de forma nativa JavaScript/TypeScript en aislados V8. El SDK de la comunidad de trabajadores-rs le permite compilar un trabajador completo en Rust en WebAssembly, pero esta no es la ruta más documentada oficialmente. WASM complementa a un trabajador allí en lugar de reemplazar por completo el modelo JS.
¿Vercel Edge Functions es compatible con WebAssembly o Rust de forma nativa?+
Vercel Edge Runtime expone las API web estándar, incluido el objeto WebAssembly, por lo que se puede cargar y crear instancias de un módulo .wasm manualmente desde una función JavaScript/TypeScript. Pero hasta donde sabemos, Vercel no publica ningún SDK o CLI oficial para escribir una función Edge directamente en Rust, a diferencia de los trabajadores-rs en el lado de Cloudflare o las funciones aura implementadas en el lado de Aurabase.
¿Puede el modo wasm de Aurabase llamar a una API de terceros (pago, correo electrónico, etc.)?+
Hoy no: las funciones del host expuestas al módulo WASM invitado son el registro, la lectura de la solicitud de entrada y la escritura de la respuesta de salida, además de la lectura de las variables de entorno. Para una función que necesita llamar a una API externa (búsqueda de red), el tiempo de ejecución de Deno (predeterminado) es la ruta recomendada.

¿LISTO PARA IMPLEMENTAR?

Tu backend en cinco minutos.

No se requiere tarjeta de crédito · 500 MB gratis · 50,000 MAU