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

Производительность · 11 минута чтения

WASM против холодного запуска контейнера: что говорят среды выполнения

Affane Daylami · Fondateur · 24 мая 2026 г.

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

Модуль WebAssembly создается за микросекунды или миллисекунды в зависимости от опубликованных источников. Типичный Docker-контейнер обычно запускается через несколько сотен миллисекунд, иногда несколько секунд. МикроVM Firecracker находится между ними: менее 125 мс при запуске, согласно исследовательской работе AWS, которая представила ее в 2020 году. Эти три семейства показателей не имеют ни одной и той же методологии, ни одной даты, ни одного и того же протокола измерений: их нельзя объединить в одну классификацию.

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

В этой статье собраны все, что публикуют идентифицируемые сторонние источники о холодном запуске WebAssembly по сравнению с контейнерами: документ, представленный на USENIX NSDI, официальная документация от Fastly, WasmEdge и Wasmer, а также академический исследовательский проект по бессерверной изоляции. Фигурки Aurabase не включены. Наши пограничные функции хорошо работают на Wasmtime, что проверено в репозитории, но на сегодняшний день не опубликовано ни одного теста холодного запуска, специфичного для нашей инфраструктуры, о чем подробно рассказывается ниже. Общий метод сравнительного анализа, применяемый в других разделах этого блога, можно найти в нашей основной статье о методологии сравнительного анализа.

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

  • В документе AWS Firecracker (Agache et al., USENIX NSDI 2020) документируется время запуска microVM менее 125 мс и затраты памяти менее 5 МБ: наиболее точная количественная ссылка в этой статье.
  • Быстро задокументированное время создания экземпляра WASM ниже миллисекунды для среды выполнения AOT Lucet (оптимизации которой затем были объединены с Wasmtime) в 2019 году. Это цифра, опубликованная поставщиком, которая никогда не воспроизводилась независимо в источниках, к которым обращаются здесь.
  • WasmEdge, проект под управлением CNCF, в своей официальной документации утверждает, что его запуск и потребление памяти значительно меньше, чем у эквивалентного контейнера Docker, без независимых контрмер, упомянутых в этой статье.
  • Wasmtime, Wasmer и WasmEdge компилируются по-разному (Cranelift, Singlepass/Cranelift/LLVM на ваш выбор, собственный компилятор AOT): этот выбор бэкэнда объясняет значительную часть разрыва между их опубликованными показателями, а не только время выполнения как таковое.
  • Aurabase использует Wasmtime в производстве для своих пограничных функций, проверенных в aura-functions/Cargo.toml, но на сегодняшний день не публикует никаких показателей холодного запуска, измеренных в ее собственной инфраструктуре.
Методическое примечание к источникам

Сторонние источники, указанные ниже, можно идентифицировать по их названию, автору или издателю и дате публикации. Это исследование основано на признанных и широко документированных публикациях в WebAssembly и бессерверной экосистеме, а не на живом запросе их страниц на момент написания. Если точную цифру невозможно подтвердить с достаточной уверенностью, в этой статье используется порядок величины, а не точное значение, и это прямо указывается.

#
Обрамление

Почему холодный запуск WASM занимает так много места в дебатах о бессерверных системах

Холодный старт означает дополнительную задержку, оплачиваемую запросом, когда среда выполнения должна инициализироваться перед запуском кода приложения. Для классической периферийной или бессерверной функции это далеко не маргинальный случай: платформа, которая снижает количество экземпляров до нуля между двумя пиками трафика или распределяет выполнение по десяткам географически разбросанных периферийных узлов, платит эти затраты постоянно, а не только при первом развертывании.

Эта тема приобрела почти символическое значение в экосистеме WASM после того, как Соломон Хайкс, соучредитель Docker, опубликовал в Твиттере в марте 2019 года предложение: "Если бы WASM+WASI существовало в 2008 году, нам не нужно было бы создавать Docker. Вот насколько это важно. WebAssembly на сервере — это будущее вычислений". Это мнение признанного практика, а не измерение. Оно объясняет, почему эта тема завораживает, но не заменяет исходную фигурку.

Aurabase предлагает два пути для своих пограничных функций: редактор Studio, который запускает код в среде выполнения Deno, как описано в нашем руководстве по миграции Supabase, и CLI aura functions deploy, который предназначен для отдельного пути для функций, написанных на Rust и скомпилированных в WASM на Wasmtime. Именно на этот второй путь и проливает свет данная статья, не приводя при этом цифру холодного старта, которой пока не существует.

#
Архитектура

Почему модуль WASM структурно запускается быстрее, чем контейнер

Разница заключается не в более быстром времени выполнения в абсолютном выражении, а в более коротком стеке шагов между запросом и кодом приложения.

Запуск контейнера мобилизует ядро ​​хоста: создание нового процесса, настройка контрольных групп и пространств имен, которые изолируют его, монтирование слоев образа, а затем запуск среды выполнения приложения внутри (например, Node.js и его движок V8 сами требуют затрат на инициализацию). На каждом этапе добавляются системные вызовы и, для изображения, которое никогда не просматривалось локально, загрузка по сети еще до ее начала.

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

Выбор режима компиляции добавляет дополнительную переменную. Wasmtime компилирует в JIT через свой бэкэнд Cranelift при загрузке модуля или может предварительно скомпилировать его с помощью wasmtime compile, который создает файл .cwasm, уже преобразованный в собственный машинный код. Ранняя компиляция (AOT) удаляет этап компиляции из критического пути запроса: это именно тот рычаг, который должна активировать пограничная архитектура, чувствительная к холодному старту.

Cargo.tomltoml
# Актуальная выдержка из репозитория Aurabase.
# Среда выполнения WASM
wasmtime = { version = "43", features = ["async", "cranelift"] }

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

#
Цифры опубликованы

Контейнеры и microVM: наиболее точная количественная оценка

В этой области самым сильным источником является отраслевое исследование, а не сообщение в маркетинговом блоге. Firecracker, облегченная технология microVM, разработанная AWS и используемая, в частности, для Lambda и Fargate, была представлена ​​на конференции USENIX NSDI 2020 Agache et al. в статье «Firecracker: облегченная виртуализация для бессерверных приложений».

В этом документе документировано время загрузки менее 125 мс и затраты памяти менее 5 МБ на микроВМ с возможностью запуска тысяч микроВМ на одной физической машине. Это датированная цифра (2020 г.), полученная из рецензируемой академической публикации и с тех пор широко цитируемая в литературе по бессерверной изоляции.

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

#
Цифры опубликованы

WebAssembly: что такое Fastly, WasmEdge и документ научных исследований

Три источника, три разных статуса: исторический поставщик, проект под управлением фонда и исследовательская работа.

В 2019 году быстро запустил Compute@Edge на Lucet, собственном компиляторе и среде выполнения WASM для предварительной компиляции. При этом запуске компания зафиксировала время создания экземпляра WASM менее миллисекунды, что оказало длительное влияние на дискуссию о холодном запуске WASM в отрасли. В 2021 году Fastly прекратила автономную разработку Lucet и перенаправила свои усилия на Wasmtime, чей бэкэнд компиляции Cranelift унаследовал часть этих оптимизаций: это одна из причин, почему Wasmtime сегодня остается эталоном для этого типа нагрузки.

WasmEdge, среда выполнения WASM под управлением CNCF (первоначально SSVM, поддерживаемая Second State), заявляет в своей официальной документации о значительно меньшем объеме запуска и занимаемой памяти, чем эквивалентный контейнер Docker, с явным позиционированием на периферии и нагрузками IoT. Это цифра, опубликованная самим издателем проекта, и ее следует читать как таковую: претензию к продукту, а не независимый аудит.

Что касается академических исследований, Faasm (Shillaker & Pietzuch, USENIX ATC 2020, также доступен в предварительной публикации) создает бессерверную платформу с отслеживанием состояния, опирающуюся на изоляцию WebAssembly (через WAVM, а не Wasmtime) именно потому, что она позволяет создавать экземпляры функций с гораздо меньшими затратами, чем изоляция с помощью контейнера или виртуальной машины. В статье не говорится конкретно о Wasmtime, но она обеспечивает независимое академическое подтверждение структурных аргументов, изложенных в предыдущем разделе.

#
Время выполнения

Wasmtime vs Wasmer vs WasmEdge: почему опубликованные цифры не совпадают

Сравнение этих трех сред выполнения только по названию скрывает реальную переменную: выбранный бэкэнд компиляции, который радикально меняет баланс между скоростью запуска и производительностью выполнения.

ВасмтаймCranelift (по умолчанию JIT) + AOT через компиляцию wasmtimeBytecode Alliance · открытое управление, используется Fastly, Shopify, Aurabase
ВасмерSinglepass, Cranelift или LLVM по вашему выборуSinglepass минимизирует время компиляции; LLVM максимизирует производительность выполнения
ВасмЭджКомпилятор AOT для конкретного проектаCNCF · позиционирование на периферии/Интернете вещей и в облаке

Singlepass, самый быстрый бэкэнд компиляции Wasmer, существует именно потому, что его команда определила холодный запуск как отдельную ось производительности стабильного выполнения: модуль, скомпилированный в Singlepass, запускается быстрее, но работает медленнее во время пиковой нагрузки, чем тот же модуль, скомпилированный в LLVM. Это принятый компромисс, а не скрытый недостаток.

Показатель, опубликованный поставщиком среды выполнения, не является независимым аудитом.

Компания Wasmer опубликовала собственное сравнение производительности с Wasmtime — практикой, которая вызвала в сообществе WASM дебаты по поводу используемой методологии и сопоставимости протестированных сценариев. Это не обвинение в недобросовестности: это структурное напоминание. Редактор среды выполнения лично заинтересован в публикации сценария, в котором он выигрывает, что делает независимую проверку еще более полезной перед принятием решения о выборе архитектуры на основе одного числа.

#
Краткое содержание

Сравнительная таблица: что документирует каждый источник, а что не документирует

<125 мс
ЗАГРУЗКА ФЕДЕРАТ
Агаче и др., NSDI 2020
3
СРАВНЕНИЕ ВРЕМЕНИ РАБОТЫ WASM
Васмтайм, Васмер, ВасмЭдж
0
ЭТАЛОН ХОЛОДНОГО ПУСКА AURABASE
Wasmtime проверен в производстве, измерения не опубликованы
Фейерверк (AWS)Запуск < 125 мс, служебные данные < 5 МБ Рецензируемая исследовательская статьяАгаче и др., USENIX NSDI 2020.
Lucet → Wasmtime (Быстро)Реализация менее миллисекунды (2019 г.) Данные поставщика, здесь не воспроизводятся.Анонсируем Compute@Edge, быстро
ВасмЭджМеньший объем памяти при запуске и меньшее потребление памяти по сравнению с заявленным продуктом DockerPublisherОфициальная документация WasmEdge (CNCF)
Фаасм (поиск)Изоляцию WASM значительно дешевле создать, чем контейнер. Использует WAVM, а не Wasmtime.Шиллакер и Пицуч, USENIX ATC 2020
Стандартный Docker-контейнерОт сотен мс до нескольких секунд Нет единого консенсусного числаШироко документированное поведение

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

#
Практические последствия

Что на самом деле меняет этот разрыв при выборе периферийной архитектуры

Преимущество холодного запуска WASM больше всего зависит от нагрузок, наиболее чувствительных к задержке первого запроса, а не на всех нагрузках в равной степени.

Это особенно влияет на очень нерегулярный пограничный трафик (всплески, сопровождаемые молчанием), изоляцию для каждого запроса, а не для каждого контейнера, совместно используемого несколькими запросами, а также для инфраструктуры, которая фактически сводит количество экземпляров к нулю между двумя пиками вместо того, чтобы постоянно поддерживать горячий пул. При стабильной и предсказуемой нагрузке, когда экземпляры все равно остаются горячими, структурный разрыв при холодном запуске имеет меньшее значение.

WebAssembly также поддерживает ограничения, отличные от холодного запуска: доступ к файловой системе или сети осуществляется через WASI, интерфейс все еще развивается в зависимости от сред выполнения и их версий, а модуль, скомпилированный для быстрого запуска (например, Singlepass на стороне Wasmer), не обязательно является самым быстрым после установки под большой нагрузкой. Холодный старт и пиковая производительность остаются двумя разными осями, которые редко оптимальны одновременно в одном профиле компиляции.

Чтобы оценить выбор периферийной архитектуры по этому критерию, Aurabase включила три конкретных вопроса, которые следует задать любому поставщику: какая именно среда выполнения используется, какой бэкэнд компиляции (JIT или AOT) и измеряется ли показатель расширенного холодного запуска независимой третьей стороной или только самим издателем среды выполнения.

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

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

Холодный запуск WebAssembly по-прежнему быстрее, чем контейнер Docker?+
По порядку величины источники, цитируемые в этой статье, идут в этом направлении: от микросекунд до миллисекунд для создания экземпляра модуля WASM по сравнению с от сотен миллисекунд до нескольких секунд для классического контейнера. Но ни одна из этих цифр не взята из протокола измерений, общего для двух семейств технологий, в разные даты и в разных версиях. Следует рассматривать как широко документированную тенденцию, а не как числовую гарантию, действительную для любой нагрузки.
Почему Wasmtime, Wasmer и WasmEdge объявляют разные стартовые номера?+
Потому что они не компилируются одинаково. Wasmtime использует Cranelift в качестве бэкэнда по умолчанию и предлагает раннюю сборку (AOT) через компиляцию wasmtime. Wasmer позволяет вам выбирать между Singlepass (самая быстрая компиляция), Cranelift или LLVM (самая высокая производительность во время выполнения, более медленная компиляция). WasmEdge включает собственный компилятор AOT, предназначенный для периферийных устройств и Интернета вещей. Выбор бэкэнда во многом объясняет разрыв между цифрами, публикуемыми каждым проектом.
Что на самом деле меняет AOT-компиляция при холодном запуске?+
AOT-компиляция удаляет этап компиляции из критического пути запроса: модуль WASM уже преобразуется в машинный код перед вызовом, остается только загрузить и создать его экземпляр. Это принцип компиляции Wasmtime со стороны Wasmtime и собственного компилятора WasmEdge. JIT-компиляция оплачивает часть этой стоимости с каждым новым холодным экземпляром, если только среда выполнения не кэширует результат.
Выпустила ли Aurabase тест холодного запуска для своих периферийных функций WASM?+
Нет. Aurabase использует Wasmtime в производстве для пути CLI своих пограничных функций, зависимость проверена в aura-functions/Cargo.toml (версия 43, функции асинхронности и кранового подъема), но на сегодняшний день не опубликовано никаких показателей холодного запуска, измеренных в этой инфраструктуре. Наша методологическая приверженность любым будущим показателям производительности подробно описана в нашей статье о методологии сравнительного анализа.
В чем разница между холодным запуском среды выполнения WASM и бессерверной базой данных Postgres?+
Это два разных уровня стека. Описанный здесь холодный запуск касается среды выполнения кода, самой среды выполнения WASM. Бессерверная база данных Postgres добавляет собственную задержку при запуске, связанную с пулом соединений, при возобновлении приостановленного экземпляра или установке нового зашифрованного соединения. Наша статья о холодном запуске бессерверного Postgres специально посвящена этому второму уровню.
Можем ли мы доверять тестам холодного запуска, опубликованным самими редакторами среды выполнения WASM?+
С осторожностью. Рисунок, опубликованный издателем среды выполнения, описывает собственные условия тестирования, редко воспроизводимые независимо, и сообщество WASM уже сталкивалось с публичными разногласиями по поводу методологии сравнения производительности между средами выполнения. Наша статья, посвященная ограничениям тестов WebAssembly, более подробно описывает эти методологические проблемы.

Информацию об этой же проблеме на уровне базы данных см. в нашей статье о холодном запуске бессерверного Postgres.

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

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

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