工具链逐渐成熟,Wasm云原生应用走向主流WebAssembly的2022
Michael Yuan Second State
近日,OSCHINA 和 Gitee 联合发布了《2022 中国开源开发者报告》。其中,CNCF WasmEdge 维护者 Michael Yuan 在报告中对开源大前端领域里 WebAssembly 进行了解读。以下是未删减版原文。
报告地址:https://gitee.com/report/china-open-source-2022/
2022年是云原生 WebAssembly (Wasm)工具链逐渐成熟的一年,也是 Wasm 的云原生应用逐渐走向主流的一年。
虽然 Wasm 已经在浏览器里使用多年,在服务端上,云原生 Wasm 是一个起源于 2019年的新生事物:Docker 创始人 Solomon Hykes 在推特上说,服务端的 Wasm 是云计算的未来。他说 Docker 未来不但要支持 Linux 容器,而且也会支持 Wasm 容器。与 Linux 容器相比,同等的应用在 Wasm 容器里会更轻,更快,更安全,更加(跨平台)可移植。
三年疫情之后,Solomon Hykes 的预言终于变成了现实。2022年10月24日,Docker 在 Cloud Native Wasm Day NA 宣布了 Docker + Wasm 技术预览,并且在之后发布了集成 WasmEdge 的 Docker Desktop 4.15 正式发行版。通过与 WasmEdge 的合作, Docker 现在可以肩并肩运行 Wasm 容器 与 Linux 容器。现实世界的例子展现了 Wasm 容器应用的启动时间与空间占用都比 Linux 容器改进了两个数量级(100倍)。
Docker 的支持是 Wasm 的开发工具链步入主流的一个里程碑 。这意味着1000万使用 Docker 的开发者可以使用他们熟悉的工具链来开发与管理 Wasm 应用程序。通过一个简单的 docker compose up 命令,开发者可以立刻构建、共享和运行 Wasm 容器。
Docker 的 Wasm 支持不仅依赖于 WasmEdge,也依赖于 runwasi 这个开源项目。它使得任何基于 containerd 的容器管理系统(包括 Docker 与 Azure)都能用 shim 的方式启动 Wasm 容器。12月2日,runwasi 成为 containerd 的正式项目,这也意味着 containerd 正式支持了 Wasm。
当然,很多云原生项目并不一定依赖 containerd。但是几乎所有云原生项目都会用到更底层的 OCI Runtime。crun 与 youki 是两个率先支持 Wasm 的主流 OCI runtime,它可以使 Wasm 应用无缝接入现有 K8s 生态。通过 crun 的支持,CRI-O、Podman、OpenShift 与 K8s 及 K8s 的变种如 OpenYurt、SuperEdge、KubeEdge、kind 都可以启动、编排 Wasm 容器。
在操作系统层面,Fedora Linux 37 与 Red Hat Enterprise Linux 的 EPEL 9 都在 2022 年正式集成了 WasmEdge 的安装包。这样,云原生开发者可以直接在自己的 Linux 程序里集成 Wasm 应用,或者用简单的命令行启动 Wasm 的运行沙盒。
2022年,Wasm 的语言的支持也在逐渐增加。例如,通过 WasmEdge-quickjs 项目,JavaScript 程序,甚至包括 Node.JS API 与 NPM 软件包,都可以运行在 Wasm 容器里。VMware 将 PHP 导入到 WebAssembly ,可以在 Wasm Runtime 运行 WordPress。微软的 .Net 增加了对 WASI 的支持。
在 2022 年,Wasm 标准里面最值得期待的是 Component model 提案,这个提案将支持从一个 Wasm 模块访问其他模块和系统(例如数据库,消息队列),提高 Wasm 模块的可重用性和可组合性。Fermyon 的 spin 与 Microsoft 的 SpiderLightning 等项目已经在使用 component model 的一些接口与工具。主流的 Wasm Runtimes,包括 wasmtime 与 WasmEdge,也都明确表示要支持 component model 的实现。
但是同时,Wasm 社区也在继续扩展 WASI 的应用范围,以让更多的 Rust、 JavaScript 或者其他语言的应用程序能够不加更改地在 Wasm 上运行。这里有代表性的是 WasmEdge 对 WASI socket 的改进创新使得 Rust 的 Tokio, hyper, reqwest, 甚至 mysql, kafka, redis 等 crates,以及 JavaScript 里的 Node.JS API,都能在 WasmEdge 里面运行。
开发工具的支持与开发者的努力,使得 Wasm 在 2022 年解锁、丰富了几个重要的云原生应用场景。 微服务 — 相较于传统 Linux 容器,Wasm 为微服务提供了轻量级、安全、高性能的运行环境。例如,wasmCloud 与 Adobe 合作部署了基于 Wasm 的安全微服务。又比如 WasmEdge 与 Dapr 正在合作,让基于 WasmEdge 的微服务能够直接使用 Dapr 集成的几百种服务。 数据流函数 — 作为一个轻量级、可嵌入的 runtime, Wasm 在数据库 UDF 和数据流的 ETL 方面有落地应用场景。例如SingleStore 与 Nebula Graph 使用 Wasm 在数据库执行 UDF。InfinyOn 与 Redpanda 使用 Wasm 在实时数据流中处理数据。 PaaS serverless 函数 — Wasm 非常适合执行轻量级,需要快速冷启动扩容的 serverless 函数。Fermyon、Cosmonic 以及 Fastly 都基于 Wasm 推出了类似 AWS Lambda 的 Serverless 平台。 SaaS serverless 函数 — Wasm 可以赋能 SaaS 平台支持用户上传的代码。这些代码是由 SaaS 事件触发的,以取代复杂、慢、且难用的 webhook APIs。Suborbital 推出了基于 Wasm 构建 SaaS 扩展的框架。而 Flows.network 是一个用 Wasm serverless 函数来连接 SaaS 的工具。
另外值得一提的是,我们也看到了越来越多的公司正在加大对 Wasm 的投入,这其中不仅有初创公司 Second State、Fermyon、Suborbital、Cosmonic、Diagrid、Singlestore,还有较大规模的公司比如 Microsoft、VMWare、Intel、Cloudflare、Fastly、Red Hat、Docker、Cisco、阿里、蚂蚁、字节跳动等等都在探索或正在使用服务器端的 Wasm。
最后, Wasm 在浏览器端也有了进展。W3C 发布了 WebAssembly 核心规范 2.0 的首个草案,讨论了 WebAssembly Core Specification – Version 2.0、WebAssembly JavaScript Interface – Version 2.0、WebAssembly Web API – Version 2.0 ,为 WebAssembly 在浏览器的应用指明了方向。
2022年,是 Wasm 云原生工具链逐渐完善的一年,相信云原生 Wasm 的应用在2023年将会更广泛。
《2022 中国开源开发者报告》报告由" 前沿开源技术领域解读 " " 中国开源创业观察 2022",以及" 开发者画像分析 " 三个章节组成。在 "前沿开源技术领域解读" 部分,多位在其领域有所建树的一线开发者和开源商业化公司创始人,对目前国内外流行的前沿开源技术领域过去的发展和未来的趋势进行了深入的洞察,覆盖开源云原生、开源 AI、开源大前端、开源大数据、开源 DevOps、RISC-V、开源操作系统、开源数据库、编程语言九大领域。