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.
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.
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.
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.
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.
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.
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.
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 hora | Cranelift (JIT por padrão) + AOT via compilação wasmtime | Bytecode Alliance · governança aberta, usada por Fastly, Shopify, Aurabase |
|---|---|---|
| Wasmer | Singlepass, Cranelift ou LLVM de sua escolha | Singlepass minimiza o tempo de compilação; LLVM maximiza o desempenho de execução |
| WasmEdge | Compilador AOT específico do projeto | CNCF · 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.
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.
Tabela comparativa: o que cada fonte documenta e o que não documenta
| Fogo de artifício (AWS) | < 125 ms de inicialização, < 5 MiB de sobrecarga Artigo de pesquisa revisado por pares | Agache et al., USENIX NSDI 2020 |
|---|---|---|
| Lucet → Wasmtime (rápido) | Instanciação abaixo do milissegundo (2019) Figura do fornecedor, não reproduzida aqui | Anunciando o Compute@Edge, rapidamente |
| WasmEdge | Menor inicialização e consumo de memória em comparação com a reivindicação do produto DockerPublisher | Documentação oficial do WasmEdge (CNCF) |
| Faasm (pesquisa) | O isolamento WASM é significativamente mais barato para instanciar do que um contêiner. Usa WAVM, não Wasmtime | Shillaker & Pietzuch, USENIX ATC 2020 |
| Contêiner Docker padrão | Centenas de ms a vários segundos Nenhum número de consenso único | Comportamento 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.
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
Para a camada de banco de dados deste mesmo problema, consulte nosso artigo sobre inicialização a frio do Postgres sem servidor.