PRODPlataforma BaaS europeia soberanaAbra o painel →

Engenharia · 8 minutos de leitura

Rust/WASM Edge Functions versus Cloudflare e Vercel Edge

Affane Daylami · Fondateur · 22 de junho de 2026

Voltar ao blog

Cloudflare Workers e Vercel Edge Functions executam seu código em isolados V8, um contexto JavaScript leve, não um contêiner ou máquina virtual. Aurabase oferece um segundo caminho, verificado em seu código: um modo wasm que executa diretamente Rust compilado em WebAssembly, nativamente, no aura-functionsservice, através do tempo de execução Wasmtime.

Este texto em inglês foi gerado automaticamente a partir do original em francês e ainda não foi revisado.
Esta página foi traduzida automaticamente. A versão em inglês é oficial.

No entanto, o modo padrão do Aurabase permanece Deno (V8 Isolates também), conforme documentado em Rust core do Aurabase. “Edge Functions in Rust” cobre três realidades diferentes dependendo da plataforma: um SDK comunitário no lado Cloudflare, nenhuma rota oficial no lado Vercel, um modo de execução nativo com sua própria CLI no lado Aurabase. Esta comparação detalha as três arquiteturas sem misturar o que é verificado e o que permanece como objetivo da plataforma.

O essencial

  • Aurabase oferece dois tempos de execução de Edge Functions: deno (V8 Isolates, serviço dedicado, modo padrão) e wasm (Rust compilado, executado nativamente via Wasmtime).
  • Cloudflare Workers é executado em isolados V8 e também pode executar WebAssembly, principalmente por meio do SDK da comunidade workers-rs. Não é um tempo de execução Rust nativo dedicado como o modo wasm do Aurabase.
  • Vercel Edge Functions depende do Edge Runtime, um subconjunto da API Node.js em isolados V8: nenhum SDK ou CLI oficial para escrever a própria função em Rust.
  • O modo wasm do Aurabase isola cada execução com um orçamento de CPU de combustível Wasmtime, um limite de memória dedicado e um tempo limite por época, mas atualmente não expõe nenhum acesso de rede de saída para o módulo convidado.
  • Três arquiteturas diferentes para o mesmo objetivo: iniciar rapidamente e isolar cada execução, sem o custo de um container completo.
#
Contexto

Isolados V8 e módulos WASM: duas mecânicas de sandbox

Um V8 isolado é um contexto leve de execução de JavaScript dentro do mesmo mecanismo V8: sem novos processos de sistema, sem novo kernel para iniciar. Este é o mecanismo que a Cloudflare tornou público pela primeira vez para Workers e que a Vercel reutiliza em seu Edge Runtime. O objetivo é o mesmo dos dois lados: evitar o custo de um contêiner ou de uma VM para cada solicitação.

Um módulo WebAssembly atende à mesma necessidade por meio de um mecanismo diferente. O bytecode WASM é executado em uma memória linear limitada, definida pela própria especificação. O módulo convidado não pode endereçar fora desta área, independentemente da linguagem fonte (Rust, C, Go…) que produziu o binário. É este modelo que o Wasmtime aplica no modo wasm do Aurabase, detalhado a seguir. Para medições de inicialização entre as duas mecânicas, consulte nosso arquivo em benchmarks de inicialização a frio do WebAssembly.

#
Tempo de execução WASM

Qual modo wasm do Aurabase é executado em produção

Cada função Aurabase carrega um campo runtime que vale "wasm" ou "deno". O mecanismo de invocação escolhe o caminho de execução de acordo:

runtime/dispatch.rsrust
// Despache de acordo com o tempo de execução: WASM (wasmtime) ou Deno (V8 isola via edge-runtime)
let resp = if func.runtime == "wasm" {
    state.runtime.invoke(&wasm_bytes, &func.code_hash, req).await?
} else {
    // Proxy para aura-edge-runtime — Isolados V8 (supabase/edge-runtime, MIT)
    proxy_to_edge_runtime(&state.config.edge_runtime_url, …).await?
};

A sandbox depende de três mecanismos Wasmtime combinados. Um orçamento de CPU contado em “combustível”: cada instrução WASM o consome. Um timeout aplicado em incrementos de época: um thread dedicado aumenta o relógio Wasmtime após o atraso configurado, o que interrompe a execução atual. Um limite de memória definido por meio de StoreLimits. Os três terminais são configurados quando o mecanismo é instanciado:

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

// Memória limitada por StoreLimits, combustível inicial = max_fuel,
// timeout = incremento de época após timeout_secs (thread dedicado)

O módulo compilado é armazenado em cache por code_hash: o mesmo binário implantado não é recompilado em cada chamada. No entanto, cada invocação instancia um novo Store e uma nova instância. Nenhum estado vaza de uma chamada para outra. A área de superfície exposta ao módulo convidado permanece deliberadamente mínima, cinco funções de host no total: aura.log, aura.get_input, aura.set_output, aura.get_env e um stub env.abort para compatibilidade com AssemblyScript. Nenhuma função de host expõe chamadas de rede de saída neste momento.

Objetivo verificado vs. produto

O modo wasm agora é adequado para cálculo puro: validação, transformação de dados, pontuação, análise. Uma função que deve chamar uma API de terceiros (pagamento, email, serviço externo) ainda deve passar pelo modo deno. Este é o modo padrão para Aurabase e o modo recomendado para migrar o código Deno existente.

No lado da implantação, a CLI compila sua caixa localmente antes de enviar: aura functions new cria uma caixa cdylib, aura functions deploy compila-a e depois a envia.

terminalbash
# Andaime: cria aurabase/functions/<nome>/ (Cargo.toml crate-type = cdylib)
aura functions new my-fn

# cargo build --target wasm32-unknown-unknown --release e, em seguida, carregue
# POST /v1/functions/:project_id { tempo de execução: "wasm", código: <wasm em base64> }
aura functions deploy my-fn
#
nuvemflare

Cloudflare Workers: isola V8, com WebAssembly adicional

Os Cloudflare Workers executam JavaScript e TypeScript nativamente em isolados V8 distribuídos pela rede global da Cloudflare. WebAssembly tem sido um cidadão de primeira classe desde o início da plataforma: um módulo .wasm pode ser importado diretamente para um Worker como qualquer outro módulo.

Para escrever um Worker inteiramente em Rust, a rota mais utilizada é o SDK da comunidade workers-rs, que compila o código para wasm32-unknown-unknown e o executa no runtime do Workers. A diferença com o modo wasm do Aurabase é a área de superfície disponível. Um Worker escrito em Rust por meio deste SDK é executado no ambiente Workers completo e pode, portanto, chamar fetch ou outras ligações de plataforma. O modo wasm do Aurabase começa a partir de uma superfície de host deliberadamente reduzida (seção anterior).

#
Vercel

Vercel Edge Functions: um subconjunto Node.js, sem caminho oficial do Rust

O Edge Runtime da Vercel também executa código em isolados V8, com um subconjunto de APIs da Web padrão (fetch, Request/Response, crypto.subtle…) em vez do ambiente Node.js completo. Módulos Native Node e conjuntos de ferramentas de compilação arbitrários não têm lugar lá.

O objeto WebAssembly faz parte deste subconjunto: nada impede que você carregue um binário .wasm e instancie-o manualmente a partir de uma função JavaScript ou TypeScript. Mas, até onde sabemos, Vercel não publica nenhum SDK ou CLI oficial para escrever diretamente uma Edge Function em Rust, ao contrário de workers-rs no lado Cloudflare ou aura functions deploy no lado Aurabase. O caminho continua possível, mas totalmente manual, sem ferramentas dedicadas.

#
Segurança

Sandbox: memória linear WASM versus isolamento V8

Um isolado V8 separa o código executado por um heap dedicado e seu próprio contexto, dentro do mesmo processo do mecanismo. É um mecanismo comprovado, na escala de milhões de solicitações por segundo na Cloudflare e Vercel, mas que continua sendo um mecanismo de isolamento de software dentro de um único mecanismo JavaScript.

O modelo WASM isola de forma diferente: cada instância obtém sua própria memória linear, um buffer contíguo fora do qual nenhum acesso é possível pela construção do próprio formato binário, independentemente do mecanismo que o executa. No tempo de execução do Aurabase, cada função host que manipula um ponteiro fornecido pelo módulo convidado (aura.log, aura.get_env…) revalida explicitamente os limites antes de qualquer acesso à memória. Esta é uma defesa adicional em profundidade contra um módulo malicioso ou com bugs.

#
Visão geral

As três arquiteturas, lado a lado

Aurabase (wasm)Trabalhadores da CloudflareFunções do Vercel Edge
Modelo de execuçãoMódulo WASM nativo, WasmtimeIsole V8 + WASM como um módulo opcionalIsolar V8, subconjunto Node.js
Ferrugem em primeiro planoSim, modo dedicado + CLIVia SDK da comunidade (workers-rs)Não, nenhuma rota oficial
Acesso à rede saindo do móduloNão, verificado no código (sem função de host de rede)Sim, através do ambiente Workers completoSim, API de busca padrão
Orçamento de CPUTempo de consumo de combustível, configurávelLimite de tempo de CPU por solicitação (documento Cloudflare)Limite de duração por convocação (doc. Vercel)
Implantação Rust dedicadaimplantação de funções aura (construção de carga local)wrangler + trabalhadores-rsNenhuma ferramenta equivalente oficial

Especificações de tempo de execução do Aurabase. Colunas Cloudflare e Vercel descritas a partir da arquitetura pública documentada de cada plataforma (isola V8, WebAssembly como destino de construção).

#
Decisão

Qual tempo de execução escolher de acordo com sua função

Cálculo puro, sem chamadas de rede: validação de esquema, transformação de dados, pontuação, geração de imagens leves. O modo wasm do Aurabase é adequado diretamente, com uma área restrita de memória, um orçamento de CPU explícito e sem dependência de um serviço externo.

Função que chama uma API de terceiros (pagamento, email, webhook de saída). O modo deno do Aurabase continua sendo a escolha padrão hoje, da mesma forma que um Cloudflare Worker clássico ou uma função Vercel Edge depende de fetch nativamente.

Equipe já investiu no ecossistema Cloudflare (KV, Durable Objects, R2). Permanecer nos Trabalhadores faz sentido; workers-rs permite introduzir Rust gradualmente, sem alterar plataformas.

Precisa de um tempo de execução Rust nativo gerenciado de ponta a ponta, com uma CLI dedicada e a mesma linguagem do resto do back-end. Este é o ângulo que documenta em nossa comparação Wasmtime vs Wasmer, na escolha do próprio mecanismo WebAssembly.

#
Perguntas frequentes

Perguntas frequentes

Você pode escrever funções Aurabase Edge em Rust?+
Sim, através do modo wasm. A CLI terá funções de novo andaime a Rust crate (tipo cdylib). O comando aura functions deploy compila-o localmente com cargo build --target wasm32-unknown-unknown --release e, em seguida, envia o binário para o serviço aura-functions, que o executa nativamente com o tempo de execução Wasmtime. Este não é o modo padrão: por padrão, uma função Aurabase Edge é executada em JavaScript/TypeScript (tempo de execução Deno, V8 Isolates).
O Cloudflare Workers realmente permite que você escreva funções em Rust?+
Sim, mas indiretamente: Cloudflare Workers executa JavaScript/TypeScript nativamente em isolados V8. O SDK da comunidade workers-rs permite compilar um Worker inteiro em Rust para WebAssembly, mas esta não é a rota mais oficialmente documentada. WASM complementa um Worker em vez de substituir completamente o modelo JS.
O Vercel Edge Functions suporta WebAssembly ou Rust nativamente?+
O Vercel Edge Runtime expõe APIs da Web padrão, incluindo o objeto WebAssembly, para que um módulo .wasm possa ser carregado e instanciado manualmente a partir de uma função JavaScript/TypeScript. Mas, até onde sabemos, Vercel não publica nenhum SDK ou CLI oficial para escrever uma função Edge diretamente em Rust, ao contrário de workers-rs no lado Cloudflare ou funções aura implantadas no lado Aurabase.
O modo wasm do Aurabase pode chamar uma API de terceiros (pagamento, e-mail, etc.)?+
Hoje não: as funções do host expostas ao módulo WASM convidado são o log, a leitura da solicitação de entrada e a gravação da resposta de saída, bem como a leitura das variáveis de ambiente. Para uma função que precisa chamar uma API externa (busca de rede), o tempo de execução Deno (padrão) é o caminho recomendado.

PRONTO PARA IMPLEMENTAR?

Seu back-end em cinco minutos.

Não é necessário cartão de crédito · 500 MB grátis · 50.000 MAU