Платформа

Платформа WasmBox — бессерверные компоненты на wasmCloud и реестр WebAssembly-компонентов. Эта глава описывает технологическое устройство обеих частей.

Компоненты на wasmCloud

Компонент — единица платформы. Код с ясным контрактом определяет, какие возможности нужны от среды исполнения: HTTP, GraphQL, боты и вебхуки.

Поток «От запроса до результата»:

  • HTTP-запрос — событие или вызов API.
  • Компонент — ваш код и интерфейсы WASI.
  • wasmCloud — исполнение и ответ.

Среда связывает компонент с нужными возможностями. Код обрабатывает запрос и возвращает ответ.

Вызов API и событие неразличимы для компонента: оба приходят объявленным интерфейсом, чаще всего wasi:http/handler. Различие лежит за пределами компонента — в том, кто инициировал вызов: пользователь ли нажал кнопку, бот ли прислал сообщение, планировщик ли запустил задачу.

Среды исполнения

wasmCloud исполняет компоненты в облаке, на собственной инфраструктуре и на устройствах.

  • Облако и узлы доступа. Дата-центр — облачная инфраструктура. Региональные узлы — размещение в нескольких регионах. Узлы доступа — исполнение рядом с источником запросов.
  • Своя инфраструктура. Собственные серверы — совместимая среда под вашим управлением.
  • Устройства и клиент. Устройства — локальная среда исполнения. IoT-узлы — исполнение при ограниченных ресурсах. Браузер — встроенный Wasm и адаптеры WASI.

Выбирайте среду с поддержкой нужных интерфейсов WASI. Инфраструктура WasmBox: Yandex Serverless Containers, Cloud Functions и wasmCloud.

Реестр компонентов

Реестр компонентов хранит версии, которые не теряются.

Опубликованный компонент становится артефактом OCI-реестра — того же формата, в котором хранятся контейнерные образы. Push отправляет артефакт в реестр, pull забирает его оттуда. Чтобы запустить компонент, среде wasmCloud достаточно ссылки на артефакт.

Публикация

Собранный файл .wasm уходит в реестр одной командой push. Публикация ничего не исполняет — реестр хранит артефакт и отдаёт его по запросу.

Версии

Тег указывает на версию: свежую для разработки или закреплённую для эксплуатации. Digest идентифицирует содержимое и не меняется — одни и те же байты дают один и тот же digest. Тег можно перезаписать, digest — нет, поэтому версию для эксплуатации фиксируют по digest.

Жизненный цикл версии следует из этих правил. Разработка идёт по свежему тегу: каждая сборка перезаписывает его, и среда всегда берёт последнюю. Эксплуатация закрепляется по digest: байты не поменяются, даже если тег уйдёт на новую сборку. Переход — это смена digest в конфигурации среды, откат — возврат к прежнему.

Совместимость

Компоненты лежат в реестре рядом с контейнерными образами и читаются стандартными клиентами OCI. Среда wasmCloud запускает их прямо из реестра — без отдельного хранилища и конвертации формата.

Реестр не обязан быть специальным. Годится любой OCI-совместимый реестр, поддерживающий артефакты: компонент — не контейнерный образ, но хранится по тем же правилам OCI.

Команды реестра

Публикация и загрузка — команды wash oci. Push принимает ссылку на артефакт (реестр, имя, тег) и путь к файлу .wasm:

wash oci push registry.example/hello-world:0.1.0 ./target/wasm32-wasip2/release/hello_world.wasm

Pull принимает ссылку и записывает артефакт в файл component.wasm:

wash oci pull registry.example/hello-world:0.1.0

Для аутентификации используются учётные данные Docker. Войдите в реестр командой docker login: wash подхватит учётные данные сам.

Тег помогает выбрать версию, digest идентифицирует содержимое.

GraphQL API

GraphQL — язык запросов к данным: один вызов, объявленная схема, читаемые поля. В стеке платформы у GraphQL два применения.

Первое — интерфейс самого компонента. Компонент экспортирует схему и отвечает на GraphQL-запросы так же, как на HTTP-запросы: это ещё один способ описать контракт.

Второе — интерфейс управления. Среда и реестр описывают своё состояние как схему: инвентарь компонентов, версии, статусы исполнения. Запрос читает состояние, мутация изменяет его.

Что дальше

  • «WebAssembly и WASI» — контракт WIT и разрешения компонента.
  • «Kubernetes» — среда исполнения в кластере.
  • «Цены» — из чего складывается стоимость.