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

Sealos 云操作系统一键集成 runwasi,解锁 Wasm 的无限潜力的更多相关文章

  1. iNeuOS 物联网云操作系统2.0发布,集成设备容器、视图建模、机器学习三大模块

    目       录 1.      概述... 2 2.      使命及目标... 3 3.      系统框架... 4 4.      设备容器(iNeuKernel)... 4 5.      ...

  2. iNeuOS云操作系统,.NET Core全系打造

    iNeuOS云操作系统,.NET Core全系打造 目录 一.演示地址... 2 二.技术体系... 2 三.iNeuOS整体介绍... 2 四.iNeuView概述... 3 五.iNeuView操 ...

  3. 中文企业云操作系统 CecOS

    CecOS介绍 CecOS(原中文企业云操作系统.第一个版本基于oVirt 3.0,后续在此基础上不断升级迭代拓展至今,已形成基于基础底层和应用功能拓展集成在内的10款产品和四大平台),旨在通过先进的 ...

  4. 使用cocoaPods一键集成第三方登录(新浪微博,qq,微信)

    第三方登录是现在app很常用的功能,而这个功能我已经写过两三次了...每次都写大同小异的代码真的是很痛苦,而且每次都要根据说明去添加那些依赖库,配置linkFlag什么的,完全是体力活,所以一直想把这 ...

  5. 泛微云桥e-birdge之金蝶云之家集成配置手册

    最近在配置金蝶云之家与泛微ecology的打通,没有看官方文档,直接配置,一直配置不通,看了官方文档后知道了少配置参数了,转载一下,省得四处去找了. 泛微云桥e-birdge之金蝶云之家集成配置手册 ...

  6. eplise一键集成工具

    因为要做平台,后台的内容就由我负责,目前想让测试人员  在本地使用eplise可以进行脚本开发,但是很多人都死在了搭建环境的道路上,那我就做了一键集成,点击就可以把所需要的配置项进行配置,总结:实际就 ...

  7. [转帖]“腾百万”之后,腾讯的云操作系统VStation单集群调度达10万台

    “腾百万”之后,腾讯的云操作系统VStation单集群调度达10万台 https://www.leiphone.com/news/201909/4BsKCJtvvUCEb66c.html 腾讯有超过1 ...

  8. 什么是云效持续集成?如何关联Jenkins进行持续集成?

    什么是云效持续集成?如何关联Jenkins进行持续集成?云效流水线 Flow是一款企业级.自动化的研发交付流水线, 提供灵活易用的持续集成.持续验证. 持续发布功能,帮助企业高质量.高效率的交付业务. ...

  9. SJGestureUnlock快速集成手势解锁

    前言:如果页面显示不完整或图片看不了还请移步:简书 SJGestureUnlock.h 常用自定义属性 @interface SJGestureUnlock : UIView @property (n ...

  10. iOS开发融云即时通讯集成详细步骤

    1.融云即时通讯iOS SDK下载地址   http://rongcloud.cn/downloads  选择iOS   SDK下载 2.进行应用开发之前,需要先在融云开发者平台创建应用,如果您已经注 ...

随机推荐

  1. 可托拉拽的WPF选项卡控件,强大好用!

    推荐一个简单易用的WPF选项卡控件. 项目简介 这是一个基于WPF开发的,可扩展.高度可定制.轻量级的UI组件,支持拖拉拽功能,可以让开发人员快速实现需要选项卡窗口的系统. 特色功能 1.拖拉拽标签: ...

  2. Angular: Error: NG0100: ExpressionChangedAfterItHasBeenChecked

    错误原因 当变更检测完成后又更改了表达式的值时,Angular就会抛出ExpressionChangedAfterItHasBeenCheckedError 错误,Angular只会在开发模式下抛出此 ...

  3. spring-mvc系列:简介和基本使用

    目录 一.简介 1.什么是MVC 2.什么是SpringMVC 3.SpringMVC的特点 二.基本使用 1.开发环境 2.创建maven工程 3.配置web.xml 4.创建SpringMVC的配 ...

  4. 重学HTTP:理解同源策略和CORS

    ​每次遇到跨域.代理.CORS这几个词都懵懵的,我决定一次把他们都搞明白,以后遇到他们再也不用害怕了. 一.什么是同源策略? 同源策略是在1995年由 Netscape公司引入到浏览器的,目前所有浏览 ...

  5. 《Web安全基础》03. SQL 注入

    @ 目录 1:简要 SQL 注入 2:MySQL 注入 2.1:信息获取 2.2:跨库攻击 2.3:文件读写 2.4:常见防护 3:注入方法 3.1:类型方法明确 3.2:盲注 3.3:编码 3.4: ...

  6. 快速了解C#接口(Interface)

    Runoob 接口定义了所有类继承接口时应遵循的语法合同.接口定义了语法合同 "是什么" 部分,派生类定义了语法合同 "怎么做" 部分. 接口定义了属性.方法和 ...

  7. .NET周刊【9月第2期 2023-09-10】

    国内文章 使用 OpenTelemetry 构建 .NET 应用可观测性(2):OpenTelemetry 项目简介 https://www.cnblogs.com/eventhorizon/p/17 ...

  8. Vue-入门vue,及第一个vue程序

    一.初始Vue 什么是vue Vue (发音为 /vjuː/,类似 view) 是一款用于构建用户界面的 JavaScript 框架.它基于标准 HTML.CSS 和 JavaScript 构建,并提 ...

  9. Solution -「ARC 123F」Insert Addition

    大约是翻译了一下官方题解? @Description@ 对于一个整数序列 \(P=(P_{1},\dots,P_{m})\),定义 \(f(P)\) 为一个序列 \(Q\) 满足: \(Q_{i}=P ...

  10. Spring-Boot-Starter 学习笔记(1)

    Spring-Boot-Starter 1. 准备配置类和 Bean 对象 Spring Boot 提供了两个注解: @Configuration:Spring 提供的配置类注解,作用在类上,代表整个 ...