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

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

Rust/WASM Edge Functions против Cloudflare и Vercel Edge

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

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

Cloudflare Workers и Vercel Edge Functions запускают ваш код в изолированных средах V8 — облегченном контексте JavaScript, а не в контейнере или виртуальной машине. Aurabase предлагает второй путь, проверенный в ее коде: режим Wasm, который напрямую выполняет Rust, скомпилированный в WebAssembly, изначально в сервисе aura-functions, через среду выполнения Wasmtime.

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

Однако режимом Aurabase по умолчанию остается Deno (также и изоляты V8), как описано в Rust coreAurabase. «Пограничные функции в Rust» охватывают три разные реальности в зависимости от платформы: SDK сообщества на стороне Cloudflare, отсутствие официального маршрута на стороне Vercel, собственный режим выполнения с собственным CLI на стороне Aurabase. Это сравнение детализирует три архитектуры, не смешивая то, что проверено, и то, что остается целью платформы.

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

  • Aurabase предлагает две среды выполнения Edge Functions: deno (изолированные версии V8, выделенный сервис, режим по умолчанию) и wasm (скомпилированный Rust, запускается через Wasmtime).
  • Cloudflare Workers работает на изолированных версиях V8 и может дополнительно запускать WebAssembly, в частности, через SDK сообщества workers-rs. Это не специализированная среда выполнения Rust, такая как режим wasm в Aurabase.
  • Vercel Edge Functions использует Edge Runtime, подмножество Node.js API на изолированной версии V8: нет официального SDK или CLI для написания самой функции на Rust.
  • Режим wasm Aurabase изолирует каждое выполнение с помощью бюджета ЦП Wasmtime, ограничения выделенной памяти и тайм-аута на эпоху, но в настоящее время не предоставляет гостевому модулю исходящий сетевой доступ.
  • Три разные архитектуры для одной цели: быстро начать и изолировать каждое выполнение без затрат на полный контейнер.
#
Контекст

Изолирующие устройства V8 и модули WASM: две механики песочницы

Изолят V8 — это облегченный контекст выполнения JavaScript внутри того же движка V8: никаких новых системных процессов и нового ядра для запуска. Это механизм, который Cloudflare впервые опубликовал для Workers и который Vercel повторно использует в своей Edge Runtime. Цель одна и та же с обеих сторон: избежать затрат на контейнер или виртуальную машину для каждого запроса.

Модуль WebAssembly удовлетворяет ту же потребность посредством другого механизма. Байт-код WASM выполняется в ограниченной линейной памяти, определенной самой спецификацией. Гостевой модуль не может обращаться за пределами этой области, независимо от исходного языка (Rust, C, Go…), на котором создан двоичный файл. Именно эту модель Wasmtime применяет в режиме wasm Aurabase, подробно описанном ниже. Измерения запуска между двумя механиками см. в нашем файле в тестах холодного запуска WebAssembly.

#
Среда выполнения WASM

Какой режим Aurabase Wasm работает в рабочей среде

Каждая функция Aurabase содержит поле runtime, значение которого равно "wasm" или "deno". Механизм вызова соответственно выбирает путь выполнения:

runtime/dispatch.rsrust
// Отправка в зависимости от времени выполнения: WASM (wasmtime) или Deno (изолирует V8 через Edge-Runtime)
let resp = if func.runtime == "wasm" {
    state.runtime.invoke(&wasm_bytes, &func.code_hash, req).await?
} else {
    // Прокси для среды выполнения aura-edge — изоляты V8 (supabase/edge-runtime, MIT)
    proxy_to_edge_runtime(&state.config.edge_runtime_url, …).await?
};

Песочница опирается на три механизма Wasmtime. Бюджет ЦП учитывается в «топливе»: его потребляет каждая инструкция WASM. Тайм-аут применяется с шагом в эпоху: выделенный поток увеличивает часы Wasmtime после настроенной задержки, что прерывает текущее выполнение. Ограничение памяти, установленное через StoreLimits. Три терминала настраиваются при создании экземпляра механизма:

runtime/wasm.rsrust
let mut cfg = Config::new();
cfg.consume_fuel(true);
cfg.epoch_interruption(true);

// Память ограничена StoreLimits, начальное топливо = max_fuel,
// timeout = приращение эпохи после timeout_secs (выделенный поток)

Скомпилированный модуль кэшируется code_hash: один и тот же развернутый двоичный файл не перекомпилируется при каждом вызове. Тем не менее, каждый вызов создает новый экземпляр Store и экземпляр. Никакое состояние не перетекает от одного вызова к другому. Площадь поверхности, доступная для гостевого модуля, намеренно остается минимальной, всего пять хост-функций: aura.log, aura.get_input, aura.set_output, aura.get_env и заглушка env.abort для совместимости с AssemblyScript. В настоящее время никакие функции хоста не раскрывают исходящие сетевые вызовы.

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

Режим wasm теперь подходит для чистых вычислений: проверки, преобразования данных, оценки, анализа. Функция, которая должна вызывать сторонний API (платеж, электронная почта, внешний сервис), по-прежнему должна проходить через режим deno. Это режим по умолчанию для Aurabase и рекомендуемый режим для миграции существующего кода Deno.

На стороне развертывания CLI компилирует ваш крейт локально перед отправкой: aura functions new формирует крейт cdylib, aura functions deploy компилирует его, а затем отправляет.

terminalbash
# Формирование: создает aurabase/functions/<name>/ (Cargo.toml crate-type = cdylib)
aura functions new my-fn

# Cargo build --target wasm32-unknown-unknown --release, затем загрузить
# POST /v1/functions/:project_id { время выполнения: "wasm", код: <wasm в base64> }
aura functions deploy my-fn
#
Облачное сияние

Cloudflare Workers: изолирует V8, дополнительно используя WebAssembly.

Работники Cloudflare изначально запускают JavaScript и TypeScript в изолятах V8, распределенных по глобальной сети Cloudflare. WebAssembly был первоклассным гражданином с самого начала платформы: модуль .wasm можно импортировать непосредственно в Worker, как и любой другой модуль.

Чтобы полностью написать Worker на Rust, чаще всего используется SDK сообщества workers-rs, который компилирует код в wasm32-unknown-unknown и выполняет его во время выполнения Workers. Разница с режимом wasm Aurabase заключается в доступной площади поверхности. Worker, написанный на Rust с помощью этого SDK, работает в полной среде Workers и, следовательно, может вызывать fetch или другие привязки платформы. Режим wasm Aurabase начинается с намеренно уменьшенной площади хоста (предыдущий раздел).

#
Версель

Функции Vercel Edge: подмножество Node.js, официального пути Rust нет.

Edge Runtime от Vercel также запускает код в изолированных версиях V8 с подмножеством стандартных веб-API (fetch, Request/Response, crypto.subtle…), а не в полной среде Node.js. Нативным модулям Node и произвольным инструментам компиляции там не место.

Объект WebAssembly является частью этого подмножества: ничто не мешает вам загрузить двоичный файл .wasm и создать его экземпляр вручную с помощью функции JavaScript или TypeScript. Но, насколько нам известно, Vercel не публикует какой-либо официальный SDK или CLI для непосредственного написания Edge-функции на Rust, в отличие от workers-rs на стороне Cloudflare или aura functions deploy на стороне Aurabase. Этот путь остается возможным, но полностью вручную, без специальных инструментов.

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

Песочница: линейная память WASM и изоляция V8

Изолят V8 разделяет код, выполняемый выделенной кучей, и его собственный контекст в одном и том же процессе механизма. Это проверенный механизм, работающий в масштабе миллионов запросов в секунду в Cloudflare и Vercel, но он остается механизмом программной изоляции в рамках одного движка JavaScript.

Модель WASM изолирует по-другому: каждый экземпляр получает свою собственную линейную память, непрерывный буфер, доступ за пределы которого невозможен из-за конструкции самого двоичного формата, независимо от механизма, который его выполняет. В среде выполнения Aurabase каждая хост-функция, которая манипулирует указателем, предоставленным гостевым модулем (aura.log, aura.get_env…), явно перепроверяет границы перед любым доступом к памяти. Это дополнительная глубокая защита от вредоносного или ошибочного модуля.

#
Обзор

Три архитектуры бок о бок

Аурабаза (васм)Рабочие CloudflareФункции Vercel Edge
Модель исполненияСобственный модуль WASM, WasmtimeИзолируйте V8 + WASM как дополнительный модуль.Изолировать V8, подмножество Node.js
Ржавчина на переднем планеДа, выделенный режим + CLIЧерез SDK сообщества (workers-rs)Нет, официального маршрута нет.
Доступ к сети на выходе из модуляНет, проверено в коде (нет функции сетевого хоста)Да, через полную рабочую средуДа, стандартный API получения
Бюджет процессораВремя подачи топлива, настраиваетсяОграничение времени ЦП на запрос (документ Cloudflare)Ограничение продолжительности вызова (док. Версель)
Выделенное развертывание Rustразвертывание функций ауры (локальная сборка грузов)спорщик + рабочие-rsНет официального эквивалентного инструмента

Спецификации среды выполнения Aurabase. Столбцы Cloudflare и Vercel описаны на основе документированной общедоступной архитектуры каждой платформы (изолирует V8, WebAssembly в качестве цели сборки).

#
Решение

Какую среду выполнения выбрать в соответствии с вашей функцией

Чистый расчет, без сетевых вызовов: проверка схемы, преобразование данных, оценка, упрощенное создание изображений. Режим wasm Aurabase подходит напрямую, со строгой песочницей памяти, явным бюджетом ЦП и без зависимости от внешнего сервиса.

Функция, вызывающая сторонний API (платеж, электронная почта, исходящий вебхук). Режим deno Aurabase сегодня остается выбором по умолчанию, точно так же, как классический Cloudflare Worker или функция Vercel Edge изначально полагаются на fetch.

Команда уже инвестировала в экосистему Cloudflare (KV, Durable Objects, R2). Оставаться на Workers имеет смысл; workers-rs позволяет внедрять Rust постепенно, не меняя платформы.

Нужна встроенная среда выполнения Rust, управляемая от начала до конца, с выделенным интерфейсом командной строки и тем же языком, что и остальная часть серверной части. Это точка зрения, которую документирует в нашем сравнении Wasmtime и Wasmerпо выбору самого движка WebAssembly.

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

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

Можете ли вы написать функции Aurabase Edge на Rust?+
Да, через режим Wasm. CLI будет иметь новые функции для крейта Rust (cdylib типа крейта). Команда развертывания функций aura компилирует его локально с помощью Cargo build --target wasm32-unknown-unknown --release, а затем отправляет двоичный файл в службу aura-functions, которая запускает его вместе со средой выполнения Wasmtime. Это не режим по умолчанию: по умолчанию функция Aurabase Edge выполняется в JavaScript/TypeScript (среда выполнения Deno, изоляты V8).
Действительно ли Cloudflare Workers позволяет писать функции на Rust?+
Да, но косвенно: Cloudflare Workers изначально выполняет JavaScript/TypeScript в изолированных версиях V8. SDK сообщества Worker-rs позволяет скомпилировать весь Worker на Rust в WebAssembly, но это не самый официально документированный путь. WASM дополняет там Worker, а не полностью заменяет модель JS.
Поддерживают ли Vercel Edge Functions WebAssembly или Rust изначально?+
Среда выполнения Vercel Edge предоставляет стандартные веб-API, включая объект WebAssembly, поэтому модуль .wasm можно загрузить и создать экземпляр вручную из функции JavaScript/TypeScript. Но, насколько нам известно, Vercel не публикует какой-либо официальный SDK или CLI для написания Edge-функции непосредственно в Rust, в отличие от Worker-rs на стороне Cloudflare или функций aura, развертываемых на стороне Aurabase.
Может ли режим Aurabase Wasm вызывать сторонний API (платеж, электронная почта и т. д.)?+
Не сегодня: функции хоста, доступные гостевому модулю WASM, — это ведение журнала, чтение входного запроса и запись выходного ответа, а также чтение переменных среды. Для функции, которой необходимо вызвать внешний API (выборка по сети), рекомендуемым путем является среда выполнения Deno (по умолчанию).

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

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

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