PRODSuwerenna europejska platforma BaaSOtwórz Panel →

Wydajność · 11 min odczytu

WASM a zimne uruchomienie kontenera: co mówią środowiska wykonawcze

Affane Daylami · Fondateur · 24 maja 2026

Powrót do bloga

Instancja modułu WebAssembly jest tworzona w mikrosekundach lub milisekundach, w zależności od opublikowanych źródeł. Typowy kontener Docker zwykle uruchamia się po kilkuset milisekundach, czasem po kilku sekundach. Jak wynika z artykułu badawczego AWS, w którym wprowadzono tę technologię w 2020 r., mikroVM Firecracker plasuje się pomiędzy nimi: czas rozruchu krótszy niż 125 ms. Te trzy rodziny liczb nie mają tej samej metodologii, daty ani protokołu pomiarowego: nie można ich połączyć w jedną klasyfikację.

Ten tekst w języku angielskim został wygenerowany automatycznie na podstawie francuskiego oryginału i nie był jeszcze recenzowany.
Ta strona została przetłumaczona automatycznie. Wersja angielska jest miarodajna.

W tym artykule zebrano możliwe do zidentyfikowania źródła zewnętrzne publikujące na temat zimnego startu WebAssembly w porównaniu z kontenerami: artykuł przedstawiony na konferencji USENIX NSDI, oficjalna dokumentacja firm Fastly, WasmEdge i Wasmer oraz akademicki projekt badawczy dotyczący izolacji bezserwerowej. Zestaw nie zawiera figurek Aurabase. Nasze funkcje brzegowe działają dobrze w Wasmtime, co zostało zweryfikowane w repozytorium, ale jak dotąd nie opublikowano żadnego testu porównawczego zimnego startu specyficznego dla naszej infrastruktury, rozróżnienie opisano szczegółowo poniżej. Informacje na temat ogólnej metody benchmarkingu stosowanej w innym miejscu tego bloga można znaleźć w naszym artykule filarowym na temat metodologii benchmarkingu.

Najważniejsze

  • Artykuł AWS Firecracker (Agache i in., USENIX NSDI 2020) dokumentuje uruchomienie mikroVM poniżej 125 ms i obciążenie pamięci poniżej 5 MiB: najdokładniej określone ilościowo odniesienie w tym artykule.
  • Szybko udokumentowane czasy instancji WASM poniżej milisekundy dla środowiska wykonawczego AOT Lucet (którego optymalizacje zostały następnie połączone z Wasmtime) w 2019 r. Jest to liczba opublikowana przez dostawcę, nigdy nie reprodukowana niezależnie w konsultowanych tutaj źródłach.
  • WasmEdge, projekt zarządzany przez CNCF, w swojej oficjalnej dokumentacji twierdzi, że wymaga znacznie mniejszego zużycia pamięci przy uruchamianiu i pamięci niż równoważny kontener Docker, bez niezależnych środków zaradczych cytowanych w tym artykule.
  • Wasmtime, Wasmer i WasmEdge nie kompilują się w ten sam sposób (Cranelift, Singlepass/Cranelift/LLVM do wyboru, własny kompilator AOT): ten wybór backendu wyjaśnia znaczną część luki pomiędzy opublikowanymi danymi, a nie tylko czas działania jako taki.
  • Aurabase wykorzystuje w produkcji Wasmtime do swoich funkcji brzegowych, zweryfikowanych w aura-functions/Cargo.toml, ale jak dotąd nie publikuje żadnych danych dotyczących zimnego startu zmierzonych we własnej infrastrukturze.
Uwaga dotycząca metody w źródłach

Źródła zewnętrzne cytowane poniżej można rozpoznać po tytule, autorze lub wydawcy oraz dacie publikacji. Badanie to opiera się na uznanych i szeroko udokumentowanych publikacjach w WebAssembly i ekosystemie bezserwerowym, a nie na bieżącym zapytaniu o ich strony w momencie pisania. Tam, gdzie nie można było potwierdzić dokładnej liczby z wystarczającą pewnością, w tym artykule posłużono się rządem wielkości, a nie dokładną wartością, i stwierdzono to wyraźnie.

#
Ramy

Dlaczego zimny start WASM zajmuje tak dużo miejsca w debacie bezserwerowej

Zimny ​​start odnosi się do dodatkowego opóźnienia wymaganego przez żądanie, gdy środowisko wykonawcze musi zostać zainicjowane przed uruchomieniem kodu aplikacji. W przypadku klasycznej funkcji brzegowej lub funkcji bezserwerowej nie jest to przypadek marginalny: platforma, która ogranicza liczbę wystąpień pomiędzy dwoma szczytami ruchu lub rozdziela swoje wykonanie na dziesiątki geograficznie rozproszonych węzłów brzegowych, płaci ten koszt trwale, a nie tylko przy pierwszym wdrożeniu.

Temat nabrał niemal symbolicznego znaczenia w ekosystemie WASM od czasu, gdy w marcu 2019 roku na Twitterze pojawiło się zdanie Solomona Hykesa, współzałożyciela Dockera: „Gdyby WASM+WASI istniało w 2008 roku, nie musielibyśmy tworzyć Dockera. Takie to ważne. WebAssembly na serwerze to przyszłość informatyki. » To opinia uznanego praktyka, a nie pomiar. Wyjaśnia, dlaczego temat fascynuje, nie zastępuje figury źródłowej.

Aurabase oferuje dwie ścieżki dla swoich funkcji brzegowych: edytor Studio, który uruchamia kod w środowisku wykonawczym Deno, jak udokumentowaliśmy w naszym przewodniku migracji Supabaseoraz aura functions deployCLI, którego celem jest osobna ścieżka dla funkcji napisanych w Rust i skompilowanych do WASM w Wasmtime. To właśnie tę drugą ścieżkę niniejszy artykuł rzuca światło na tę drugą ścieżkę, nie podając jej jednak danych na temat zimnego startu, które jeszcze nie istnieją.

#
Architektura

Dlaczego moduł WASM uruchamia się strukturalnie szybciej niż kontener

Różnica nie wynika z szybszego czasu działania w wartościach bezwzględnych: wynika z krótszego stosu kroków między zapytaniem a kodem aplikacji.

Uruchomienie kontenera mobilizuje jądro hosta: utworzenie nowego procesu, skonfigurowanie grup c i przestrzeni nazw, które go izolują, zamontowanie warstw obrazu, a następnie uruchomienie wewnątrz środowiska wykonawczego aplikacji (na przykład Node.js i jego silnik V8 mają koszt inicjalizacji). Każdy krok dodaje wywołania systemowe, a w przypadku obrazu nigdy nie widzianego lokalnie, pobieranie sieciowe jeszcze przed jego rozpoczęciem.

Moduł WebAssembly jest izolowany na poziomie języka maszyny wirtualnej, a nie na poziomie systemu operacyjnego. Utworzenie instancji modułu oznacza przydzielenie jego pamięci liniowej, powiązanie importów, a następnie przejście do punktu wejścia, a wszystko to w ramach już rozpoczętego procesu środowiska wykonawczego hosta. Żadnych nowych procesów, żadnych warstw obrazu, żadnych domyślnych montowań systemu plików.

Wybór trybu kompilacji dodaje dodatkową zmienną. Wasmtime kompiluje się do JIT poprzez backend Cranelift podczas ładowania modułu lub może go wcześniej skompilować za pomocą wasmtime compile, co powoduje utworzenie pliku .cwasm już przekształconego w natywny kod maszynowy. Wczesna kompilacja (AOT) usuwa etap kompilacji ze ścieżki krytycznej żądania: jest to dokładnie dźwignia, którą musi aktywować architektura brzegowa wrażliwa na zimny start.

Cargo.tomltoml
# Rzeczywisty ekstrakt z repozytorium Aurabase
# Środowisko wykonawcze WASM
wasmtime = { version = "43", features = ["async", "cranelift"] }

Jest to zależność produkcyjna, a nie programistyczna: potwierdza, że ​​Wasmtime faktycznie działa na ścieżce CLI funkcji brzegowych Aurabase. Nie potwierdza jednak żadnych danych dotyczących opóźnień, co pozostaje prawdą, dopóki nie zostanie opublikowany żaden datowany test porównawczy.

#
Dane opublikowane

Kontenery i microVM: najdokładniej określone ilościowo odniesienie

W tym obszarze najsilniejszym źródłem jest artykuł z badań branżowych, a nie wpis na blogu marketingowym. Firecracker, lekka technologia microVM opracowana przez AWS i wykorzystywana zwłaszcza w Lambda i Fargate, została zaprezentowana na konferencji USENIX NSDI 2020 przez Agache i in. w artykule „Firecracker: lekka wirtualizacja dla aplikacji bezserwerowych”.

W tym artykule udokumentowano czas rozruchu krótszy niż 125 ms i obciążenie pamięci mniejsze niż 5 MiB na mikroVM, z możliwością uruchomienia tysięcy mikroVM na tej samej maszynie fizycznej. To dane datowane (2020 r.) pochodzące z recenzowanej publikacji akademickiej i od tego czasu szeroko cytowane w literaturze na temat izolacji bezserwerowej.

Standardowy kontener Dockera jest na ogół dłuższy: od kilkuset milisekund do kilku sekund w zależności od rozmiaru obrazu, konieczności jego pobrania i czasu uruchamiania wbudowanej aplikacji. W przeciwieństwie do Firecrackera nie ma tu jednej powszechnie cytowanej liczby: wynik w zbyt dużym stopniu zależy od testowanego obrazu pod kątem jednej wartości, aby osiągnąć konsensus.

#
Dane opublikowane

WebAssembly: co Fastly, WasmEdge i dokument badań akademickich

Trzy źródła, trzy różne statusy: dostawca historyczny, projekt objęty nadzorem fundacji i artykuł badawczy.

Szybko uruchomiono Compute@Edge w 2019 r. na Lucet, własnym kompilatorze i środowisku wykonawczym WASM do wstępnej kompilacji. W momencie wprowadzenia na rynek firma udokumentowała czasy tworzenia WASM poniżej milisekundy, co stanowi rząd wielkości, który wywarł trwały wpływ na dyskurs dotyczący zimnego rozruchu WASM w branży. W 2021 roku firma Fastly zaprzestała autonomicznego rozwoju Lucet i przekierowała swoje wysiłki w stronę Wasmtime, którego zaplecze kompilacji Cranelift odziedziczyło część tych optymalizacji: jest to jeden z powodów, dla których Wasmtime pozostaje dziś punktem odniesienia dla tego typu ładunków.

WasmEdge, środowisko wykonawcze WASM zarządzane przez CNCF (pierwotnie SSVM, wspierane przez Second State), twierdzi w swojej oficjalnej dokumentacji znacznie mniejsze zużycie pamięci podczas uruchamiania i zajmowania pamięci niż równoważny kontener Docker, z wyraźnym pozycjonowaniem na obciążeniach brzegowych i IoT. Są to dane opublikowane przez samego wydawcę projektu i należy je czytać jako oświadczenie dotyczące produktu, a nie niezależny audyt.

Jeśli chodzi o badania akademickie, Faasm (Shillaker & Pietzuch, USENIX ATC 2020, również dostępny w wersji przed publikacją) buduje stanową platformę bezserwerową opartą na izolacji WebAssembly (za pośrednictwem WAVM, a nie Wasmtime) właśnie dlatego, że umożliwia ona utworzenie instancji funkcji przy znacznie niższym koszcie niż izolacja przez kontener lub maszynę wirtualną. Artykuł nie dotyczy konkretnie Wasmtime, ale zapewnia niezależną akademicką walidację argumentu strukturalnego przedstawionego w poprzedniej sekcji.

#
Czasy działania

Wasmtime vs Wasmer vs WasmEdge: dlaczego opublikowane liczby się nie zgadzają

Porównanie tych trzech środowisk wykonawczych tylko z nazwy ukrywa prawdziwą zmienną: wybrany backend kompilacji, który radykalnie zmienia równowagę pomiędzy szybkością uruchamiania a wydajnością wykonywania.

Czas WasCranelift (domyślnie JIT) + AOT poprzez kompilację wasmtimeBytecode Alliance · otwarte zarządzanie, używane przez Fastly, Shopify, Aurabase
WasmerSinglepass, Cranelift lub LLVM do wyboruSinglepass minimalizuje czas kompilacji; LLVM maksymalizuje wydajność wykonania
WasmEdgeKompilator AOT specyficzny dla projektuCNCF · pozycjonowana krawędź/IoT i natywna chmura

Singlepass, najszybszy backend kompilacji firmy Wasmer, istnieje właśnie dlatego, że jego zespół zidentyfikował zimny start jako odrębną oś wydajności wykonywania w stanie ustalonym: moduł skompilowany w Singlepass uruchamia się szybciej, ale działa wolniej podczas szczytowego obciążenia niż ten sam moduł skompilowany w LLVM. To przyjęty kompromis, a nie ukryta wada.

Dane opublikowane przez dostawcę środowiska wykonawczego nie stanowią niezależnego audytu

Wasmer opublikował własne porównania wydajności z Wasmtime, praktyką, która wywołała debaty w społeczności WASM na temat zastosowanej metodologii i porównywalności testowanych scenariuszy. To nie jest oskarżenie o złą wiarę: to przypomnienie strukturalne. Edytor wykonawczy ma żywotny interes w opublikowaniu zwycięskiego scenariusza, co sprawia, że ​​niezależna weryfikacja staje się jeszcze bardziej użyteczna przed podjęciem decyzji o wyborze architektury na podstawie pojedynczego numeru.

#
Streszczenie

Tabela porównawcza: co dokumentuje każde źródło, a czego nie dokumentuje

<125ms
BUTOWA petarda
Agache i wsp., NSDI 2020
3
PORÓWNANIE CZASU PRACY WASM
Wasmtime, Wasmer, WasmEdge
0
BENCHMARK AURABASE do zimnego startu
Wasmtime sprawdzony w produkcji, nie opublikowano żadnych pomiarów
Petarda (AWS)Uruchamianie < 125 ms, obciążenie < 5 MiB Recenzowany artykuł badawczyAgache i wsp., USENIX NSDI 2020
Lucet → Czas Wasm (szybko)Wystąpienie poniżej milisekundy (2019 r.) Dane dostawcy, nie reprodukowane tutajSzybko ogłaszamy Compute@Edge
WasmEdgeMniejsze uruchomienie i mniejsze zużycie pamięci w porównaniu z twierdzeniem dotyczącym produktu DockerPublisherOficjalna dokumentacja WasmEdge (CNCF)
Faasm (szukaj)Izolacja WASM jest znacznie tańsza w tworzeniu instancji niż kontener. Używa WAVM, a nie WasmtimeShillaker i Pietzuch, USENIX ATC 2020
Standardowy kontener DockerSetki ms do kilku sekund Brak jednej liczby konsensusowejSzeroko udokumentowane zachowanie

Tych pięć wierszy nie jest odczytywanych jako pojedyncza klasyfikacja: pochodzą one z różnych metodologii, dat i generacji środowiska wykonawczego. Aby uzyskać bardziej dogłębną metodologiczną krytykę wiarygodności tego typu testu porównawczego WASM, nasz artykuł na temat ograniczeń testów porównawczych WebAssembly idzie dalej niż obecne porównanie, które pozostaje skupione na tym, co konkretnie twierdzi każde źródło.

#
Praktyczne implikacje

Co ta luka naprawdę zmienia w przypadku wyboru architektury brzegowej

Korzyści z zimnego startu WASM dotyczą w największym stopniu obciążeń najbardziej wrażliwych na opóźnienie pierwszego żądania, a nie wszystkich obciążeń w równym stopniu.

Ma to szczególne znaczenie w przypadku bardzo nieregularnego ruchu brzegowego (serii, po których następują cisze), izolacji na żądanie, a nie na kontener współdzielony pomiędzy kilkoma żądaniami, oraz na infrastrukturze, która w rzeczywistości ogranicza się do zera wystąpień między dwoma szczytami, zamiast stale utrzymywać gorącą pulę. Przy stabilnym i przewidywalnym obciążeniu, gdzie instancje i tak pozostają gorące, przerwa w zimnym rozruchu strukturalnie ma mniejsze znaczenie.

WebAssembly utrzymuje również ograniczenia różniące się od zimnego startu: dostęp do systemu plików lub sieci odbywa się przez WASI, interfejs wciąż ewoluuje w zależności od środowisk wykonawczych i ich wersji, a moduł skompilowany tak, aby uruchamiał się szybko (na przykład Singlepass po stronie Wasmer) niekoniecznie jest najszybszy po ustanowieniu przy dużym obciążeniu. Wydajność zimnego startu i szczytowa wydajność to dwie odrębne osie, rzadko optymalne jednocześnie w tym samym profilu kompilacji.

Aby ocenić wybór architektury brzegowej na podstawie tego kryterium, Aurabase zadał trzy konkretne pytania dowolnemu dostawcy: jaki dokładnie czas wykonania jest używany, jakie zaplecze kompilacji (JIT czy AOT) oraz czy zaawansowane parametry zimnego startu zostały zmierzone przez niezależną stronę trzecią, czy tylko przez samego wydawcę środowiska wykonawczego.

#
Często zadawane pytania

Często zadawane pytania

Czy zimny start WebAssembly jest nadal szybszy niż kontener Docker?+
Jeśli chodzi o wielkość, źródła cytowane w tym artykule idą w tym kierunku: od mikrosekund do milisekund w przypadku utworzenia instancji modułu WASM w porównaniu z setkami milisekund do kilku sekund w przypadku klasycznego kontenera. Żadna z tych liczb nie pochodzi jednak z protokołu pomiarowego wspólnego dla obu rodzin technologii, w różnych terminach i w różnych wersjach. Należy traktować jako szeroko udokumentowany trend, a nie jako gwarancję numeryczną obowiązującą dla dowolnego obciążenia.
Dlaczego Wasmtime, Wasmer i WasmEdge ogłaszają różne numery startowe?+
Ponieważ nie kompilują się w ten sam sposób. Wasmtime używa Cranelift jako domyślnego backendu i oferuje wczesną kompilację (AOT) poprzez kompilację Wasmtime. Wasmer umożliwia wybór pomiędzy Singlepass (najszybsza kompilacja), Cranelift lub LLVM (najwyższa wydajność w czasie wykonywania, wolniejsza kompilacja). WasmEdge zawiera własny kompilator AOT, zaprojektowany dla rozwiązań brzegowych i IoT. Wybór backendu wyjaśnia znaczną część luki pomiędzy danymi opublikowanymi przez każdy projekt.
Co właściwie zmienia kompilacja AOT (z wyprzedzeniem) podczas zimnego startu?+
Kompilacja AOT usuwa krok kompilacji ze ścieżki krytycznej żądania: moduł WASM jest już przekształcany w kod maszynowy przed wywołaniem, pozostaje jedynie załadować go i utworzyć instancję. Taka jest zasada kompilacji wasmtime po stronie Wasmtime i własnego kompilatora WasmEdge. Kompilacja JIT pokrywa część tych kosztów przy każdej nowej zimnej instancji, chyba że środowisko wykonawcze buforuje wynik.
Czy Aurabase opublikowało benchmark zimnego startu dla swoich brzegowych funkcji WASM?+
Nie. Aurabase wykorzystuje Wasmtime w produkcji do ścieżki CLI swoich funkcji brzegowych, zależność zweryfikowana w aura-functions/Cargo.toml (wersja 43, funkcje asynchroniczne i dźwigowe), ale jak dotąd nie opublikowano żadnych danych dotyczących zimnego startu tej infrastruktury. Nasze zaangażowanie w zakresie metodologii w odniesieniu do wszelkich przyszłych wyników zostało szczegółowo opisane w naszym artykule dotyczącym metodologii porównawczej.
Jaka jest różnica między zimnym startem środowiska wykonawczego WASM a bezserwerową bazą danych Postgres?+
Są to dwie różne warstwy stosu. Opisany tutaj zimny start dotyczy środowiska wykonawczego kodu, samego środowiska wykonawczego WASM. Bezserwerowa baza danych Postgres dodaje własne opóźnienie uruchamiania, związane z pulą połączeń, podczas wznawiania zawieszonej instancji lub ustanawiania nowego szyfrowanego połączenia. Nasz artykuł na temat bezserwerowego zimnego startu Postgres dotyczy konkretnie tej drugiej warstwy.
Czy możemy ufać testom zimnego startu opublikowanym przez samych redaktorów wykonawczych WASM?+
Z ostrożnością. Rysunek opublikowany przez wydawcę środowiska wykonawczego opisuje jego własne warunki testowe, rzadko reprodukowane niezależnie, a społeczność WASM doświadczyła już publicznych sporów dotyczących metodologii porównań wydajności pomiędzy środowiskami wykonawczymi. Nasz artykuł poświęcony ograniczeniom testów porównawczych WebAssembly szczegółowo opisuje te kwestie metodologiczne.

Aby zapoznać się z warstwą bazy danych dotyczącą tego samego problemu, zobacz nasz artykuł na temat zimnego startu Postgres bezserwerowego.

GOTOWY DO WDROŻENIA?

Twój backend w pięć minut.

Karta kredytowa nie jest wymagana · 500 MB za darmo · 50 000 MAU