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

2021/09/10 12:09
阅读数 83

中国 KubeCon + CloudNativeCon + Open Source Summit 虚拟大会

12 月 9 日至 10 日

https://www.lfasiallc.com/kubecon-cloudnativecon-open-source-summit-china/


诚意邀您成为赞助商




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 路由。


changelog 链接:https://github.com/WasmEdge/WasmEdge/releases/tag/0.8.2

跨平台兼容性

借助  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 支持 TcpStream、 TcpListenerUdpSocket 和  Shutdown。此版本包括用于 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-sys 和 wasmege-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 应用程序。

Dapr-WasmEdge 源地址 https://github.com/second-state/dapr-wasm

BTW,今晚8点,WasmEdge 将做客 KubeSphere 云原生直播间,欢迎大家围观。具体详情请戳: 直播预告 | WebAssembly ——Dapr 的高性能执行环境

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多名我们项目的开发者,期待他们的贡献。


点击阅读原文,查看 WasmEdge 源代码。


文章转载自Second State点击这里阅读原文了解更多


联系关于Linux基金会




Linux基金会是非营利性组织,是技术生态系统的重要组成部分。 

Linux基金会通过提供财务和智力资源、基础设施、服务、活动以及培训来支持创建永续开源生态系统。在共享技术的创建中,Linux基金会及其项目通过共同努力形成了非凡成功的投资。请长按以下二维码进行关注。

本文分享自微信公众号 - LFAPAC(gh_8442c14fe49e)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
0 评论
0 收藏
0
分享
返回顶部
顶部