Wasm как универсальный рантайм

Смотрим на Wasm как на универсальную среду исполнения, а не только веб-технологию.

Универсальный рантайм — это роль Wasm как безопасного, портируемого формата для плагинов, serverless и контейнеров.

Плагины без риска

Любому приложению с плагинами нужна изоляция: плагин не должен уронить хост или украсть данные. Раньше это решали скриптовыми языками или процессами. Wasm подходит лучше: плагин компилируется в .wasm из любого языка, исполняется в песочнице с чётко заданными импортами, и хост точно знает, что плагин может, а что нет. Так делают, например, прокси Envoy, базы данных и редакторы.

Serverless и холодный старт

В serverless функция запускается по запросу и должна стартовать мгновенно. Контейнеры стартуют сотни миллисекунд (а то и секунды). Wasm-модуль инстанцируется за микросекунды — компилировать можно заранее, а создать экземпляр почти бесплатно. Сравним порядки времени старта наглядно:

const coldStart = { container_ms: 300, wasm_ms: 0.05 };
const ratio = Math.round(coldStart.container_ms / coldStart.wasm_ms);
console.log("контейнер:", coldStart.container_ms, "мс");
console.log("wasm:", coldStart.wasm_ms, "мс");
console.log("wasm быстрее примерно в", ratio, "раз");

Вывод:

контейнер: 300 мс
wasm: 0.05 мс
wasm быстрее примерно в 6000 раз

Числа условные, но порядок реален: для функций, которые вызывают редко и хотят холодный старт почти без задержки, Wasm — отличный фундамент.

Конкурент контейнерам

Контейнеры (Docker) дали переносимость, но они тяжелы: образ включает целую ОС-подобную среду. Wasm-модуль — это один маленький артефакт без ОС внутри, с изоляцией из коробки. Поэтому Wasm рассматривают как лёгкую альтернативу контейнерам для микросервисов и edge.

СвойствоКонтейнерWasm-модуль
Размердесятки-сотни МБдесятки КБ — единицы МБ
Холодный стартсотни мсмикро/миллисекунды
Изоляциячерез ядро ОСвстроенная песочница
Переносимостьна той же архитектурелюбая ОС/архитектура

Как работает под капотом

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

Частые ошибки

  • Считать Wasm полной заменой контейнерам — он не запускает любой существующий софт; это для нового кода под Wasm/WASI.
  • Игнорировать зрелость — экосистема serverless-Wasm молодая, не всё ещё стабильно.
  • Думать, что плагин может всё — наоборот, его возможности строго ограничены импортами хоста.

Итоги

  • Wasm — безопасный формат плагинов с точным контрактом возможностей.
  • Микросекундный холодный старт делает его идеальным для serverless.
  • Лёгкая альтернатива контейнерам: меньше размер, встроенная изоляция, переносимость.
  • Скорость старта — от разделяемого скомпилированного кода и дешёвых экземпляров.
Проверьте себя
1. Почему Wasm привлекателен для serverless?
AОн не требует кода
BХолодный старт в микро/миллисекунды против сотен мс у контейнеров
CОн бесплатен
DОн работает только локально
2. В чём преимущество Wasm-модуля перед контейнером?
AОн включает целую ОС
BМеньше размер, встроенная изоляция и переносимость между архитектурами
CОн быстрее компилируется в Docker
DОн не нуждается в памяти
3. За счёт чего достигается дешёвый старт множества экземпляров Wasm?
AЭкземпляры не используют память
BКод компилируется один раз и кэшируется, а экземпляры лишь получают свою память
CКаждый экземпляр перекомпилируется
DWasm не создаёт экземпляров