PRODSuwerenna europejska platforma BaaSOtwórz Panel →

Inżynieria · 8 min odczytu

Wasmtime vs Wasmer dla produkcji Edge Functions

Affane Daylami · Fondateur · 25 czerwca 2026

Powrót do bloga

Wasmtime i Wasmer to dwa najczęściej używane środowiska wykonawcze zestawu WebAssembly do uruchamiania kodu poza przeglądarką, na krawędzi lub po stronie serwera. Aurabase zdecydował: natywny tryb wykonywania WASM funkcji brzegowych osadza Wasmtime, a nie Wasmer, zweryfikowany bezpośrednio w Cargo.toml danej usługi.

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.

Ten wybór nie jest preferencją fasady. W tym artykule porównano dwa środowiska wykonawcze pod kątem tego, co jest faktycznie weryfikowane, zarządzania, kompilatorów, standardu WASI, modelu bezpieczeństwa, a następnie szczegółowo opisano implementację Wasmtime, którą Aurabase uruchamia w środowisku produkcyjnym, pomiary paliwa, przerwy w epokach, limity pamięci, bez podawania niezmierzonych wartości zimnego startu.

Najważniejsze

  • Wasmtime: Projekt Bytecode Alliance, napisany w języku Rust, kompilator produkcyjny Cranelift, licencja Apache-2.0 z wyjątkiem LLVM.
  • Wasmer: środowisko wykonawcze opracowane przez Wasmer Inc., trzy wymienne kompilatory (Singlepass, Cranelift, LLVM), licencja MIT.
  • Aurabase deklaruje wasmtime = { version = "43", features = ["async", "cranelift"] } jako rzeczywistą zależność produkcyjną w aura-functions, zweryfikowaną w Cargo.toml.
  • Natywny tryb WASM domyślnie stosuje limit pamięci wynoszący 64 MB, budżet paliwa wynoszący miliard jednostek i limit czasu wynoszący 10 sekund, przy czym wszystkie trzy parametry można regulować za pomocą zmiennej środowiskowej.
  • Ten tryb WASM współistnieje z domyślnym trybem Aurabase Edge Functions (środowisko wykonawcze Deno): jest to druga ścieżka wykonania, a nie ścieżka domyślna.
#
Kontekst

Dwa środowiska wykonawcze, ta sama baza WebAssembly

WebAssembly od dawna wyznacza format środowiska wykonawczego przeglądarki. Od kilku lat jest również używany do wykonywania kodu w trybie sandbox po stronie serwera lub na brzegu: kod bajtowy skompilowany raz, przenośny na dowolnym komputerze hosta, domyślnie izolowany bez kontenera lub kompletnej maszyny wirtualnej. Wasmtime i Wasmer przenoszą to rozszerzenie z przeglądarki, oba są napisane w języku Rust i oba mogą wykonywać ten sam plik .wasm.

Wasmtime to projekt prowadzony przez Bytecode Alliance, organizację zarządzającą kilkoma komponentami ekosystemu serwerów WebAssembly, w tym kompilatorem Cranelift. Wasmer został opracowany przez Wasmer Inc., firmę, która publikuje środowisko uruchomieniowe jako oprogramowanie typu open source, jednocześnie promując powiązane z nim usługi uzupełniające (wdrażanie brzegowe, oprzyrządowanie). Dwa różne modele zarządzania, brak oceny jakości kodu stworzonego przez jeden lub drugi.

Pozostała część tego artykułu porównuje cztery weryfikowalne obszary, licencjonowanie i zarządzanie, dostępne kompilatory, standard WASI i model komponentów, model bezpieczeństwa, a następnie wyjaśnia, wraz z kodem pomocniczym, dlaczego rdzeń Rust Aurabase uruchamia Wasmtime w jego silniku Edge Functions.

#
Zarządzanie i licencjonowanie

Fundacja obejmująca wielu dostawców a wydawca komercyjny

Wasmtime jest wydawany na licencji Apache-2.0 z wyjątkiem LLVM, licencji permisywnej powszechnej w ekosystemie kompilatora. Zarządzanie opiera się na modelu Bytecode Alliance: kilka organizacji uczestniczy w projekcie, ale żadna nie jest jego właścicielem samodzielnie.

Wasmer jest wydawany na licencji MIT, jeszcze bardziej liberalnej na papierze, ale kierownictwo techniczne pozostaje skupione wokół jednego wydawcy, Wasmer Inc. Nie jest to wadą samą w sobie: wiele udanych projektów open source opiera się na tym modelu. To po prostu inny profil ryzyka, jeśli Twoja organizacja ceni rozproszone zarządzanie pomiędzy wieloma podmiotami.

#
Kompilatory

Jeden backend kontra trzy: Cranelift, Singlepass, LLVM

Wasmtime kompiluje się w środowisku produkcyjnym za pośrednictwem Cranelift, generatora kodu, również należącego do Bytecode Alliance. Skrzynka dokumentuje również dodatkowy kompilator Winch, zaprojektowany w celu skrócenia czasu kompilacji w porównaniu do Cranelift w przypadkach wrażliwych na uruchamianie. Cargo.toml funkcji aury aktywuje tylko funkcję cranelift: to ten kompilator i tylko on przetwarza każdy moduł WASM załadowany w środowisku produkcyjnym.

Wasmer podąża odwrotną ścieżką: trzy wymienne backendy. Singlepass kompiluje się w jednym przebiegu, niemal natychmiast, kosztem mniej zoptymalizowanego kodu maszynowego. Cranelift oferuje zrównoważony kompromis. LLVM dąży do uzyskania najlepszej możliwej przepustowości wykonania i najdłuższego czasu kompilacji ze wszystkich trzech. Pojedyncze środowisko wykonawcze, trzy profile kompromisów wybrane podczas konfiguracji.

#
Standardy

WASI Preview 2 i model komponentów

WASI, interfejs systemu WebAssembly, standaryzuje dostęp do plików, zegarów i sieci z modułu WASM, niezależnie od przeglądarki. Jego najnowsza wersja, WASI Preview 2, opiera się na modelu komponentów: mechanizmie tworzenia modułów napisanych w różnych językach, ze wspólnymi interfejsami typowania, a nie formatem binarnym specyficznym dla każdego środowiska wykonawczego. Zarówno Wasmtime, jak i Wasmer pracują nad wdrożeniem tego standardu, każdy w swoim własnym tempie.

Wasmer dodatkowo dokumentuje WASIX, rozszerzenie, którego celem jest pokrycie prymitywów POSIX, których oficjalny standard WASI jeszcze nie obejmuje, takich jak wątki lub bardziej wszechstronne gniazda sieciowe. Nie jest to standard wspierany przez grupę roboczą WebAssembly, ale rozszerzenie specyficzne dla ekosystemu Wasmer.

Czego nie używa tryb Aurabase WASM

Natywny tryb wasm Aurabase, zweryfikowany w wasm/mod.rs, obecnie nie korzysta ani z WASI Preview 2, ani z modelu komponentów. Jest to własny, minimalny ABI hosta, z czterema funkcjami udostępnionymi modułowi gościa, a nie pełny standard. Cargo.toml nie aktywuje również funkcji wasi w skrzyni wasmtime.

#
Bezpieczeństwo

Izolacja pamięci i synchronizacja: paliwo, epoka, ograniczenia

Obydwa środowiska wykonawcze izolują każdy moduł we własnej pamięci liniowej, bez bezpośredniego dostępu do systemu hosta poza jawnie zaimportowanymi funkcjami. Na tym opiera się model bezpieczeństwa WebAssembly, wspólny dla obu projektów.

Wasmtime udostępnia także natywny interfejs API nagrań z wykonania, fuel: każda instrukcja zużywa ustalony z góry budżet, a wykonanie zatrzymuje się prawidłowo po wyczerpaniu tego budżetu. Drugie API, przerwanie epoch, umożliwia nałożenie limitu czasu bez blokowania silnika podczas oczekiwania. Wasmer dokumentuje własną mechanikę pomiaru i limitów pamięci na instancje; W tym artykule nie zweryfikowano ich w repozytorium strony trzeciej, więc nie opisano ich szczegółowo.

To jest dokładnie to, co umożliwia usługa aura-functions firmy Aurabase, co opisano szczegółowo w następnej sekcji z rzeczywistym kodem źródłowym.

#
Wybór Aurabase

Wasmtime sprawdził kod, a nie zadeklarowaną preferencję

Usługa aura-functions deklaruje wasmtime jako zależność produkcyjną, bez komentarzy dezaktywacyjnych ani konfiguracji zależności deweloperskiej. Żaden plik w repozytorium, ani plik Cargo.toml, ani .rsnie wspomina o Wasmerze.

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

Kod inicjujący jawnie aktywuje paliwo i przerwanie według epoki, a następnie ogranicza pamięć poprzez wywołanie za pomocą StoreLimits:

wasm/mod.rsrust
let mut cfg = Config::new();
cfg.consume_fuel(true);
cfg.epoch_interruption(true);
let engine = Engine::new(&cfg)?;

// przez wywołanie:
let limits = StoreLimitsBuilder::new()
    .memory_size(self.max_memory_mb as usize * 1024 * 1024)
    .build();
store.set_fuel(self.max_fuel)?;
store.epoch_deadline_async_yield_and_update(1);

Wszystkie trzy limity można konfigurować dla każdej zmiennej środowiskowej, przy czym wartości domyślne są zaznaczone w config/mod.rs: WASM_MAX_MEMORY_MB przy 64, WASM_TIMEOUT_SECS przy 10, WASM_MAX_FUEL przy miliardzie jednostek. Limit czasu jest wyzwalany w tle: tokio::spawn czeka przez skonfigurowany czas, a następnie zwiększa epokę silnika, bez blokowania bieżącego wykonania podczas oczekiwania.

ABI udostępniane modułom gościa pozostaje celowo minimalne: cztery funkcje hosta, aura.log, aura.get_input, aura.set_output i aura.get_env, zarejestrowane za pośrednictwem linker.func_wrap. Nie jest to Model Komponentowy ani WASI Preview 2: jest to kontrakt wewnętrzny, węższy, przeznaczony do jednorazowego użytku, wykonujący funkcję brzegową HTTP i odzyskujący odpowiedź JSON.

Ten tryb wasm jest wyborem dla danej funkcji, a nie globalnym przełącznikiem. Omówienie architektury Aurabase zawiera szczegółowe informacje na temat drugiej ścieżki, domyślnego trybu deno, który wykonuje JavaScript/TypeScript w oddzielnej usłudze. Obydwa współistnieją w tej samej usłudze aura-functions.

Zweryfikowany a cel produktu

Sprawdzana jest tutaj rzeczywista implementacja Wasmtime i jej domyślne limity zasobów. Nie podano żadnych danych dotyczących zimnego startu: zobacz naszą dedykowaną analizę zimnego startu zestawu WebAssembly, aby dowiedzieć się, co jest mierzalne, a co jeszcze nie jest.

#
Przegląd

Wasmtime i Wasmer, obok siebie

ZarządzanieBytecode Alliance, wiele organizacjiWasmer Inc., wydawca komercyjny
LicencjaApache-2.0 z wyjątkiem LLVMMIT
Język implementacjiRdzaRdza
KompilatoryCranelift (wciągarka opcjonalna, nieaktywowana w Aurabase)Singlepass, Cranelift, LLVM do wyboru
Standard WASIWASI Preview 2 + Model komponentowyWASI Preview 2 + WASIX (rozszerzenie specyficzne dla Wasmer)
Nagranie z bieganiaPaliwo + przerwanie według epoki (zweryfikowane natywne API)Mechanizmy specyficzne dla Wasmera, tutaj nie zweryfikowane
Używany przez AurabaseTak, funkcje aury, wersja 43 przypiętaNie, żadnej zależności, bezpośredniej lub przechodniej

Źródła: Cargo.toml i wasm/mod.rs z repozytorium Aurabase, zweryfikowane bezpośrednio 24 sierpnia 2026. Ogólna charakterystyka Wasmtime i Wasmer zaczerpnięta z publicznej dokumentacji każdego projektu; w tej tabeli nie publikowano ponownie żadnych danych porównawczych stron trzecich.

#
Decyzja

Kto powinien wybrać co

Uruchamiasz nowe środowisko wykonawcze brzegowe, bez istniejących zależności. Wasmtime, wspierany przez fundację składającą się z wielu dostawców, zmniejsza ryzyko uzależnienia przyszłości projektu od jednego wydawcy.

Masz bardzo częste i krótkotrwałe zimne starty. Backend Singlepass firmy Wasmer bezpośrednio odpowiada na tę potrzebę, zapewniając niemal natychmiastową kompilację, kosztem mniej zoptymalizowanego kodu maszynowego.

Potrzebujesz prymitywów POSIX wykraczających poza bieżący standard WASI. WASIX, rozszerzenie Wasmer, obejmuje wątki i rozszerzone gniazda, których sam WASI Preview 2 jeszcze nie obejmuje.

Potrzebujesz natywnego API do nagrywania filmów i limitów czasu, bez oprogramowania pośredniczącego innych firm. Wasmtime wystawia fuel i epoch bezpośrednio w skrzyni, dokładnie to, co umożliwia aura-functions w Aurabase.

#
Często zadawane pytania

Często zadawane pytania

Czy Wasmtime jest szybszy niż Wasmer?+
Żadne dane porównawcze nie są tu podawane dobrowolnie. Obydwa środowiska wykonawcze udostępniają różne kompilatory (Cranelift w przypadku Wasmtime; do wyboru Singlepass, Cranelift lub LLVM w przypadku Wasmer), które reagują na różne kompromisy między szybkością kompilacji a szybkością wykonywania. Zobacz naszą dedykowaną analizę zimnego startu zestawu WebAssembly dla szyfrowanego i źródłowego przetwarzania.
Czy możemy używać Wasmtime i Wasmer w tym samym projekcie?+
Technicznie tak, ponieważ oba korzystają z tego samego formatu .wasm. Ale to podwaja powierzchnię integracji, dwa interfejsy API hosta, dwa modele konfiguracji, a dla większości zespołów nie ma żadnych korzyści netto. Aurabase wysyła tylko jeden, zweryfikowany w Cargo.toml usługi aura-functions.
Czy wszystkie funkcje Aurabase Edge działają na Wasmtime?+
Nie. Domyślny tryb Aurabase Edge Functions uruchamia JavaScript/TypeScript poprzez oddzielną usługę Deno. Tryb Wasm, obsługiwany przez Wasmtime, to druga ścieżka wykonania, wybierana na podstawie funkcji po funkcji, a nie ścieżka domyślna.
Co tak naprawdę zapewnia model komponentów WebAssembly?+
Model komponentów standaryzuje skład modułów WASM napisanych w różnych językach, ze wspólnymi interfejsami typu, bez zależności od formatu binarnego specyficznego dla środowiska wykonawczego. Natywny tryb WASM Aurabase nie używa go dzisiaj: jest to domowej roboty minimalny ABI hosta, a nie model komponentowy.

GOTOWY DO WDROŻENIA?

Twój backend w pięć minut.

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