WebAssembly运行时
WebAssembly运行时
- 1: Wasmer介绍
- 1.1: Wasmer概述
- 1.2: Wasmer场景支持
- 1.3: Wasmer文档
- 1.3.1: Wasmer Runtime
- 1.3.2: Wasmer文档概述
- 1.3.3: Wasmer Feature
- 1.3.4: Wapm
- 1.4: WAPM
- 2: wasmtime
- 3: WAMR
1 - Wasmer介绍
1.1 - Wasmer概述
wasmer公司应该完蛋了,改用其他吧,详见: https://mnt.io/2021/10/04/i-leave-wasmer/
介绍
Wasmer简介
Wasmer介绍:
Wasmer is an open-source runtime for executing WebAssembly on the Server.
Wasmer是用于在服务器上执行WebAssembly的开源运行时。
口号:“Run any code on any client. With WebAssembly and Wasmer.”
介绍:
Use the tools you know and the languages you love.
Compile everything to WebAssembly.
Run it on any OS or embed it into other languages.
使用您知道的工具和您喜欢的语言。
将所有内容编译为WebAssembly。
在任何操作系统上运行它或将其嵌入其他语言。
有三个主要特性:
- Create binaries that work on any platform / 创建可在任何平台上运行的二进制文件
- Run lightweight packages on the Edge / 在Edge上运行轻量级包
- Execute untrusted code safely / 安全地执行非信任的代码
WAPM
WAPM = the WebAssembly Package Manager
WAPM (WebAssembly Package Manager)
WebAssembly Shell
信息
1.2 - Wasmer场景支持
超强的区块链基础设施
https://wasmer.io/wasmer-for-blockchain
WebAssembly是执行智能合约的主流格式,Wasmer是区块链和加密货币供应商的首选WebAssembly运行时。
挑战
区块链能够实现简单、透明和安全的交易。然而,区块链的分布式性质给区块链应用和基础设施供应商带来了若干挑战。
-
JIT炸弹
确保恶意的或写得不好的智能合约不会崩溃或阻止所有区块链用户的交易处理。(JIT-bombs)
-
确定性
支持异构基础设施上的智能合约的确定性。(不同的芯片组和平台必须以相同的方式运行特定的相同的智能合约)
-
规模
随着区块链中区块数量的增加,扩展智能合约执行的数量
Wasmer的好处
-
没有JIT炸弹
由于恶意或拙劣的代码,JIT炸弹会减慢或阻止智能合约进程。Wasmer的Singlepass编译器有助于消除JIT炸弹,使区块链供应商能够为其应用程序提供高质量的服务基础设施。
-
异构基础设施
Wasmer的区块链基础设施确保每个智能合约的执行结果返回相同的结果,无论底层基础设施如何。(例如,x86_64,ARM,等等)
-
性能
Wasmer编译器引擎和运行时确保高性能的编译和代码执行,没有任何错误编译。
FaaS平台
https://wasmer.io/wasmer-for-faas
Wasmer是在服务器上启用WebAssembly的市场领导者。它几乎消除了开发人员必须处理的所有挑战,以完全采用FaaS作为其应用开发战略的一部分。
挑战
FaaS应用有许多优点。然而,与大多数技术一样,也同样存在着许多挑战和权衡。
-
冷启动
函数并不总是在内存中可用。由此产生的执行延迟使FaaS失去了某些类型应用的资格,或者迫使开发者部署变通方法,增加了部署成本。
-
供应商锁定
部署在AWS Lambda上的功能可能难以推送到不同的云供应商,特别是当其他AWS服务(如S3或RDS)是你的应用程序架构的关键组成部分时。
-
本地可重现性
在本地基础设施上测试或重现供应商的平台功能是很复杂的,可能需要依靠社区支持的变通方法(如Miniflare)。
-
隐形成本
FaaS平台是对用户不明显的完全托管服务,如果不加监督,在活动高峰期往往会产生意想不到的成本。
-
安全/合规性
完全托管的平台在补救安全问题时可能会很慢,或者不能完全遵守你的业务需求的具体规定(例如,GDPR、SOX、HIPPA等)。
Wasmer的好处
-
快速启动时间
Wasmer实现了Wasm模块的预编译,以实现超快和反应迅速的启动时间。
-
无供应商锁定
Wasm模块被编译成通用的二进制文件,可以迅速适应在任何供应商的基础设施上运行。
-
本地可重现性
Wasmer Runtime使您可以在本地运行和测试所有的服务组件。
-
遗留支持
将传统的服务器端代码编译为WebAssembly并作为一个函数运行。
-
开发效率
消除不相干的开发成本,使开发人员能够用他们熟悉和喜爱的语言工作。
可移植的ML/AI应用和模型
https://wasmer.io/wasmer-for-ai
机器学习和人工智能
Wasmer是在服务器上启用WebAssembly的市场领导者。它几乎消除了开发人员在数据中心环境内外部署机器学习应用程序必须应对的所有挑战。
挑战
-
模型的可移植性
收集数据或将模型部署到异构的基础设施和设备上是很困难和昂贵的。
-
数据的爆炸性增长
更多的设备意味着必须收集、处理更多的数据,并将其纳入ML/AI模型。
-
有限的连接
高速网络并不总是可用的,或者设备可能长期处于离线状态。
-
有限的电力
训练ML/AI模型需要大量的基础设施资源和电力,而这些资源和电力在数据中心之外可能并不总是可用。
-
安全性
物联网设备上的ML/AI应用特别容易受到常见安全风险的影响,如数据中毒或转移学习攻击,其中现有的训练模型被劫持用于恶意目的。
-
极致可移植性
WebAssembly实现了通用二进制文件,Wasmer Runtime确保ML/AI Wasm应用程序在任何设备上运行。
-
小的足迹
Wasmer的无头和特定架构的编译选项可以扩展到更多资源限制的设备。
-
性能
Wasmer提供多个引擎和编译器,以帮助开发人员优化他们的部署,以满足他们的具体性能要求。
-
安全性
将服务器端的WebAssembly与主机设备明确隔离,只允许访问所需的组件或传感器数据。
1.3 - Wasmer文档
1.3.1 - Wasmer Runtime
https://docs.wasmer.io/ecosystem/wasmer
Wasmer允许您运行WebAssembly模块,无论是独立或嵌入式内其他语言,如 C/C++, Rust, Python, Go, PHP, Ruby…
根据设计,WebAssembly模块运行所在的环境与底层主机系统的原生功能完全隔离(或沙盒化)。这意味着默认情况下,Wasm模块被设计为仅执行纯计算。
因此,通常无法从WASM访问“ 操作系统”级资源,例如文件描述符,网络套接字,系统时钟和随机数。
但是,在许多情况下,Wasm模块需要执行的工作不仅仅是执行纯计算。它们必须与原生“ OS”功能交互。
Wasmer旨在提供三个关键功能:
- 使程序能够在任何编程语言中运行
- 使极其便携的二进制文件能够在Wasmer支持的任何“ OS”(例如,Linux,macOS,Windows和FreeBSD)上运行,且无需修改。
- 充当Wasm模块的安全桥梁, 通过诸如
WASI
和Emscripten
(版本1.38.43和更早版本)这样的的应用二进制接口(Application Binary Interfaces/ABI)与原生“ OS”功能交互。
对于第一种情况,我们提供了多种语言集成,允许从任何编程语言中运行相同的Wasm模块。
对于第二种情况,我们提供了独立运行时以在任何平台和芯片组上运行Wasm二进制文件。
重要提示:
上面使用的术语“ OS”用引号引起来,表明被调用的原生功能实际上可能不是由主机的操作系统提供的。
实际上,原生函数始终属于运行WebAssembly模块的主机环境,并且可以是主机语言的运行时环境(例如JavaScript,Python或Ruby),也可以是实际的操作系统。 。
无论哪种方式,从WebAssembly的角度来看,我们都不必太在乎这个细节。我们需要知道的是:
- 主机可以为WebAssembly模块提供“导入”功能
- 通过Wasmer附带的ABI,WebAssembly模块可以使用不同级别的沙箱访问一组类似于操作系统的功能
1.3.3 - Wasmer Feature
https://docs.wasmer.io/ecosystem/wasmer/wasmer-features
Wasmer WebAssembly运行时为用户和开发人员提供了各种功能:
- 后端: Wasmer支持多个编译器后端:Singlepass,Cranelift和LLVM。这些中的每一个在编译速度与运行速度之间都有不同的权衡。
- 缓存:可以重复使用已编译的WebAssembly模块,因此后续运行Wasm文件的启动时间很短
- 计量:可以监视计算时间和其他资源,并可以设置限制来控制Wasm代码的运行方式。这也称为“gas metering/气体计量”
- WebAssembly功能:
- 多值返回:从函数返回多个值,使host和guest之间的数据传输更加简单
- SIMD:单指令,多数据:更快地执行重数运算和/或以更低的功耗使用
- ABI:它允许使用ABI运行编译到WebAssembly的不同类型的程序,例如:
- Emscripten
- WASI
详细支持情况看原文。
备注:Rust 的支持还是挺好的。
1.3.4 - Wapm
https://docs.wasmer.io/ecosystem/wapm
WAPM = WebAssembly Package Manager
WAPM 是WebAssembly模块的包管理器,可以被任何WebAssembly运行时(如Wasmer运行时)独立使用。
WAPM生态系统使WebAssembly更易于开发人员使用。该系统起始于以下几个工具:
-
用于存储和提供服务的 WAPM包注册中心 wapm.io
-
WAPM 打包客户端(称为 wapm CLI)用于安装和管理软件包 WAPM-CLI GitHub仓库
wax
https://docs.wasmer.io/ecosystem/wapm/wax
wax = The WebAssembly package Runner
Wax允许直接在shell中运行wamp中可用的任何命令,而无需进行会污染目录的全局安装。
Manifest
1.4 - WAPM
1.4.1 - wapm概述
WAPM 是 WebAssembly Package Manager 的缩写
wapm介绍
wapm是WebAssembly的软件包管理器。它创建于2019年,作为一个开源项目,帮助WebAssembly开发者轻松分享打包的代码模块。
wapm注册表是WebAssembly、前端Web应用、移动应用、服务器以及WebAssembly社区的无数其他需求的开源代码包的公共集合。
wapm
是一个命令行客户端,允许开发者安装和发布这些软件包。
Wasmer, Inc.是托管和维护上述所有内容的公司。
Wasmer公司
Wasmer, Inc.成立于2018年,致力于WebAssembly社区的长期成功,这包括开源WebAssembly和wapm项目的成功。
在Wasmer, Inc.,我们做三件事来支持这个目标。
-
构建一个WebAssembly运行时,在JavaScript之外释放WebAssembly的力量,所以它可以在任何地方使用(独立的、嵌入Python、PHP……)。
-
将开源注册表作为一项免费服务来运行。
-
建立支持使用WebAssembly模块的工具和运维服务
Wasmer的使命是让每个人都能使用WebAssembly。
我们的办公室在加州旧金山市中心。
1.4.2 - wapm安装
安装
参考 https://docs.wasmer.io/ecosystem/wasmer/getting-started :
$ curl https://get.wasmer.io -sSfL | sh
Welcome to the Wasmer bash installer!
ww
wwwww
ww wwwwww w
wwwww wwwwwwwww
ww wwwwww w wwwwwww
wwwww wwwwwwwwww wwwww
wwwwww w wwwwwww wwwww
wwwwwwwwwwwwww wwwww wwwww
wwwwwwwwwwwwwww wwwww wwwww
wwwwwwwwwwwwwww wwwww wwwww
wwwwwwwwwwwwwww wwwww wwwww
wwwwwwwwwwwwwww wwwww wwww
wwwwwwwwwwwwwww wwwww
wwwwwwwwwwww wwww
wwwwwwww
wwww
downloading: wasmer-linux-amd64
Latest release: 2.2.0-rc2
Downloading archive from https://github.com/wasmerio/wasmer/releases/download/2.2.0-rc2/wasmer-linux-amd64.tar.gz
######################################################################## 100.0%######################################################################### 100.0%
installing: /home/sky/.wasmer
Updating bash profile /home/sky/.zshrc
we've added the following to your /home/sky/.zshrc
If you have a different profile please add the following:
# Wasmer
export WASMER_DIR="/home/sky/.wasmer"
[ -s "$WASMER_DIR/wasmer.sh" ] && source "$WASMER_DIR/wasmer.sh"
check: wasmer 2.2.0-rc2 installed successfully ✓
wasmer & wapm will be available the next time you open the terminal.
If you want to have the commands available now please execute:
source /home/sky/.wasmer/wasmer.sh
验证安装:
$ source /home/sky/.wasmer/wasmer.sh
$ wapm --version
wapm-cli 0.5.1
$ which wapm
/home/sky/.wasmer/bin/wapm
示例
2 - wasmtime
3 - WAMR
Wasm-micro-runtime(WAMR)