WasmEdge 0.8.2 发布,增加 Networking 支持、Rust SDK、兼容性优化

WasmEdge 0.8.2 版本发布啦!

  • 更好的跨平台兼容性。在 Mac OS X(Intel 和 M1)、Windows 10 以及配备 ARM 32 位芯片的 IoT 设备上运行 WasmEdge 应用程序。
  • Networking 支持。可以从 WasmEdge 应用程序发出网络请求并运行 HTTP 服务器。
  • 新的和改进的 API。在 C、Rust 和 Golang 应用程序中嵌入 WasmEdge 函数。
  • WasmEdge 的 AoT 编译器的通用二进制输出。在云原生平台可以利用 AOT 增进性能。
  • 支持 proxy-wasm 规范,WasmEdge 为服务网格带来了高性能 API 路由。

跨平台兼容性

借助 manylinux1 发布目标,WasmEdge Runtime ,包括其 AOT 编译器和本机扩展,可以在老旧至 2007 年的 Linux 版本上运行。现在,WasmEdge 也可以在基于ARM 32 位 CPU 老的设备和 SoC 板上运行,它们常常用于物联网应用程序。

除了 Linux,WasmEdge 还支持 Mac OS X,包括基于 Intel 和 M1 的 Mac 以及 Windows。这些设备得到了开发者和边缘应用程序的广泛使用。你可以在自己的笔记本电脑上尝试一下!

之后,团队正致力于在即将发布的 WasmEdge 版本中支持如 seL4 等实时操作系统。

Networking 支持

云原生应用通常需要建立网络连接。但是,标准 WebAssembly 规范不支持 networking。 WASI-socket 规范旨在将基于 socket 的网络支持添加到 WebAssembly 中,但社区仍然就此争论不休。

WasmEdge 团队决定在 WasmEdge 0.8.2 中实现 socket 支持。 WasmEdge 网络 socket 支持以当前的 WASI socket 提案为蓝本,并为开发者提供了一个 Rust crate 来编写具有网络功能的 WebAssembly 应用程序。

WasmEdge 的网络 socket API 支持 TcpStreamTcpListenerUdpSocketShutdown。此版本包括用于 WebAssembly 的 HTTP 客户端和服务器端实现的 Rust demo 应用程序。

请注意,目前 WasmEdge socket API 仅适用于 Linux。

更多细节请查看 wasmedge_wasi_socket repo:https://github.com/second-state/wasmedge_wasi_socket

API 提升

WasmEdge 的一个关键应用场景是将其作为 serverless 函数 runtime 嵌入到云原生环境中。这要求开发者通过 API 从主机应用程序启动 WasmEdge。

WasmEdge C API 是从主机应用程序访问 WasmEdge 运行时的接口。它也是 WasmEdge 其他语言 API 的基础,例如 WasmEdge Go API。此版本为 WasmEdge C API 添加了一些功能点。

  • 添加了静态库 libwasmedge_c.a
  • ErrCode 添加到 C 声明中。
  • 增加了 WasmEdge_String 转换为C 字符串的 API。
  • 添加了从 WasmEdge_MemoryInstanceContext 获取数据指针的 API。

此外,WasmEdge 0.8.2 还包含两个 用于 Rust API 的 Rust crate, wasmedge-syswasmege-rswasmedge-sys crate 是从 WasmEdge C API 生成的低级 API。 wasmedge-rs 是一个惯用的 Rust API,封装了低级 wasmedge-sys ,使其更安全,对开发者更友好。完整的 wasmedge-rs crate 仍在积极开发中。欢迎任何反馈和贡献。

如果你想查看一个 API 的例子,请查看 dapr-wasm repo。它使用 WasmEdge Golang 和 Rust API 在云原生 service mesh 中实现 sidecar 应用程序。

WasmEdge的 AoT 编译器的通用二进制码

WasmEdge 0.8.2 添加了一个新的 AOT 编译器 flag --generic-binary。此标志用于生成通用二进制文件并禁用 CPU 特定优化。

因此,通用二进制文件可能会损失大约 20% 的原始性能,但在整个 CPU 类别中实现了更好的兼容性(例如,生成适用于所有 x86 CPU 的二进制文件)。

--generic-binary 的应用场景包括在 serverless 平台(例如 AWS Lambda、腾讯云、Vercel 和 Netlify)上运行 WasmEdge。为了将这些平台上的启动时间缩短至毫秒级,我们将 WasmEdge 配置为在部署环境预先(AOT)编译其应用程序。我们无法在 runtime (运行环境)预先确定 CPU 的确切代号和型号。通用二进制码选项平衡了 AOT 的性能和 WebAssembly 应用程序的可移植性。

支持 Proxy-wasm

Proxy-wasm 是一种在 API 代理中嵌入 WebAssembly Runtime 的规范。 它允许 WebAssembly 函数以编程方式发送服务网格网络中的 API 流量。 proxy-wasm 标准由 Envoy、Istio Proxy 和 MOSN 支持。 在 WasmEdge 0.8.2 中,提供了proxy-wasm 的主机实现。 WasmEdge 现在可以用作 Envoy 和 MOSN 的高性能扩展。

要想了解有关 WasmEdge 0.8.2 版本的更多信息,请查看我们的 changelog! WasmEdge 0.8.2 是朝着云原生 WebAssembly 生态迈出的重要一步。加入我们这场大变革!

最后,我们感谢来自社区的贡献 @actly、 @alabulei1、@CaptainVincent、@chenyukang、@hydai、@ibmibmibm
@juntao、@kenvifire、@L-jasmine、@MaazKhan711635、 @MileyFu、@nhynes、 @q82419、@robnanarivo、 @yanganto 和 @Yonama。(排名不分先后,按照首字母进行排序)

最后的最后,WasmEdge 参加了今年秋季的 CNCF LFX Mentorship 项目。我们要感谢来自世界各地的 100多名我们项目的开发者,期待他们的贡献。

你可能感兴趣的:(runtime,serverless,最佳实践,WebAssembly,rust,wasm)