PRODPlataforma BaaS europeia soberanaAbra o painel →

Desempenho · 11 minutos de leitura

Cold start: WASM vs contêineres, o que dizem os runtimes

Affane Daylami · Fondateur · 24 de maio de 2026

Voltar ao blog

Um módulo WebAssembly é instanciado em microssegundos ou milissegundos, dependendo das fontes publicadas. Um contêiner Docker típico normalmente inicia em várias centenas de milissegundos, às vezes em vários segundos. Um microVM Firecracker está entre os dois: menos de 125 ms na inicialização, de acordo com o artigo de pesquisa da AWS que o apresentou em 2020. Essas três famílias de números não compartilham a mesma metodologia, nem a mesma data, nem o mesmo protocolo de medição: não podem ser agrupadas em uma única classificação.

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.

Este artigo reúne o que fontes identificáveis de terceiros publicam sobre a inicialização a frio do WebAssembly em comparação com contêineres: um artigo apresentado na USENIX NSDI, documentação oficial da Fastly, WasmEdge e Wasmer e um projeto de pesquisa acadêmica sobre isolamento sem servidor. Nenhuma figura Aurabase está incluída. Nossas funções de borda funcionam bem no Wasmtime, verificadas no repositório, mas nenhum benchmark de inicialização a frio específico para nossa infraestrutura foi publicado até o momento, uma distinção detalhada abaixo. Para o método de benchmarking geral aplicado em outras partes deste blog, consulte nosso artigo do pilar sobre metodologia de benchmarking.

O essencial

  • O documento AWS Firecracker (Agache et al., USENIX NSDI 2020) documenta uma inicialização de microVM em menos de 125 ms e uma sobrecarga de memória em menos de 5 MiB: a referência quantificada com mais precisão neste artigo.
  • Tempos de instanciação WASM rapidamente documentados abaixo de um milissegundo para seu tempo de execução AOT Lucet (cujas otimizações foram então incorporadas ao Wasmtime) em 2019. Este é um número publicado pelo fornecedor, nunca reproduzido de forma independente nas fontes aqui consultadas.
  • WasmEdge, um projeto sob governança CNCF, afirma em sua documentação oficial uma inicialização e consumo de memória significativamente menores do que um contêiner Docker equivalente, sem contramedidas independentes citadas neste artigo.
  • Wasmtime, Wasmer e WasmEdge não compilam da mesma maneira (Cranelift, Singlepass/Cranelift/LLVM de sua escolha, compilador AOT próprio): esta escolha de backend explica boa parte da lacuna entre seus números publicados, não apenas o tempo de execução como tal.
  • Aurabase usa Wasmtime em produção para suas funções de borda, verificadas em aura-functions/Cargo.toml, mas até o momento não publica nenhum número de inicialização a frio medido em sua própria infraestrutura.
Nota de método sobre fontes

As fontes de terceiros citadas abaixo são identificáveis pelo título, autor ou editor e data de publicação. Esta pesquisa se baseia em publicações reconhecidas e amplamente documentadas no WebAssembly e no ecossistema sem servidor, e não em uma consulta ao vivo de suas páginas no momento da redação. Nos casos em que um número preciso não pôde ser confirmado com certeza suficiente, este artigo utiliza uma ordem de grandeza em vez de um valor exato, e afirma isso explicitamente.

#
Enquadramento

Por que a inicialização a frio do WASM ocupa tanto espaço no debate sem servidor

A inicialização a frio refere-se à latência adicional paga por uma solicitação quando o ambiente de execução deve ser inicializado antes da execução do código do aplicativo. Numa função edge clássica ou sem servidor, isto está longe de ser um caso marginal: uma plataforma que chega a zero instâncias entre dois picos de tráfego, ou que distribui a sua execução por dezenas de nós edge geograficamente dispersos, paga este custo permanentemente, e não apenas na primeira implementação.

O assunto assumiu uma importância quase simbólica no ecossistema WASM desde uma frase de Solomon Hykes, cofundador do Docker, publicada no Twitter em março de 2019: “Se WASM+WASI existisse em 2008, não precisaríamos criar o Docker. É assim que é importante. WebAssembly no servidor é o futuro da computação. » Esta é uma opinião de um profissional reconhecido, não uma medição. Explica porque o assunto fascina, não substitui um figura de origem.

Aurabase oferece dois caminhos para suas funções de borda: o editor Studio, que executa código no tempo de execução Deno conforme documentado em nosso Guia de migração Supabase, e o aura functions deployCLI, que visa um caminho separado para funções escritas em Rust e compiladas para WASM no Wasmtime. É sobre este segundo caminho que este artigo esclarece, sem lhe dar um valor de arranque a frio que ainda não existe.

#
Arquitetura

Por que um módulo WASM inicia estruturalmente mais rápido que um contêiner

A diferença não vem de um tempo de execução mais rápido em termos absolutos: ela vem de uma pilha menor de etapas entre a consulta e o código da aplicação.

Iniciar um contêiner mobiliza o kernel do host: criar um novo processo, configurar os cgroups e namespaces que o isolam, montar as camadas da imagem e, em seguida, iniciar o tempo de execução do aplicativo interno (o Node.js e seu mecanismo V8, por exemplo, têm um custo de inicialização). Cada etapa adiciona chamadas de sistema e, para uma imagem nunca vista localmente, um download de rede antes mesmo de começar.

Um módulo WebAssembly é isolado no nível da linguagem da máquina virtual, não no nível do sistema operacional. Instanciar um módulo significa alocar sua memória linear, vincular suas importações e, em seguida, saltar para seu ponto de entrada, tudo dentro do processo já iniciado do tempo de execução do host. Sem novos processos, sem camadas de imagem, sem montagens de sistema de arquivos padrão.

A escolha do modo de compilação adiciona uma variável adicional. Wasmtime compila para JIT por meio de seu backend Cranelift quando o módulo é carregado, ou pode pré-compilá-lo antecipadamente com wasmtime compile, que produz um arquivo .cwasm já transformado em código de máquina nativo. A compilação antecipada (AOT) remove a etapa de compilação do caminho crítico da solicitação: esta é exatamente a alavanca que uma arquitetura de borda sensível à inicialização a frio deve ativar.

Cargo.tomltoml
# Extrato real do repositório Aurabase
# Tempo de execução WASM
wasmtime = { version = "43", features = ["async", "cranelift"] }

Esta é uma dependência de produção, não de desenvolvimento: ela confirma que o Wasmtime realmente é executado no caminho CLI das funções de borda do Aurabase. No entanto, não confirma quaisquer números de latência, o que permanece verdadeiro desde que nenhum benchmark datado seja publicado.

#
Números publicados

Containers e microVM: a referência quantificada com mais precisão

Nessa área, a fonte mais forte é um artigo de pesquisa do setor, não uma postagem em um blog de marketing. Firecracker, a tecnologia microVM leve desenvolvida pela AWS e usada principalmente para Lambda e Fargate, foi apresentada na conferência USENIX NSDI 2020 por Agache et al. no artigo “Firecracker: Virtualização leve para aplicativos sem servidor”.

Este documento documenta um tempo de inicialização inferior a 125 ms e uma sobrecarga de memória inferior a 5 MiB por microVM, com a capacidade de executar milhares de microVMs na mesma máquina física. Este é um número datado (2020), proveniente de uma publicação acadêmica revisada por pares e amplamente citado desde então na literatura sobre isolamento sem servidor.

Um contêiner Docker padrão geralmente é maior: de algumas centenas de milissegundos a vários segundos, dependendo do tamanho da imagem, da necessidade de baixá-la e do tempo de inicialização do tempo de execução do aplicativo incorporado. Não há uma figura única universalmente citada aqui, ao contrário do Firecracker: o resultado depende muito da imagem testada para um único valor chegar a um consenso.

#
Números publicados

WebAssembly: o que Fastly, WasmEdge e documento de pesquisa acadêmica

Três fontes, três status diferentes: um fornecedor histórico, um projeto sob governança da fundação e um artigo de pesquisa.

Lançou rapidamente o Compute@Edge em 2019 no Lucet, seu próprio compilador e tempo de execução WASM de pré-compilação. Neste lançamento, a empresa documentou tempos de instanciação do WASM abaixo de um milissegundo, uma ordem de magnitude que teve um impacto duradouro no discurso de inicialização a frio do WASM na indústria. Em 2021, a Fastly encerrou o desenvolvimento autônomo do Lucet e redirecionou seus esforços para o Wasmtime, cujo backend de compilação do Cranelift herdou parte dessas otimizações: esse é um dos motivos pelos quais o Wasmtime continua hoje sendo referência para esse tipo de carga.

WasmEdge, um tempo de execução WASM sob governança CNCF (originalmente SSVM, suportado pelo Second State), afirma em sua documentação oficial uma inicialização e consumo de memória significativamente menores do que um contêiner Docker equivalente, com um posicionamento explícito nas cargas de borda e IoT. Este é um número publicado pelo próprio editor do projeto, para ser lido como tal: uma declaração de produto, não uma auditoria independente.

Do lado da pesquisa acadêmica, Faasm (Shillaker & Pietzuch, USENIX ATC 2020, também disponível em pré-publicação) constrói uma plataforma stateful serverless baseada no isolamento WebAssembly (via WAVM, não Wasmtime) precisamente porque permite que uma função seja instanciada a um custo muito menor do que o isolamento por contêiner ou por VM. O artigo não é especificamente sobre Wasmtime, mas fornece validação acadêmica independente para o argumento estrutural da seção anterior.

#
Tempos de execução

Wasmtime vs Wasmer vs WasmEdge: por que os números publicados não coincidem

Comparar esses três tempos de execução apenas pelo nome esconde a variável real: o backend de compilação escolhido, que muda radicalmente o equilíbrio entre velocidade de inicialização e desempenho de execução.

Estava na horaCranelift (JIT por padrão) + AOT via compilação wasmtimeBytecode Alliance · governança aberta, usada por Fastly, Shopify, Aurabase
WasmerSinglepass, Cranelift ou LLVM de sua escolhaSinglepass minimiza o tempo de compilação; LLVM maximiza o desempenho de execução
WasmEdgeCompilador AOT específico do projetoCNCF · edge/IoT posicionado e nativo da nuvem

Singlepass, o back-end de compilação mais rápido do Wasmer, existe precisamente porque sua equipe identificou a inicialização a frio como um eixo distinto de desempenho de execução em estado estacionário: um módulo compilado em Singlepass inicia mais rápido, mas funciona mais lentamente durante o pico de carga do que o mesmo módulo compilado em LLVM. É um compromisso aceito, não uma falha oculta.

Um número publicado por um fornecedor de runtime não é uma auditoria independente

Wasmer publicou suas próprias comparações de desempenho com o Wasmtime, uma prática que gerou debates na comunidade WASM sobre a metodologia utilizada e a comparabilidade dos cenários testados. Isto não é uma acusação de má-fé: é um lembrete estrutural. Um editor de tempo de execução tem interesse em publicar o cenário em que vence, o que torna a verificação independente ainda mais útil antes de decidir sobre uma escolha de arquitetura em um único número.

#
Resumo

Tabela comparativa: o que cada fonte documenta e o que não documenta

<125ms
FOGUETE DE BOTA
Agache et al., INDE 2020
3
TEMPOS DE EXECUÇÃO DO WASM COMPARADOS
Wasmtime, Wasmer, WasmEdge
0
REFERÊNCIA AURABASE DE INÍCIO A FRIO
Wasmtime verificado na produção, nenhuma medição publicada
Fogo de artifício (AWS)< 125 ms de inicialização, < 5 MiB de sobrecarga Artigo de pesquisa revisado por paresAgache et al., USENIX NSDI 2020
Lucet → Wasmtime (rápido)Instanciação abaixo do milissegundo (2019) Figura do fornecedor, não reproduzida aquiAnunciando o Compute@Edge, rapidamente
WasmEdgeMenor inicialização e consumo de memória em comparação com a reivindicação do produto DockerPublisherDocumentação oficial do WasmEdge (CNCF)
Faasm (pesquisa)O isolamento WASM é significativamente mais barato para instanciar do que um contêiner. Usa WAVM, não WasmtimeShillaker & Pietzuch, USENIX ATC 2020
Contêiner Docker padrãoCentenas de ms a vários segundos Nenhum número de consenso únicoComportamento amplamente documentado

Essas cinco linhas não são interpretadas como uma classificação única: elas vêm de diferentes metodologias, datas e gerações de tempo de execução. Para uma crítica metodológica mais aprofundada sobre a confiabilidade deste tipo de benchmark WASM, nosso artigo sobre os limites dos benchmarks WebAssembly vai além da presente comparação, que permanece focada no que cada fonte afirma concretamente.

#
Implicações práticas

O que essa lacuna realmente muda na escolha da arquitetura de ponta

A vantagem da inicialização a frio do WASM conta mais com as cargas mais sensíveis à latência da primeira solicitação, e não com todas as cargas igualmente.

Pesa particularmente no tráfego de borda muito irregular (rajadas seguidas de silêncios), no isolamento por solicitação, em vez de por contêiner compartilhado entre várias solicitações, e em uma infraestrutura que na verdade cai para zero instâncias entre dois picos, em vez de manter um hot pool permanentemente. Em uma carga estável e previsível, onde as instâncias permanecem quentes de qualquer maneira, o intervalo de inicialização a frio é estruturalmente menos importante.

O WebAssembly também mantém restrições distintas da inicialização a frio: o acesso ao sistema de arquivos ou à rede passa por WASI, uma interface ainda em evolução dependendo dos tempos de execução e suas versões, e um módulo compilado para iniciar rapidamente (Singlepass no lado Wasmer, por exemplo) não é necessariamente o mais rápido uma vez estabelecido sob carga pesada. A inicialização a frio e o desempenho de pico de execução permanecem dois eixos distintos, raramente ideais simultaneamente no mesmo perfil de compilação.

Para avaliar a escolha da arquitetura de borda neste critério, três perguntas concretas a serem feitas a qualquer fornecedor, a Aurabase incluiu: qual tempo de execução exato é usado, qual back-end de compilação (JIT ou AOT) e se o valor avançado de inicialização a frio foi medido por um terceiro independente ou apenas pelo próprio editor de tempo de execução.

#
Perguntas frequentes

Perguntas frequentes

A inicialização a frio do WebAssembly ainda é mais rápida que um contêiner Docker?+
Em ordem de grandeza, as fontes citadas neste artigo vão nesta direção: microssegundos a milissegundos para a instanciação de um módulo WASM, em comparação com centenas de milissegundos a vários segundos para um contêiner clássico. Mas nenhum destes números provém de um protocolo de medição comum às duas famílias de tecnologias, em datas e versões diferentes. Deve ser tratada como uma tendência amplamente documentada e não como uma garantia numérica válida para qualquer carga.
Por que Wasmtime, Wasmer e WasmEdge anunciam números iniciais diferentes?+
Porque eles não compilam da mesma maneira. Wasmtime usa Cranelift como back-end padrão e oferece construção antecipada (AOT) por meio de compilação wasmtime. Wasmer permite escolher entre Singlepass (compilação mais rápida), Cranelift ou LLVM (maior desempenho de tempo de execução, compilação mais lenta). WasmEdge inclui seu próprio compilador AOT, projetado para edge e IoT. A escolha do backend explica boa parte da lacuna entre os números publicados por cada projeto.
O que a compilação AOT (ahead-of-time) realmente muda para a inicialização a frio?+
Uma compilação AOT remove a etapa de compilação do caminho crítico da solicitação: o módulo WASM já está transformado em código de máquina antes da invocação, resta apenas carregá-lo e instanciá-lo. Este é o princípio por trás das compilações do wasmtime no lado do Wasmtime e no próprio compilador do WasmEdge. Uma compilação JIT paga parte desse custo com cada nova instância fria, a menos que o tempo de execução armazene o resultado em cache.
A Aurabase lançou um benchmark de inicialização a frio para suas funções WASM de ponta?+
Aurabase usa Wasmtime na produção para o caminho CLI de suas funções de borda, dependência verificada em aura-functions/Cargo.toml (versão 43, recursos assíncronos e Cranelift), mas nenhum número de inicialização a frio medido nesta infraestrutura foi publicado até o momento. Nosso compromisso metodológico para quaisquer números de desempenho futuros está detalhado em nosso artigo sobre metodologia de benchmark.
Qual é a diferença entre a inicialização a frio de um tempo de execução WASM e de um banco de dados Postgres sem servidor?+
Estas são duas camadas diferentes da pilha. A inicialização a frio descrita aqui diz respeito ao ambiente de execução de código, o próprio tempo de execução WASM. Um banco de dados Postgres sem servidor adiciona sua própria latência de inicialização, relacionada ao pool de conexões, ao retomar uma instância suspensa ou estabelecer uma nova conexão criptografada. Nosso artigo sobre inicialização a frio do Postgres sem servidor aborda especificamente essa segunda camada.
Podemos confiar nos benchmarks de inicialização a frio publicados pelos próprios editores de tempo de execução do WASM?+
Com cautela. Uma figura publicada pelo editor de um tempo de execução descreve suas próprias condições de teste, raramente reproduzidas de forma independente, e a comunidade WASM já experimentou divergências públicas sobre a metodologia para comparações de desempenho entre tempos de execução. Nosso artigo dedicado às limitações dos benchmarks WebAssembly detalha essas questões metodológicas com mais profundidade.

Para a camada de banco de dados deste mesmo problema, consulte nosso artigo sobre inicialização a frio do Postgres sem servidor.

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