Sealos 云操作系统一键集成 runwasi,解锁 Wasm 的无限潜力

news2024/11/17 23:51:40

WebAssembly (通常缩写为 Wasm) 是一种为网络浏览器设计的低级编程语言。它旨在提供一种比传统的 JavaScript 更快、更高效的方式来执行代码,以弥补 JavaScript 在性能方面的不足。通过使用二进制格式,WebAssembly 能够提供比传统 JavaScript 更快的解析和执行速度。

原文链接:https://forum.laf.run/d/1095

Wasm 扩展到云原生领域

然而但随着时间的发展,它的应用范围已经扩展到了云原生领域。相比于容器和虚拟机,WebAssembly 具有以下优势:

  1. 性能和安全:随着云原生生态系统的发展,大家对于高性能和安全的需求日益增长。WebAssembly 以其快速、安全、沙箱化的特点,成为了一个吸引人的选择。
  2. 跨平台特性:WebAssembly 的跨平台特性使得它非常适合云原生环境,因为它可以在任何支持 Wasm 运行时的环境中运行,与底层硬件或操作系统均无关。
  3. 轻量化:相比于传统的虚拟机和容器技术,Wasm 提供了更轻量级的解决方案,这对于需要快速扩展和缩放的云原生应用尤为重要,例如函数计算场景。
  4. 微服务和边缘计算:Wasm 适合被用于微服务架构和边缘计算场景,因为它能够提供快速的启动时间和更高的资源利用效率。

随着技术的成熟和社区的发展,已经有越来越多的工具和平台被开发出来以支持在云原生环境中使用 WebAssembly,runwasi 便是其中之一。它是一个 Containerd 插件,用来将 Wasm 运行时整合到 Containerd 中,以支持使用 Containerd 来创建和管理 Wasm 应用。

本文将会给大家介绍如何在 Sealos 云操作系统中快速集成 runwasi,并使用 runwasi 来运行 Wasm 应用。

⚠️ 注意:runwasi 目前还是 Alpha 版,不建议在生产环境中使用。

runwasi 介绍

先来看一眼 runwasi 骚气的 Logo:

在理解 runwasi 之前,我们先来明确几个概念:

WebAssembly (Wasm) 运行时

  • WebAssembly 基础:WebAssembly 提供了一个沙箱环境,允许在其中以接近原生性能执行预编译的二进制代码。这些代码模块独立于平台,能够在任何支持 Wasm 的环境中运行。
  • Wasm 运行时:这是一个软件栈,用于加载、验证、编译,并最终执行 Wasm 二进制文件。例如,Wasmtime 或 Wasmer 就是这样的运行时。

Containerd 架构

Containerd 是一个达到工业标准的容器运行时,负责容器的创建、启动、停止和管理,它的架构被设计为模块化,可以通过插件来扩展其功能。这包括快照插件、运行时插件等。runwasi 就是其中一个快照插件。

runwasi 的工作原理

  1. 作为插件runwasi 作为一个 Containerd 快照插件存在,使得 Wasm 应用能够作为容器运行。
  2. 加载 Wasm 应用:当 Containerd 请求启动一个容器时,runwasi 插件负责加载 Wasm 应用。
  3. Wasm 运行时集成runwasi 使用一个 Wasm 运行时(如 Wasmtime)来执行 Wasm 应用。这意味着它会处理 Wasm 二进制文件的加载、验证和执行。
  4. 容器化的 Wasm 应用:通过 runwasi,Wasm 应用在 Containerd 的管理下以类似于传统容器应用的方式运行,但实际上是在 Wasm 运行时中执行。

Sealos 集成 runwasi

下面我们来演示如何在 Sealos 云操作系统中集成 runwasi,步骤非常简单,只需要一条命令即可。

Sealos 提供了 3 个不同的集群镜像:labring/containerd-shim-wasmtime、labring/containerd-shim-wasmedge 和 labring/containerd-shim-wasmer,分别对应三个不同的 Wasm 运行时:WasmEdge、Wasmtime 和 Wasmer。

以 Wasmtime 运行时为例,只需执行下面这条命令就可以将 runwasi 集成到 Sealos 集群中:

$ sealos run docker.io/labring/containerd-shim-wasmtime:v0.3.0

然后使用 Rust 编写一个 Wasm 应用:

// hello.rs

use std::thread::sleep;

fn main() {
    loop {
        sleep(std::time::Duration::from_secs(5));
        println!("{}", "This is from a main function from a wasm module");
    }
}

编译并运行:

$ rustup target add wasm32-wasi
$ rustc quick-start.rs --target wasm32-wasi
$ wasmtime quick-start.wasm
This is from a main function from a wasm module

这个仓库里已经编译好了 wasm 文件:https://github.com/labring-actions/wasi-image/tree/main/applications/quick-start/main

你可以克隆该仓库,进入 applications/quick-start/main,然后执行以下命令构建 wasi 镜像并推送到 Sealos 本地镜像仓库:

$ sealos build --platform "wasi/wasm" -t sealos.hub:5000/quick-start:latest .
$ sealos push sealos.hub:5000/quick-start:latest

编写一个 Job 配置清单:

# wasm-demo.yaml
apiVersion: batch/v1
kind: Job
metadata:
  name: wasm-demo
spec:
  template:
    metadata:
      labels:
        app.kubernetes.io/name: wasm-demo
    spec:
      containers:
        - name: wasm-demo
          image: sealos.hub:5000/quick-start:latest
      runtimeClassName: runwasi-wasmtime # 修改成对应的 runtime 名字
      restartPolicy: Never

创建 Job:

$ kubectl apply -f wasm-demo.yaml

查看 demo 日志:

$ kubectl logs jobs/wasm 
This is from a main function from a wasm module

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1211046.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

印刷企业使用数字工厂管理系统前后有什么变化

随着科技的飞速发展,数字工厂管理系统已经逐渐渗透到印刷企业的各个环节。本文将通过分析印刷企业在使用数字工厂管理系统前后的变化,探讨这一技术如何为印刷行业带来革新。 一、使用前的状况 在使用数字工厂管理系统之前,印刷企业的生产方式…

从理论到实践:深度解读BIO、NIO、AIO的优缺点及使用场景

文章目录 BIO优缺点示例代码 NIO优缺点示例代码 AIO优缺点示例代码 总结 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 BIO、NIO和AIO是Java编程语言中用于处理输入输出(IO…

一则DNS被重定向导致无法获取MySQL连接处理

同事反馈xwik应用端报java exception 获取MySQL连接超时无法连接到数据库实例 经过告警日志发现访问进来的IP地址数据库端无法被解析,这里可以知道问题出现在Dns配置上了 通过以上报错检查/etc/resolve.conf 发现namesever 被重定向设置成了114.114.114.114 域名 …

Java面试题(每天10题)-------连载(31)

多线程篇 注:今天只更新四题,明天就换别的了 1、concurrent包下有哪些类? ConcurrentHashMap、Future、FutureTask、AtomicInteger... 2、线程a、b、c、d运行任务,怎么保证当a、b、c线程执行完再执行d线程? 1 、 Cou…

AdaBoost:提升机器学习的力量

一、介绍 机器学习已成为现代技术的基石,为从推荐系统到自动驾驶汽车的一切提供动力。在众多机器学习算法中,AdaBoost(Adaptive Boosting的缩写)作为一种强大的集成方法脱颖而出,为该领域的成功做出了重大贡献。AdaBoo…

企业设备巡检的痛点和解决方案

在设备巡检过程中,企业常面临多种痛点。首先,信息管理不足是一个关键问题,企业往往缺乏全面、准确的设备信息记录,这导致巡检工作缺乏针对性和效率。其次,巡检流程的非标准化使得巡检结果出现不一致,重要的…

HTML5+CSS3小实例:炫酷的流边按钮

实例:炫酷的流边按钮 技术栈:HTML+CSS 效果: 源码: 【HTML】 <!DOCTYPE html> <html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta name="viewport" content="wid…

妙手ERP本期功能优化:TikTok创建折扣活动可默认生成活动名称和时间、Shopee利润明细新增字段等

为了给卖家朋友带来更好的使用体验&#xff0c;更高效地运营跨境店铺&#xff0c;妙手ERP在上周优化了以下多项功能。 01、产品模块优化 全平台 - 批量编辑平台SKU增加翻译功能 TikTok - 创建折扣活动时&#xff0c;可默认生成活动名称和时间 02、订单模块优化 全平台 - 扫…

CleanMyMac X“断网激活”真的可以吗?

CleanMyMac X帮助Mac系统进行垃圾清理&#xff0c;清除多余的缓存、应用程序等&#xff0c;在提高工作效率上起了很大的作用。但是随着对软件的需求不断增加&#xff0c;很多人开始研究通过捷径破解正版软件&#xff0c;但是是否能成功呢&#xff1f;今天小编就为大家揭开“断网…

哪些方面的应用适合博捷芯双轴半自动划片机?

博捷芯BJX3666系列双轴半自动划片机可以应用于以下领域&#xff1a; 1. 集成电路制造&#xff1a;在集成电路制造中&#xff0c;划片机可以用来将芯片从晶圆上切割下来&#xff0c;以便进行封装和测试。此外&#xff0c;还可以用来对芯片进行划片分离加工&#xff0c;以得到所需…

格式工厂——万能格式转换器

很多时候&#xff0c;大家从网络上下载的文件不一定是自己想要的类型&#xff0c;比如flv等视频文件&#xff0c;而强行改文件后缀名只会造成文件格式错误&#xff0c;无法打开&#xff1b;而很多文件的格式并不能轻易转换&#xff0c;且很多渠道都需要收费。今天介绍的这款For…

【linux】centos7 yum安装nginx

查看系统中是否已安装 nginx 服务 yum list | grep nginx查看nginx运行进程 ps -ef | grep nginx添加源 rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm 安装Nginx yum install -y nginx 查看nginx安装目录 find …

【23真题】懒得出题!连续两年试卷相同!

连续两年出题一样&#xff0c;老师都懒得出题的院校又被我抓到一所&#xff01;&#xff08;上次是天津工业22和21年一模一样&#xff09;&#xff0c;这次沈阳工业的老师多多少少改了几个数&#xff0c;但是也大差不差&#xff0c;考这所院校&#xff0c;猛刷真题&#xff0c;…

Elasticsearch的配置学习笔记

文/朱季谦 Elasticsearch是一个基于Lucene的搜索服务器。它提供一个分布式多用户能力的全文搜索引擎&#xff0c;基于RESTful web接口&#xff0c;Elasticsearch是用Java语言开发的。 关于Elasticsearch系列笔记&#xff0c;主要从Elasticsearch的配置、核心组件、架构设计、使…

黔院长 | 《黄帝内经》——气厥论!

当我们体内的寒热之气厥逆&#xff0c;也就是气息上逆犯冲&#xff0c;就会为患多端&#xff0c;导致寒热之气在体内不断传变&#xff0c;我们的五脏六腑也跟着产生疾病。 肾得寒气&#xff0c;传给脾气&#xff0c;脾无法将水谷之精输养全身&#xff0c;就会导致人言语无力&a…

高德地图系列(四):vue项目利用高德地图实现车辆的路线规划

目录 第一章 效果图 第二章 源代码 第一章 效果图 小编该案例主要实现的两个点的思路&#xff1a;1、有两个正常的经纬度就可以在地图中绘制出汽车从起点到终点的路线规划&#xff1b;2、当用户经纬度发生变化时&#xff0c;用户可以通过某个操作&#xff0c;或者程序员通过…

VS2017新建.hpp文件

目录 1、新建h文件的方法&#xff1a;2、新建对用的cpp文件&#xff1a;3、在main.cpp中调用 1、新建h文件的方法&#xff1a; 2、新建对用的cpp文件&#xff1a; 3、在main.cpp中调用 参见大佬博客

PHP 论文发表管理系统mysql数据库web结构layUI布局apache计算机软件工程网页wamp

一、源码特点 PHP 论文发表管理系统是一套完善的web设计系统mysql数据库 &#xff0c;对理解php编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 php 论文发表系统1 代码 https://download.csdn.net/download/qq_412213…

pyCharm新建项目

1.新建界面点击Create New Project。 或点击File->New Project... 2.选择Pure Python后&#xff0c;如图选择路径。 Location的地址一致&#xff0c;点击Create。 3.等待新建成功后&#xff0c;在新建的项目名字右击&#xff0c;如下图可以选择新建文件夹、python包和python…