Skip to content

Latest commit

 

History

History
112 lines (71 loc) · 11.6 KB

README-zh.md

File metadata and controls

112 lines (71 loc) · 11.6 KB

快速开始指引

🚀 安装 WasmEdge
🤖 从源码编译 贡献 WasmEdge
⌨️ 从 CLINode.js Golang跑一个独立的 Wasm 程序
💭 部署一个 Wasm 函数即 web 服务 (FaaS)
🛠 嵌入一个用户定义的 Wasm 函数在 SaaS 平台上
🔩 嵌入一个 Wasm 函数在你的 Node.js web app 里
🔌 嵌入一个 Wasm 函数在你的 Golang app 里
🔗 嵌入一个 Wasm 函数即区块链智能合约

build Total alerts Language grade: C/C++ codecov FOSSA Status

介绍

WasmEdge (之前名为 SSVM) 是为边缘计算优化的高性能 WebAssembly (Wasm) 虚拟机,包括了边缘云和软件定义的汽车。在AOT模式下, WasmEdge 是目前市场上 最快的 Wasm 虚拟机

WasmEdge 是一个 CNCF (Cloud Native Computing Foundation云原生计算基金会)托管的官方沙盒项目。

WasmEdge 的最重要应用是在一个软件产品(例如,SaaS、汽车操作系统、边缘节点,甚至区块链节点)中安全地执行用户定义或者社区贡献的代码。它使第三方开发者、软件提供商、供应商和社区成员能够扩展和定制软件产品。 使用了 WasmEdge,软件产品可以成为托管平台。

WasmEdge 为其包含的 Wasm 字节码程序提供了一个定义良好的执行沙箱。通过配置选项,可以控制虚拟机启动时能够访问的系统资源(即基于能力的安全模型),意即没有虚拟机的明确许可,字节码程序无法访问操作系统资源(例如,文件系统、套接字、环境变量、进程)。

WasmEdge 还为其运行的 wasm 程序提供内存保护。 如果程序尝试访问分配给虚拟机的区域之外的内存,则虚拟机将终止并显示一条错误消息。

WasmEdge 及其运行的 wasm 程序可以作为新进程或从现有进程从 CLI 启动。 如果从现有进程启动(例如,从正在运行的 Node.jsGolang 程序),虚拟机将简单地作为一个函数在进程内运行。 也可以将 WasmEdge 虚拟机实例作为线程启动。 目前,WasmEdge 还不是线程安全的,这意味着在同一进程中的不同线程中运行的虚拟机实例可能能够访问彼此的内存。 未来,我们计划让 WasmEdge 做到线程安全。

将 WasmEdge 嵌入 host 应用

WasmEdge 的一个主要应用场景是从一个 host 应用程序启动一个虚拟机实例。一般而言,你可以使用 WasmEdge C API 做到这一点。

可是, Wasm spec 和 WasmEdge C API, 仅支持非常有限的数据类型作为包含的 Wasm 字节码函数的输入参数和返回值。 如果要将复杂的数据类型(例如数组的字符串)作为调用参数传递给所包含的函数,应该使用 rustwasmc 工具链提供的 bindgen 解决方案。

我们目前支持 Node.js 环境中的bindgen. 我们正在致力于在 Golang 和基于 Rust 的 host 应用程序中支持 bindgen。

从 WasmEdge调用原生 host 程序

有时, Wasm 字节码本身被证明对有些应用来说限制太多。 WasmEdge 提供一个 host 函数 API这允许 Wasm 字节码程序从底层 host 操作系统加载和调用原生库函数。

此功能破坏了Wasm沙箱。 但是沙箱破坏是在系统操作员的明确许可下完成的。

事实上,对 WasmEdge 的扩展是使用原生 host 函数实现的。 例如,Tensorflow 扩展 允许 Wasm 字节码调用原生 Tensorflow 库函数。

管理 WasmEdge 虚拟机实例

有了 WasmEdge C API, 您可以编写程序来启动、停止和管理您自己的应用程序中的 WasmEdge 虚拟机实例。您也可以参阅WasmEdge C API 快速开始指引。例如

  • 当 WasmEdge 函数嵌入在了 Node.js 或者在 飞书, 当有传入请求时,虚拟机由应用程序启动。
  • 当 WasmEdge 函数被插入到像 YoMo 这样的数据流引擎中时,当一个新的数据点流经系统时,虚拟机就会启动。

如果您有兴趣使用 Kubernetes 来管理 WasmEdge 虚拟机,您可以安装我们的自定义 runw 实用程序。 他们可以像加载 Docker 镜像一样加载 Wasm 字节码程序文件,然后根据配置的策略启动、运行和停止虚拟机实例。

支持 wasm 标准接口

WasmEdge 支持可选的 WebAssembly 特性和提案。 这些提议很可能在未来成为官方的 WebAssembly 规范。 WasmEdge 支持以下提案。

同时, WasmEdge 团队正探索wasi-socket提案 支持 WebAssembly 程序中的网络访问。

WasmEdge 扩展

WasmEdge 与其它的 WebAssembly 虚拟机的关键区别是它对非标准扩展的支持。WASI 规范为开发者提供了一种有效且安全地扩展 WebAssembly 虚拟机的机制。 WasmEdge 团队根据现实世界的客户需求创建了以下类似 WASI 的扩展。

  • Tensorflow. 开发者可以使用 一个简单的 Rust API 编写 Tensorflow 推理函数,然后在 WasmEdge 内以本机速度安全地运行该函数。
  • 其他AI框架。除了 Tensorflow,Second State 团队还在为 AI 框架(如 用于 WasmEdge 的ONNX 和 Tengine)构建类 WASI 的扩展。
  • 存储。 WasmEdge 存储接口 允许 WebAssembly 程序读取和写入键值存储。
  • 命令界面。WasmEdge 让 Webassembly 功能可以执行宿主机操作系统的本地命令。它支持传递参数、环境变量、STDIN/STDOUT pipes 和宿主机访问的安全策略。
  • 以太坊。 WasmEdge Ewasm 扩展支持编译为 WebAssembly 的以太坊智能合约。它是以太坊风格的 WebAssembly (Ewasm) 的领先实现。
  • SubstratePallet 让 WasmEdge 能在任何基于 Substrate 的区块链上充当以太坊智能合约执行引擎。

应用场景

社区

贡献

如果您想为 WasmEdge 项目做出贡献,请参阅我们的 CONTRIBUTION 文档了解详情。 想要获得灵感,可查看需求清单!

联系

如有任何疑问,请随时在相关项目上提GitHub issue,或:

License

FOSSA Status