PRODSoeverein Europees BaaS-platformOpen Dashboard →

Prestaties · 11 min gelezen

WASM versus koude start van container: wat runtimes zeggen

Affane Daylami · Fondateur · 24 mei 2026

Terug naar blog

Een WebAssembly-module instantiëert in microseconden of milliseconden, afhankelijk van gepubliceerde bronnen. Een typische Docker-container start doorgaans binnen enkele honderden milliseconden, soms enkele seconden. Een Firecracker-microVM bevindt zich tussen de twee: minder dan 125 ms bij het opstarten, volgens het AWS-onderzoeksartikel dat deze in 2020 introduceerde. Deze drie families van cijfers delen niet dezelfde methodologie, noch dezelfde datum, noch hetzelfde meetprotocol: ze kunnen niet in één classificatie worden gestapeld.

Deze Engelse tekst is automatisch gegenereerd op basis van het Franse origineel en is nog niet beoordeeld.
Deze pagina is automatisch vertaald. De Engelse versie is gezaghebbend.

Dit artikel brengt samen wat identificeerbare externe bronnen publiceren over de koude start van WebAssembly in vergelijking met containers: een paper gepresenteerd op USENIX NSDI, officiële documentatie van Fastly, WasmEdge en Wasmer, en een academisch onderzoeksproject over serverloze isolatie. Er zijn geen Aurabase-figuren inbegrepen. Onze edge-functies werken goed op Wasmtime, geverifieerd in de repository, maar tot nu toe is er geen koude start-benchmark gepubliceerd die specifiek is voor onze infrastructuur, een onderscheid dat hieronder wordt beschreven. Voor de algemene benchmarkingmethode die elders op deze blog wordt toegepast, zie ons pijlerartikel over debenchmarkingmethodologie.

De essentie

  • Het AWS Firecracker-paper (Agache et al., USENIX NSDI 2020) documenteert een microVM-opstarttijd van minder dan 125 ms en een geheugenoverhead van minder dan 5 MiB: de meest nauwkeurig gekwantificeerde referentie in dit artikel.
  • Snel gedocumenteerde WASM-instantiatietijden van minder dan een milliseconde voor de AOT Lucet-runtime (waarvan de optimalisaties vervolgens werden samengevoegd in Wasmtime) in 2019. Dit is een cijfer gepubliceerd door de leverancier en nooit onafhankelijk gereproduceerd in de hier geraadpleegde bronnen.
  • WasmEdge, een project onder beheer van CNCF, claimt in zijn officiële documentatie een aanzienlijk lagere opstart- en geheugenvoetafdruk dan een gelijkwaardige Docker-container, zonder onafhankelijke tegenmaatregelen die in dit artikel worden aangehaald.
  • Wasmtime, Wasmer en WasmEdge compileren niet op dezelfde manier (Cranelift, Singlepass/Cranelift/LLVM naar keuze, eigen AOT-compiler): deze backend-keuze verklaart een groot deel van de kloof tussen hun gepubliceerde cijfers, niet alleen de runtime als zodanig.
  • Aurabase gebruikt Wasmtime in de productie voor zijn edge-functies, geverifieerd in aura-functions/Cargo.toml, maar publiceert tot op heden geen koudestartcijfers gemeten op de eigen infrastructuur.
Methodenotitie bij bronnen

De hieronder genoemde externe bronnen zijn herkenbaar aan hun titel, hun auteur of uitgever en hun publicatiedatum. Dit onderzoek is gebaseerd op erkende en breed gedocumenteerde publicaties in het WebAssembly- en serverloze ecosysteem, en niet op een live bevraging van hun pagina's op het moment van schrijven. Waar een precies cijfer niet met voldoende zekerheid kon worden bevestigd, wordt in dit artikel gebruik gemaakt van een orde van grootte in plaats van een exacte waarde, en wordt dit expliciet vermeld.

#
Inlijsten

Waarom de koude start van WASM zoveel ruimte in beslag neemt in het serverloze debat

Koude start verwijst naar de extra latentie die door een aanvraag wordt betaald wanneer de uitvoeringsomgeving moet worden geïnitialiseerd voordat de applicatiecode wordt uitgevoerd. Bij een klassieke edge- of serverloze functie is dit verre van een marginaal geval: een platform dat tussen twee verkeerspieken naar nul exemplaren gaat, of dat de uitvoering ervan verdeelt over tientallen geografisch verspreide edge-nodes, betaalt deze kosten permanent, en niet alleen bij de eerste implementatie.

Het onderwerp heeft een bijna symbolische betekenis gekregen in het WASM-ecosysteem sinds een zin van Solomon Hykes, mede-oprichter van Docker, gepubliceerd op Twitter in maart 2019: "Als WASM+WASI in 2008 bestond, hadden we Docker niet hoeven te creëren. Zo belangrijk is het. WebAssembly op de server is de toekomst van computergebruik. » Dit is een mening van een erkend vakman, geen meting. Het verklaart waarom het onderwerp fascineert, het vervangt niet een afkomstige figuur.

Aurabase biedt twee paden voor zijn edge-functies: de Studio-editor, die code uitvoert in de Deno-runtime zoals gedocumenteerd in onze Supabase-migratiehandleiding, en de aura functions deployCLI, die streeft naar een apart pad voor functies geschreven in Rust en gecompileerd naar WASM op Wasmtime. Het is deze tweede weg waar dit artikel licht op werpt, zonder er een koudstartcijfer aan te geven dat nog niet bestaat.

#
Architectuur

Waarom een WASM-module structureel sneller start dan een container

Het verschil komt niet uit een snellere runtime in absolute termen: het komt uit een kortere stapel stappen tussen de query en de applicatiecode.

Het starten van een container mobiliseert de hostkernel: het creëren van een nieuw proces, het instellen van de cgroups en naamruimten die het isoleren, het mounten van de lagen van de afbeelding en het starten van de runtime van de applicatie binnenin (Node.js en zijn V8-engine hebben bijvoorbeeld zelf initialisatiekosten). Elke stap voegt systeemaanroepen toe en, voor een afbeelding die nog nooit lokaal is gezien, een netwerkdownload voordat deze zelfs maar begint.

Een WebAssembly-module is geïsoleerd op het taalniveau van de virtuele machine, niet op het niveau van het besturingssysteem. Het instantiëren van een module betekent het toewijzen van het lineaire geheugen, het binden van de importen en het springen naar het toegangspunt, allemaal binnen het reeds gestarte proces van de hostruntime. Geen nieuwe processen, geen afbeeldingslagen, geen standaard bestandssysteemaankoppelingen.

De keuze van de compilatiemodus voegt een extra variabele toe. Wasmtime compileert naar JIT via de Cranelift-backend wanneer de module wordt geladen, of kan deze vooraf precompileren met wasmtime compile, wat een .cwasm-bestand produceert dat al is omgezet in native machinecode. Vroege compilatie (AOT) verwijdert de compilatiestap uit het kritieke pad van het verzoek: dit is precies de hefboom die een edge-architectuur die gevoelig is voor koude start moet activeren.

Cargo.tomltoml
# Werkelijk uittreksel uit de Aurabase-repository
# WASM-runtime
wasmtime = { version = "43", features = ["async", "cranelift"] }

Dit is een productieafhankelijkheid, geen ontwikkeling: het bevestigt dat Wasmtime feitelijk op het CLI-pad van de Aurabase edge-functies draait. Het bevestigt echter geen latentiecijfers, wat waar blijft zolang er geen gedateerde benchmark wordt gepubliceerd.

#
Cijfers gepubliceerd

Containers en microVM: de meest nauwkeurig gekwantificeerde referentie

Op dit gebied is de sterkste bron een onderzoekspaper uit de sector, en niet een marketingblogpost. Firecracker, de lichtgewicht microVM-technologie ontwikkeld door AWS en met name gebruikt voor Lambda en Fargate, werd op de USENIX NSDI 2020-conferentie gepresenteerd door Agache et al. in het artikel “Firecracker: lichtgewicht virtualisatie voor serverloze applicaties”.

Dit artikel documenteert een opstarttijd van minder dan 125 ms en een geheugenoverhead van minder dan 5 MiB per microVM, met de mogelijkheid om duizenden microVM's op dezelfde fysieke machine te draaien. Dit is een gedateerd cijfer (2020), afkomstig uit een peer-reviewed wetenschappelijke publicatie, en sindsdien veelvuldig geciteerd in de literatuur over serverloze isolatie.

Een standaard Docker-container is over het algemeen langer: van een paar honderd milliseconden tot enkele seconden, afhankelijk van de grootte van de afbeelding, de noodzaak om deze te downloaden en de opstarttijd van de runtime van de ingebedde applicatie. Er wordt hier geen enkel cijfer universeel aangehaald, in tegenstelling tot Firecracker: het resultaat hangt te veel af van het geteste beeld voor een enkele waarde om consensus te bereiken.

#
Cijfers gepubliceerd

WebAssembly: wat Fastly, WasmEdge en academisch onderzoeksdocument

Drie bronnen, drie verschillende statussen: een historische leverancier, een project onder stichtingsbestuur en een onderzoekspaper.

Lanceerde Compute@Edge in 2019 snel op Lucet, zijn eigen pre-compilerende WASM-compiler en runtime. Bij deze lancering documenteerde het bedrijf WASM-instantiatietijden van minder dan een milliseconde, een orde van grootte die een blijvende impact had op het WASM-koudestartdiscours in de branche. In 2021 stopte Fastly met de autonome ontwikkeling van Lucet en verlegde zijn inspanningen naar Wasmtime, waarvan de Cranelift-compilatie-backend een deel van deze optimalisaties erfde: dit is een van de redenen waarom Wasmtime vandaag de dag een referentie blijft voor dit soort belasting.

WasmEdge, een WASM-runtime onder CNCF-beheer (oorspronkelijk SSVM, ondersteund door Second State), claimt in zijn officiële documentatie een aanzienlijk lagere opstart- en geheugenvoetafdruk dan een gelijkwaardige Docker-container, met een expliciete positionering op edge- en IoT-belastingen. Dit is een cijfer dat door de projectuitgever zelf is gepubliceerd en als zodanig moet worden gelezen: een productclaim, geen onafhankelijke audit.

Aan de academische onderzoekskant bouwt Faasm (Shillaker & Pietzuch, USENIX ATC 2020, ook beschikbaar in pre-publicatie) een stateful serverloos platform dat vertrouwt op WebAssembly-isolatie (via WAVM, niet Wasmtime), juist omdat het het mogelijk maakt een functie te instantiëren tegen veel lagere kosten dan isolatie per container of per VM. Het artikel gaat niet specifiek over Wasmtime, maar biedt onafhankelijke academische validatie van het structurele argument uit het vorige deel.

#
Looptijden

Wasmtime vs Wasmer vs WasmEdge: waarom de gepubliceerde cijfers niet in de rij staan

Als je deze drie runtimes alleen op naam vergelijkt, verberg je de echte variabele: de gekozen compilatie-backend, die de balans tussen opstartsnelheid en uitvoeringsprestaties radicaal verandert.

WastijdCranelift (standaard JIT) + AOT via wasmtime-compilatieBytecode Alliance · open bestuur, gebruikt door Fastly, Shopify, Aurabase
WasmerSinglepass, Cranelift of LLVM naar keuzeSinglepass minimaliseert de compilatietijd; LLVM maximaliseert de uitvoeringsprestaties
WasmEdgeProjectspecifieke AOT-compilerCNCF · gepositioneerd edge/IoT en cloud-native

Singlepass, de snelste compilatie-backend van Wasmer, bestaat juist omdat het team koude start heeft geïdentificeerd als een aparte as van steady-state uitvoeringsprestaties: een module gecompileerd in Singlepass start sneller, maar draait langzamer tijdens piekbelasting dan dezelfde module gecompileerd in LLVM. Het is een geaccepteerd compromis, geen verborgen fout.

Een door een runtimeleverancier gepubliceerd cijfer is geen onafhankelijke audit

Wasmer heeft zijn eigen prestatievergelijkingen met Wasmtime gepubliceerd, een praktijk die aanleiding heeft gegeven tot discussies in de WASM-gemeenschap over de gebruikte methodologie en de vergelijkbaarheid van de geteste scenario's. Dit is geen beschuldiging van kwade trouw: het is een structurele herinnering. Een runtime-editor heeft er alle belang bij het scenario waarin hij wint te publiceren, wat onafhankelijke verificatie des te nuttiger maakt voordat op basis van één getal een architectuurkeuze wordt gemaakt.

#
Samenvatting

Vergelijkende tabel: wat elke bron documenteert en wat niet

<125ms
LAARS VOETBAL
Agache et al., NSDI 2020
3
WASM-LOOPTIJDEN VERGELEKEN
Wasmtime, Wasmer, WasmEdge
0
BENCHMARK KOUDE START AURABASE
Wastijd gecontroleerd in productie, geen metingen gepubliceerd
Voetzoeker (AWS)< 125 ms opstarten, < 5 MiB overhead Peer-reviewed onderzoekspaperAgache et al., USENIX NSDI 2020
Lucet → Wasmtime (snel)Instantiatie onder de milliseconde (2019) Leverancierscijfer, hier niet weergegevenSnel Compute@Edge aankondigen
WasmEdgeKleinere opstart- en geheugenvoetafdruk vergeleken met DockerPublisher-productclaimOfficiële WasmEdge-documentatie (CNCF)
Faasm (zoeken)WASM-isolatie is aanzienlijk goedkoper te instantiëren dan een container. Maakt gebruik van WAVM, niet van WasmtimeShillaker & Pietzuch, USENIX ATC 2020
Standaard Docker-containerHonderden ms tot enkele seconden. Geen enkel consensusnummerUitgebreid gedocumenteerd gedrag

Deze vijf regels kunnen niet als één enkele classificatie worden gelezen: ze komen uit verschillende methodologieën, data en runtime-generaties. Voor een meer diepgaande methodologische kritiek op de betrouwbaarheid van dit type WASM-benchmark gaat ons artikel over de grenzen van WebAssembly-benchmarks verder dan de huidige vergelijking, die gefocust blijft op wat elke bron concreet beweert.

#
Praktische implicaties

Wat deze kloof werkelijk verandert voor een keuze voor edge-architectuur

Het koude startvoordeel van WASM telt het meest op de belastingen die het meest gevoelig zijn voor de latentie van het eerste verzoek, en niet op alle belastingen in gelijke mate.

Het weegt vooral op zeer onregelmatig edge-verkeer (bursts gevolgd door stiltes), op isolatie per verzoek in plaats van per container die wordt gedeeld tussen verschillende verzoeken, en op een infrastructuur die tussen twee pieken feitelijk naar nul exemplaren gaat in plaats van permanent een hot pool te behouden. Bij een stabiele en voorspelbare belasting, waarbij instances hoe dan ook warm blijven, doet de koudestartkloof er structureel minder toe.

WebAssembly hanteert ook beperkingen die verschillen van een koude start: toegang tot het bestandssysteem of het netwerk gaat via WASI, een interface die nog steeds evolueert afhankelijk van de runtimes en hun versies, en een module die is gecompileerd om snel te starten (bijvoorbeeld Singlepass aan de Wasmer-kant) is niet noodzakelijkerwijs de snelste als deze eenmaal onder zware belasting is opgezet. Koude start en maximale uitvoeringsprestaties blijven twee verschillende assen, die zelden tegelijkertijd optimaal zijn op hetzelfde compilatieprofiel.

Om een keuze voor edge-architectuur op dit criterium te beoordelen, heeft Aurabase drie concrete vragen gesteld die aan elke leverancier kunnen worden gesteld: welke exacte runtime wordt gebruikt, welke compilatie-backend (JIT of AOT), en is het geavanceerde koude startcijfer gemeten door een onafhankelijke derde partij of alleen door de runtime-uitgever zelf.

#
Veelgestelde vragen

Veelgestelde vragen

Is de koude start van WebAssembly nog steeds sneller dan een Docker-container?+
In volgorde van grootte gaan de in dit artikel aangehaalde bronnen in deze richting: microseconden tot milliseconden voor de instantiatie van een WASM-module, vergeleken met honderden milliseconden tot enkele seconden voor een klassieke container. Maar geen van deze cijfers komt uit een meetprotocol dat beide families van technologieën gemeen hebben, op verschillende data en in verschillende versies. Moet worden behandeld als een breed gedocumenteerde trend, en niet als een numerieke garantie die voor elke belasting geldt.
Waarom maken Wasmtime, Wasmer en WasmEdge verschillende startnummers bekend?+
Omdat ze niet op dezelfde manier compileren. Wasmtime gebruikt Cranelift als standaard backend en biedt early build (AOT) via wasmtime-compilatie. Met Wasmer kunt u kiezen tussen Singlepass (snelste compilatie), Cranelift of LLVM (hoogste runtimeprestaties, langzamere compilatie). WasmEdge bevat een eigen AOT-compiler, ontworpen voor de edge en IoT. De keuze voor de backend verklaart een groot deel van de kloof tussen de cijfers die door elk project worden gepubliceerd.
Wat verandert de AOT-compilatie (van tevoren) eigenlijk voor de koude start?+
Een AOT-compilatie verwijdert de compilatiestap uit het kritieke pad van het verzoek: de WASM-module is al vóór de aanroep omgezet in machinecode, het enige dat overblijft is het laden en instantiëren ervan. Dit is het principe achter wasmtime-compilaties aan de Wasmtime-kant en de eigen compiler van WasmEdge. Een JIT-compilatie betaalt een deel van deze kosten bij elke nieuwe cold instance, tenzij de runtime het resultaat in de cache opslaat.
Heeft Aurabase een koudestartbenchmark uitgebracht voor zijn edge WASM-functies?+
Nee. Aurabase gebruikt Wasmtime in productie voor het CLI-pad van zijn edge-functies, de afhankelijkheid geverifieerd in aura-functions/Cargo.toml (versie 43, async- en kraanliftfuncties), maar tot nu toe zijn er geen koudestartcijfers gepubliceerd die op deze infrastructuur zijn gemeten. Onze methodologische inzet voor eventuele toekomstige prestatiecijfers wordt gedetailleerd beschreven in ons artikel over de benchmarkmethodologie.
Wat is het verschil tussen de koude start van een WASM-runtime en die van een serverloze Postgres-database?+
Dit zijn twee verschillende lagen van de stapel. De hier beschreven koude start heeft betrekking op de code-uitvoeringsomgeving, de WASM-runtime zelf. Een serverloze Postgres-database voegt zijn eigen opstartlatentie toe, gerelateerd aan de verbindingspool, bij het hervatten van een opgeschorte instantie of het tot stand brengen van een nieuwe gecodeerde verbinding. Ons artikel over serverloze koude start van Postgres gaat specifiek in op deze tweede laag.
Kunnen we de koudestart-benchmarks vertrouwen die door de WASM-runtime-editors zelf zijn gepubliceerd?+
Met voorzichtigheid. Een cijfer gepubliceerd door de uitgever van een runtime beschrijft zijn eigen testomstandigheden, die zelden onafhankelijk worden gereproduceerd, en de WASM-gemeenschap heeft al publieke meningsverschillen ervaren over de methodologie voor prestatievergelijkingen tussen runtimes. Ons artikel gewijd aan de beperkingen van WebAssembly-benchmarks gaat dieper in op deze methodologische kwesties.

Voor de databaselaag van ditzelfde probleem, zie ons artikel over de serverloze Postgres koude start.

KLAAR VOOR IMPLEMENTATIE?

Uw backend in vijf minuten.

Geen creditcard vereist · 500 MB gratis · 50.000 MAU