在大前端领域,我们看到了很多令人振奋的趋势:Serverless/FaaS/边缘计算等架构激发了对 Workload 被调度性能的追求,在线跑 JavaScript 越来越流行;JavaScript/TypeScript 在后端开发领域的应用越来越广泛;一套代码多平台适配,跨平台技术栈成为主流;WebGPU 在未来将取代 WebGL,会给 H5、小程序等的内容创作与性能表现带来更多可能;工具链逐渐成熟,WebAssembly 云原生应用逐渐走向主流;低代码/无代码是大势所趋·····
我们邀请了五名国内开源大前端领域的专家,为各位开发者解读开源大前端的发展和流行趋势。
本文选自《2022中国开源开发者报告:前沿开源技术领域解读》,原文作者:Michael Yuan。
2022 年是云原生 WebAssembly (Wasm)工具链逐渐成熟的一年,也是 Wasm 的云原生应用逐渐走向主流的一年。相信在 2023 年,Wasm 的应用将会更广泛。
2022 年,集成 WasmEdge 的 Docker Desktop 4.15 正式版发布。通过与 WasmEdge 合作, Docker 现在可以肩并肩运行 Wasm 容器 与 Linux 容器。Wasm 容器应用的启动时间与空间占用也都比 Linux 容器改进了两个数量级(100倍)。Docker 的支持是 Wasm 开发工具链步入主流的一个里程碑。
不仅如此,随着 runwasi 成为 containerd 的正式项目,使得任何基于 containerd 的容器管理系统(包括 Docker 与 Azure)都能用 shim 的方式启动 Wasm 容器。
两个主流 OCI runtime——crun 与 youki 率先支持了 Wasm,Wasm 应用可以无缝接入现有 K8s 生态。CRI-O、Podman、OpenShift 与 K8s 及 K8s 的变种如 OpenYurt、SuperEdge、KubeEdge、kind 都可以启动、编排 Wasm 容器。
在操作系统层面,Fedora Linux 37 与 Red Hat Enterprise Linux 的 EPEL 9 都正式集成了 WasmEdge 的安装包。开发者可直接在 Linux 程序里集成 Wasm 应用,或者用简单命令行启动 Wasm 的运行沙盒。
Wasm 的语言支持也在逐渐增加。例如,通过 WasmEdge-quickjs 项目,JavaScript 程序(包括 Node.JS API 与 NPM 软件包)可以运行在 Wasm 容器里。VMware 将 PHP 导入到 WebAssembly ,可以在 Wasm Runtime 运行 WordPress。微软的 .Net 也增加了对 WASI 的支持。
在 Wasm 标准方面,Component model 提案将支持从一个 Wasm 模块访问其他模块和系统(例如数据库、消息队列),提高 Wasm 模块的可重用性和可组合性。spin、SpiderLightning 等项目已经在使用 component model 的一些接口与工具。wasmtime、WasmEdge 等主流 Wasm Runtimes 也都明确表示支持。
Wasm 在浏览器端也有了进展。W3C 发布了 WebAssembly 核心规范 2.0 的首个草案,讨论了 Core Specification 、JavaScript Interface、Web API,为其在浏览器的应用指明了方向。
2022 年,Wasm 解锁、丰富了几个重要的云原生应用场景:
- 在微服务方面,Wasm 为其提供了轻量级、安全、高性能的运行环境。例如,wasmCloud 与 Adobe 合作部署了基于 Wasm 的安全微服务;基于 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 的工具。
想要了解更多前沿开源技术领域解读,请访问《2022中国开源开发者报告》