Как вы, вероятно, уже знаете, WebAssembly, или wasm, — это эффективный, кросс-платформенный и кросс-языковой способ запуска кода практически в любом месте, в том числе в браузере и на сервере — даже в базе данных. Cosmonic — это коммерческая платформа как услуга (PaaS) для модулей wasm. Он основан на wasmCloud с открытым исходным кодом. Эта предварительная версия технологии начинается с краткого обзора wasm, затем мы настроим wasmCloud и Cosmonic и посмотрим, что мы можем с ними сделать.
Что такое васм?
WebAssembly (wasm) — это «двоичный формат инструкций для виртуальной машины на основе стека». Это переносимая цель компиляции для языков программирования, включая C, C++, C#, Rust, Go, Java, PHP, Ruby, Swift, Python, Kotlin, Haskell и Lua; Rust часто является предпочтительным языком для wasm. Существует три языка, специфичных для wasm: AssemblyScript, Grain и Motoko. Целями Wasm являются браузеры (в настоящее время Chrome, Firefox, Safari и Edge), Node.js, Deno, Wasmtime, Wasmer и wasm2c.
Wasm пытается работать на исходной скорости в небольшом объеме памяти. Он работает в безопасной для памяти изолированной среде выполнения даже в Интернете.
Системный интерфейс WebAssembly (WASI) — это модульный системный интерфейс для WebAssembly. У Wasm есть компонентная модель со спецификацией, предложенной W3C. WebAssembly Gateway Interface (Wagi) — это предлагаемая реализация CGI для wasm и WASI. Spin — это многоязычный фреймворк для wasm-приложений.
Что такое wasmCloud?
wasmCloud — это принадлежащая CNCF программная платформа с открытым исходным кодом, которая использует wasm и NATS для создания распределенных приложений, состоящих из переносимых единиц бизнес-логики WebAssembly, называемых актеры. wasmCloud поддерживает TinyGo и Rust для разработки акторов. Он также поддерживает строительство платформы, которые являются поставщиками возможностей. wasmCloud включает в себя решетка, самоформирующаяся, самовосстанавливающаяся ячеистая сеть, использующая NATS, которая обеспечивает унифицированную, плоскую топологию. wasmCloud работает практически везде: в облаке, на периферии, в браузере, на небольших устройствах и так далее. Среда выполнения хоста wasmCloud использует Elixir/OTP и Rust.
Многие коммиттеры и сопровождающие wasmCloud работают на Cosmonic (компанию). Кроме того, wasmCloud wash
облачная оболочка работает с Cosmonic (продукт).
Что такое Космоник?
Cosmonic — это и компания, и продукт. Продукт представляет собой платформу WebAssembly как услугу (PaaS), основанную на wasmCloud и использующую участников wasm. Cosmonic предлагает графический облачный пользовательский интерфейс для разработки приложений и собственную оболочку, cosmo
что дополняет wash
и графический интерфейс wasmCloud. Предположительно, все, что вы создаете и работает в обычном wasmCloud, должно автоматически работать в Cosmonic.
А хозяин — это распределенный процесс времени выполнения wasmCloud, который управляет субъектами и поставщиками возможностей. Ан актер — это модуль WebAssembly, который может обрабатывать сообщения и вызывать функции поставщиков возможностей. А способность является абстракцией или представлением некоторых функций, требуемых вашим приложением, которые не считаются частью основной бизнес-логики. А поставщик возможностей является реализацией представления, описанного контрактом возможностей. Для каждой возможности может быть несколько поставщиков с разными характеристиками.
А связь — это определяемое во время выполнения соединение между субъектом и поставщиком возможностей. Ссылки могут быть изменены без необходимости повторного развертывания или повторной компиляции.
А созвездие представляет собой управляемое изолированное сетевое пространство, которое позволяет вашим участникам и поставщикам безопасно общаться друг с другом независимо от физического или логического местоположения; по сути, решетка wasmCloud, управляемая Cosmonic. А супер созвездие представляет собой более крупное созвездие, образованное путем надежного соединения нескольких сред через Cosmonic.
А червоточина является точкой входа в ваше созвездие. Ан Распределение ОСИ — это стандарт хранения, извлечения и распространения артефактов, реализуемый (например) Реестром контейнеров Azure и реестром артефактов GitHub.
вид на инфраструктуру показывает виртуальные хосты, работающие в вашем космическом созвездии. логическое представление показывает логические отношения между компонентами в вашем Космоническом созвездии или суперсозвездии.
Установка и тестирование wasmCloud
Установка wasmCloud зависит от вашей системы. я использовал brew
на моем M1 MacBook Pro; он установил больше, чем я хотел, из-за зависимостей, в частности, компилятора Rust и диспетчера грузовых пакетов, которые я предпочитаю устанавливать с веб-сайта языка Rust, используя rustup
. К счастью, простой brew uninstall rust
расчистил путь для стандарта rustup
монтаж. Пока я устанавливал языки, я также установил TinyGo, другой язык, поддерживаемый для разработки акторов wasmCloud.
После установки я спросил wash
shell, чтобы рассказать мне о его возможностях:
martinheller@Martins-M1-MBP ~ % wash --help
_________________________________________________________________________________
_____ _ _ _____ _ _ _
/ ____| | | | / ____| | | | |
__ ____ _ ___ _ __ ___ | | | | ___ _ _ __| | | (___ | |__ ___| | |
\ \ /\ / / _` / __| '_ ` _ \| | | |/ _ \| | | |/ _` | \___ \| '_ \ / _ \ | |
\ V V / (_| \__ \ | | | | | |____| | (_) | |_| | (_| | ____) | | | | __/ | |
\_/\_/ \__,_|___/_| |_| |_|\_____|_|\___/ \__,_|\__,_| |_____/|_| |_|\___|_|_|
_________________________________________________________________________________
A single CLI to handle all of your wasmCloud tooling needs
Usage: wash [OPTIONS] <COMMAND>
Commands:
app Manage declarative applications and deployments (wadm) (experimental)
build Build (and sign) a wasmCloud actor, provider, or interface
call Invoke a wasmCloud actor
claims Generate and manage JWTs for wasmCloud actors
ctl Interact with a wasmCloud control interface
ctx Manage wasmCloud host configuration contexts
down Tear down a wasmCloud environment launched with wash up
drain Manage contents of local wasmCloud caches
gen Generate code from smithy IDL files
keys Utilities for generating and managing keys
lint Perform lint checks on smithy models
new Create a new project from template
par Create, inspect, and modify capability provider archive files
reg Interact with OCI compliant registries
up Bootstrap a wasmCloud environment
validate Perform validation checks on smithy models
help Print this message or the help of the given subcommand(s)
Options:
-o, --output <OUTPUT> Specify output format (text or json) [default: text]
-h, --help Print help information
-V, --version Print version information
Затем я убедился, что могу вызвать wasmCloud:
martinheller@Martins-M1-MBP ~ % wash up
🏃 Running in interactive mode, your host is running at http://localhost:4000
🚪 Press `CTRL+c` at any time to exit
17:00:20.343 [info] Wrote configuration file host_config.json
17:00:20.344 [info] Wrote configuration file /Users/martinheller/.wash/host_config.json
17:00:20.344 [info] Connecting to control interface NATS without authentication
17:00:20.344 [info] Connecting to lattice rpc NATS without authentication
17:00:20.346 [info] Host NCZVXJWZAKMJVVBLGHTPEOVZFV4AW5VOKXMD7GWZ5OSF5YF2ECRZGXXH (gray-dawn-8348) started.
17:00:20.346 [info] Host issuer public key: CCXQKGKOAAVXUQ7MT2TQ57J4DBH67RURBKT6KEZVOHHZYPJKU6EOC3VZ
17:00:20.346 [info] Valid cluster signers: CCXQKGKOAAVXUQ7MT2TQ57J4DBH67RURBKT6KEZVOHHZYPJKU6EOC3VZ
17:00:20.351 [info] Started wasmCloud OTP Host Runtime
17:00:20.356 [info] Running WasmcloudHostWeb.Endpoint with cowboy 2.9.0 at 0.0.0.0:4000 (http)
17:00:20.357 [info] Access WasmcloudHostWeb.Endpoint at http://localhost:4000
17:00:20.453 [info] Lattice cache stream created or verified as existing (0 consumers).
17:00:20.453 [info] Attempting to create ephemeral consumer (cache loader)
17:00:20.455 [info] Created ephemeral consumer for lattice cache loader
Пока у меня был запущен wasmCloud, я просматривал веб-сайт через порт 4000 на своей локальной машине:
Рисунок 1. Локальная панель управления wasmCloud на порту 4000 после запуска wash up
. Здесь нет актеров, провайдеров или ссылок.
Затем я остановил wasmCloud:
martinheller@Martins-M1-MBP ~ % wash down
✅ wasmCloud host stopped successfully
✅ NATS server stopped successfully
🛁 wash down completed successfully