PRODСуверенная европейская платформа BaaSОткрыть панель управления →

Инженерное дело · 8 минута чтения

Wasmtime против Wasmer для производства Edge Functions

Affane Daylami · Fondateur · 25 июня 2026 г.

Вернуться в блог

Wasmtime и Wasmer — две наиболее часто используемые среды выполнения WebAssembly для запуска кода вне браузера, на периферии или на стороне сервера. Aurabase приняла решение: собственный режим выполнения WASM ее Edge Functions включает Wasmtime, а не Wasmer, проверенный непосредственно в Cargo.toml соответствующего сервиса.

Этот текст на английском языке был создан автоматически на основе французского оригинала и еще не проверялся.
Эта страница была переведена автоматически. Английская версия является авторитетной.

Этот выбор не является предпочтением фасада. В этой статье сравниваются две среды выполнения с точки зрения того, что на самом деле проверяется: управление, компиляторы, стандарт WASI, модель безопасности, а затем подробно описывается реализация Wasmtime, которую Aurabase использует в рабочей среде, учет топлива, прерывание эпохи, ограничения памяти, без предоставления неизмеренных цифр холодного запуска.

Самое необходимое

  • Wasmtime: проект Bytecode Alliance, написанный на Rust, производственный компилятор Cranelift, лицензия Apache-2.0 с исключением LLVM.
  • Wasmer: среда выполнения, разработанная Wasmer Inc., три взаимозаменяемых компилятора (Singlepass, Cranelift, LLVM), лицензия MIT.
  • Aurabase объявляет wasmtime = { version = "43", features = ["async", "cranelift"] } как фактическую производственную зависимость в aura-functions, проверенную в Cargo.toml.
  • В собственном режиме WASM по умолчанию применяется ограничение памяти в 64 МБ, бюджет топлива в один миллиард единиц и тайм-аут в 10 секунд, все три регулируются переменной среды.
  • Этот режим WASM сосуществует с режимом по умолчанию для функций Aurabase Edge (среда выполнения Deno): это второй путь выполнения, а не путь по умолчанию.
#
Контекст

Две среды выполнения, одна и та же база WebAssembly

WebAssembly уже давно определил формат времени выполнения для браузера. В течение нескольких лет он также использовался для выполнения изолированного кода на стороне сервера или на периферии: байт-код, скомпилированный один раз, переносимый на любую хост-машину, изолированный по умолчанию без контейнера или полной виртуальной машины. Wasmtime и Wasmer выносят это расширение из браузера, оба написаны на Rust и оба способны выполнять один и тот же файл .wasm.

Wasmtime — это проект, организованный Bytecode Alliance, организацией, которая управляет несколькими компонентами серверной экосистемы WebAssembly, включая компилятор Cranelift. Wasmer разработан компанией Wasmer Inc., которая публикует среду выполнения с открытым исходным кодом и продвигает дополнительные услуги вокруг нее (периферийное развертывание, инструменты). Две разные модели управления, никакого суждения о качестве кода, созданного той или другой.

В оставшейся части этой статьи сравниваются четыре проверяемых поля: лицензирование и управление, доступные компиляторы, стандарт WASI и модель компонентов, модель безопасности, а затем объясняется, с помощью вспомогательного кода, почему Rust ядро ​​Aurabase запускает Wasmtime в своем движке Edge Functions.

#
Управление и лицензирование

Мультивендорный фонд против коммерческого издателя

Wasmtime выпускается под лицензией Apache-2.0 за исключением LLVM — разрешительной лицензии, распространенной в экосистеме компиляторов. Его управление соответствует модели Bytecode Alliance: в проект вносят свой вклад несколько организаций, ни одна из них не владеет им в одиночку.

Программа Wasmer публикуется под лицензией MIT, еще более либеральной на бумаге, но ее техническое руководство по-прежнему сосредоточено у одного издателя, Wasmer Inc. Само по себе это не является ошибкой: многие успешные проекты с открытым исходным кодом следуют этой модели. Это просто другой профиль риска, если ваша организация ценит распределенное управление между несколькими организациями.

#
Составители

Один бэкэнд против трех: Cranelift, Singlepass, LLVM

Wasmtime компилируется с помощью Cranelift, генератора кода, также разработанного Bytecode Alliance. В крейте также документирован дополнительный компилятор Winch, предназначенный для сокращения времени компиляции по сравнению с Cranelift в случаях, чувствительных к запуску. Cargo.toml изaura-функций только активирует функцию cranelift: именно этот компилятор и только он обрабатывает каждый модуль WASM, загруженный в производство.

Васмер идет противоположным путем: три взаимозаменяемых серверных модуля. Singlepass компилируется за один проход, почти мгновенно, за счет менее оптимизированного машинного кода. Cranelift предлагает сбалансированный компромисс. LLVM стремится к максимально возможной производительности выполнения и максимальному времени компиляции из трех. Единая среда выполнения, три профиля компрометации, выбранные во время настройки.

#
Стандарты

Предварительная версия WASI 2 и модель компонентов

WASI, системный интерфейс WebAssembly, стандартизирует доступ к файлам, часам и сети из модуля WASM независимо от браузера. Его последняя версия, WASI Preview 2, основана на модели компонентов: механизме создания модулей, написанных на разных языках, с общими типизированными интерфейсами, а не двоичным форматом, специфичным для каждой среды выполнения. И Wasmtime, и Wasmer работают над внедрением этого стандарта, каждый в своем темпе.

Васмер дополнительно документирует WASIX, расширение, целью которого является охват примитивов POSIX, которые еще не охватываются официальным стандартом WASI, таких как потоки или более сложные сетевые сокеты. Это не стандарт, поддерживаемый рабочей группой WebAssembly, а расширение, специфичное для экосистемы Wasmer.

Что не использует режим Aurabase WASM

Собственный режим wasm Aurabase, проверенный в wasm/mod.rs, в настоящее время не использует ни WASI Preview 2, ни модель компонентов. Это собственный минимальный ABI хоста, четыре функции, доступные гостевому модулю, а не полный стандарт. Cargo.toml также не активирует функцию wasi в ящике wasmtime.

#
Безопасность

Изоляция памяти и время: топливо, эпоха, ограничения

Обе среды выполнения изолируют каждый модуль в собственной линейной памяти без прямого доступа к хост-системе за пределами явно импортированных функций. Это основа модели безопасности WebAssembly, общей для обоих проектов.

Wasmtime также предоставляет собственный API для записи выполнения, fuel: каждая инструкция использует заранее фиксированный бюджет, и выполнение прекращается должным образом, как только этот бюджет исчерпан. Второй API, прерывание epoch, позволяет вам установить тайм-аут, не блокируя движок во время ожидания. Васмер документирует свою собственную механику измерения и ограничений памяти для каждого экземпляра; В этой статье они не проверялись в стороннем репозитории, поэтому не разбивают их по цифрам.

Это именно то, что обеспечивает сервис aura-functions Aurabase, подробно описанный в следующем разделе с фактическим исходным кодом.

#
Выбор Аурабазы

Wasmtime проверен в коде, а не заявленном предпочтении

Служба aura-functions объявляет wasmtime как производственную зависимость без комментариев по деактивации или конфигурации зависимости от разработки. Ни в одном файле в репозитории, ни в файле Cargo.toml, ни в файле .rs, Васмер не упоминается.

Cargo.tomltoml
# Среда выполнения WASM
wasmtime = { version = "43", features = ["async", "cranelift"] }

Код инициализации явно активирует подачу топлива и прерывание по эпохам, а затем ограничивает память вызовом с помощью StoreLimits:

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

// по вызову:
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);

Все три ограничения настраиваются для каждой переменной среды, при этом значения по умолчанию проверяются в config/mod.rs: WASM_MAX_MEMORY_MB — 64, WASM_TIMEOUT_SECS — 10, WASM_MAX_FUEL — один миллиард единиц. Тайм-аут запускается в фоновом режиме: tokio::spawn ожидает настроенную продолжительность, затем увеличивает эпоху механизма, не блокируя текущее выполнение во время ожидания.

ABI, предоставляемый гостевым модулям, намеренно остается минимальным: четыре функции хоста: aura.log, aura.get_input, aura.set_output и aura.get_env, зарегистрированные через linker.func_wrap. Это не модель компонентов и не WASI Preview 2: это внутренний контракт, более узкий, предназначенный для одноразового использования, выполняющий пограничную функцию HTTP и восстанавливающий ответ JSON.

Этот режим wasm представляет собой выбор для каждой функции, а не глобальный переключатель. Обзор архитектуры Aurabase подробно описывает другой путь, режим denoпо умолчанию, который выполняет JavaScript/TypeScript в отдельной службе. Оба сосуществуют в одной службе aura-functions.

Проверено и цель продукта

Здесь проверяется фактическая реализация Wasmtime и ее ограничения ресурсов по умолчанию. Цифры холодного запуска не указаны: см. наш специальный анализ холодного запуска WebAssembly, чтобы узнать, что можно измерить, а что еще нет.

#
Обзор

Васмтайм и Васмер бок о бок

УправлениеBytecode Alliance, мультиорганизацияWasmer Inc., коммерческое издательство
ЛицензияApache-2.0 с исключением LLVMМассачусетский технологический институт
Язык реализацииРжавчинаРжавчина
СоставителиCranelift (лебедка опционально, не активирована на Aurabase)Одноходовой, Cranelift, LLVM по вашему выбору
стандарт ВАСИПредварительная версия WASI 2 + модель компонентаWASI Preview 2 + WASIX (расширение, специфичное для Wasmer)
Беговые кадрыТопливо + прерывание по эпохе (проверенный собственный API)Механизмы, специфичные для Васмера, здесь не проверены.
Используется AurabaseДа, аура-функции, закреплена версия 43Нет, никакой зависимости, прямой или транзитивной

Источники: Cargo.toml и wasm/mod.rs из репозитория Aurabase, проверено непосредственно 24 августа 2026 г. Общие характеристики Wasmtime и Wasmer взяты из общедоступной документации каждого проекта; в этой таблице не публикуются контрольные показатели третьих сторон.

#
Решение

Кому что следует выбрать

Вы запускаете новую среду выполнения Edge без существующих зависимостей. Wasmtime, поддерживаемый мультивендорным фондом, снижает риск зависимости будущего проекта от одного издателя.

У вас очень частые и кратковременные холодные запуски. Серверная часть Singlepass компании Wasmer напрямую отвечает на эту потребность, обеспечивая почти мгновенную компиляцию за счет менее оптимизированного машинного кода.

Вам нужны примитивы POSIX, выходящие за рамки текущего стандарта WASI. WASIX, расширение Wasmer, охватывает потоки и расширенные сокеты, которые еще не охватываются только WASI Preview 2.

Вам нужен собственный API для видеозаписи и тайм-аута без стороннего промежуточного программного обеспечения. Wasmtime предоставляет fuel и epoch непосредственно в ящике, что именно позволяет aura-functions в Aurabase.

#
Часто задаваемые вопросы

Часто задаваемые вопросы

Wasmtime быстрее, чем Wasmer?+
Никакие сравнительные показатели производительности здесь не приводятся добровольно. Две среды выполнения используют разные компиляторы (Cranelift для Wasmtime; выбор Singlepass, Cranelift или LLVM для Wasmer), которые реагируют на различные компромиссы между скоростью компиляции и скоростью выполнения. См. наш специальный анализ холодного запуска WebAssembly для зашифрованной и исходной обработки.
Можем ли мы использовать Wasmtime и Wasmer в одном проекте?+
Технически да, поскольку оба используют один и тот же формат .wasm. Но это удваивает площадь интеграции, два хостовых API, две модели конфигурации, а чистой выгоды для большинства команд нет. Aurabase поставляет только один экземпляр, подтвержденный в Cargo.toml сервиса aura-functions.
Все ли функции Aurabase Edge работают в Wasmtime?+
Нет. В режиме Aurabase Edge Functions по умолчанию JavaScript/TypeScript выполняется через отдельный сервис Deno. Режим Wasm, основанный на Wasmtime, представляет собой второй путь выполнения, выбираемый для каждой функции, а не путь по умолчанию.
Что на самом деле обеспечивает компонентная модель WebAssembly?+
Модель компонентов стандартизирует состав модулей WASM, написанных на разных языках, с общими типизированными интерфейсами, независимо от двоичного формата, специфичного для среды выполнения. Родной режим WASM Aurabase сегодня не использует его: это самодельный минимальный ABI хоста, а не модель компонентов.

ГОТОВЫ К РАЗВЕРТЫВАНИЮ?

Ваш бэкэнд за пять минут.

Кредитная карта не требуется · 500 МБ бесплатно · 50 000 MAU