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) ywasm(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 modowasmde 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
wasmde 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.
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.
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:
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:
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.
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.
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).
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.
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.
Las tres arquitecturas, una al lado de la otra
| Aurabase (wasm) | Trabajadores de Cloudflare | Funciones de borde de Vercel | |
|---|---|---|---|
| Modelo de ejecución | Módulo WASM nativo, Wasmtime | Aislar V8 + WASM como módulo opcional | Aislar V8, subconjunto Node.js |
| Óxido en primer plano | Sí, modo dedicado + CLI | A través del SDK comunitario (trabajadores-rs) | No, no hay ruta oficial |
| Acceso a la red saliendo del módulo | No, marcado en el código (sin función de host de red) | Sí, a través del entorno de trabajadores completo | Sí, API de recuperación estándar |
| Presupuesto de CPU | Tiempo de combustible, configurable | Límite de tiempo de CPU por solicitud (documento de Cloudflare) | Límite de duración por convocatoria (doc. Vercel) |
| Implementación de Rust dedicada | Despliegue de funciones de aura (construcción de carga local) | wrangler + trabajadores-rs | No 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).
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.