Мы рассматривали Spin в прошлом году в статье Spin Brings WebAssembly To The Cloud, где мы описали, что это такое на самом деле:
Spin предоставляет интерфейсы для написания модулей WebAssembly, которые могут делать такие вещи, как отвечать на HTTP-запросы. С помощью Spin вы уменьшаете накладные расходы микросервисов, отменяя веб-сервер (его заменяет WAGI-сервер) и записывая HTTP-обработчики на любом языке (Rust, C, JavaScript, Python и т. д.), которые затем компилируются в WebAssembly.
Время выполнения хоста обеспечит все необходимые функции, такие как файловая система (с высокой степенью песочницы), исходящий HTTP, хранение ключей/значений и т. д. Таким образом, мы можем сосредоточить наши микросервисы на обработке бизнес-логики, оставив базовой платформе управление всеми HTTP, SSL-сертификатами и так далее.
Итак, что же нового предлагает версия 3. 0?
Уникальность Spin заключается в том, что это мультиязычный фреймворк. В новой версии появилась первоклассная поддержка написания компонентов на любом из поддерживаемых языков, которые можно вызывать с любого из поддерживаемых языков. Например:
вы написали клиент AWS S3 на Rust и хотите использовать его в своем приложении Spin на Javascript.
теперь вы можете выразить компонент S3 как зависимость и использовать его функциональность в коде вашего приложения.
Благодаря этому свойству вы можете легко смешивать и сочетать компоненты в своем рабочем процессе. Кроме того, с помощью новой функции «Выборочное развертывание» вы можете разделить приложение по средам, но при этом распространять его как единое целое. Например, вы отправляете один и тот же двоичный файл, состоящий из фронт-энда, бэкэнда базы данных и сервиса искусственного интеллекта, в разные места, но вызываете только определенную часть в соответствующем месте:
Фронтальная часть, которая обрабатывает браузерные и API-запросы, должна работать в центрах обработки данных, расположенных вблизи пользователей.
Бэкэнд базы данных должен работать в одном центральном месте.
А сервис искусственного интеллекта, который требует загрузки модели LLM на оборудование
Несмотря на то, что Spin уже был модульным с модулями, называемыми «хост-компонентами», чтобы обеспечить низкое сопряжение, на практике
эта попытка не была столь успешной, поскольку детали реализации просачивались по всей кодовой базе. «Факторы Spin» - это более удачная попытка, в которой независимые наборы функций организованы в отдельные „факторы“, позволяющие реализациям во время выполнения выбирать те возможности, которые они хотят предоставить.
Новая версия также предлагает более глубокую интеграцию со стандартами WASI. Напомним, что WASI (WebAssembly System Interface) - это модульный системный интерфейс для WebAssembly (Wasm), который позволяет разработчикам запускать программы на Wasm на любой платформе, включая браузер, облако и периферию.
WASI разработан как безопасный, быстрый и портативный компонент, который позволяет разработчикам писать свои программы один раз и запускать их в любом месте.
В связи с этим Spin теперь официально поддерживает API WASI Key-Value и WASI Config. WASI key/value определяет набор интерфейсов для взаимодействия с хранилищами ключевых значений, а Config нацелен на предоставление набора общих интерфейсов для конфигурирования компонента.
Чтобы применить Spin на практике, вот код простого приложения с поддержкой LLM, написанного на Rust и работающего с Spin sdk:

Обратите внимание, что вы можете делать то же самое на других языках, таких как Python или Typescript, и/или соединять вместе другие компоненты, написанные на любых других поддерживаемых языках. Мультиязычное программирование на практике!
Если предложение показалось вам интересным, скачайте SDK и посмотрите множество примеров на множестве языков, найденных в репозитории Github.