Платформа
Платформа 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» — среда исполнения в кластере.
- «Цены» — из чего складывается стоимость.