云原生 WebAssembly 现在发展到哪一步了?

原文链接:https://thenewstack.io/cloud-native-webassembly-applications-are-already-here/

2021 年 7 月,计算机协会编程语言特别兴趣小组将其享有盛誉的编程语言软件奖(Programming Language Software Award )颁给了 WebAssembly,高度肯定了 WebAssembly 作为“自 JavaScript 以来第一种在 Web 浏览器中广泛采用的新语言”的成就。而今年也标志着 WebAssembly 在 Web 浏览器之外的爆炸性增长,尤其是在服务器端和云原生环境中。

到 2021 年为止,云原生计算基金会已经正式接受了至少三个 WebAssembly 项目,包括 WasmEdge Runtime,一个云原生 WebAssembly runtime;wasmCloud,一个 WebAssembly 应用程序框架;Krustlet,一个在 Kubernetes pods 中运行 WebAssembly 程序的工具。同时,许多现有的 CNCF 项目开始采用 WebAssembly。

活动以 Microsoft Azure 的 Ralph Squillace 和 Cosmonic 的 Liam Randall 的主题演讲开始。 Squillace 和 Randall 都是云计算老兵。他们的主题演讲讨论了云计算架构的演变,并为 WebAssembly 作为云原生 runtime 的兴起进行了背景介绍。

WebAssembly 是一个轻量级、快速、安全和多语言的函数“容器”。WebAssembly 将由 Kubernetes 和 Docker 开拓的云原生编程模式,从大型数据中心引入边缘计算和微服务领域。

从这场大会中,可以显然看出,云原生 WebAssembly 应用程序已经被各种规模的企业采用。随着应用程序的出现,我们也看到了一个蓬勃发展的框架、工具和 runtime 生态。

Kubernetes

由于 Kubernetes 已成为所有云原生应用程序事实上的“控制面板”,因此 WebAssembly 必须被 Kubernetes 支持才能真正意义上得到采用。服务器端的云原生 WebAssembly 不仅需要 WASI 访问操作系统函数,还需要与 Kubernetes 集成。我们需要在 Kubernetes 集群中与其他容器(例如 containerd、Docker 和 cri-o)并排运行 WebAssembly 工作负载。在这次大会上,我们看到了两种领先的方法。

Krustlet 项目从 Kubernetes pod 运行 WebAssembly 项目。 Wasm day 大会上,我们看到几项使用 krustlet 的demo。同时,大会期间 Microsoft Azure AKS 宣布了一项基于 krustlet 的 WebAssembly 服务。

WasmEdge 的 crunw 项目是另一种方法。它是 Kubernetes 容器 runtime(如 runc 和 crun)的直接替代品。crunw runtime 可以自动检测容器镜像是用于 WasmEdge 还是 containerd/Docker,然后启动和管理相应的 runtime/容器。它使 WebAssembly 程序成为 Kubernetes 集群中的一等公民。

WebAssembly 程序不仅仅是由 Kubernetes 管理和控制的工作负载。他们还可以扩展 Kubernetes 本身。 SUSE 的 Rafael Fernández López 向我们介绍了 Kubewarden 项目,该项目为 Kubernetes 提供了一个基于 WebAssembly 的策略引擎。

应用框架

wasmCloud 项目是一个基于 actor 的应用程序框架,专门为 WebAssembly 设计。来自 Red Badger 的 Stuart Harris 和 Aayush Attri 讲解了他们如何使用由 Kubernetes 管理的 wasmCloud 集群在欧洲银行内部实施大型应用程序。

服务 格建立在应用程序框架之上。它们提供附加功能,例如通过代理进行流量路由和拆分。 Envoy Proxy 是基于 WebAssembly 的服务 格扩展的早期采用者。 蚂蚁金服的 MOSN 是一个服务 格,可管理超过 200,000 台服务器的大型集群。

MOSN 团队的 Jason Song 在会上做了一个闪电演讲,讨论在服务 格中运行 WebAssembly 函数来代替传统容器。 MOSN 的代理支持 proxy-wasm 规范作为一种扩展机制。 MOSN 的 sidecar 框架,称为 Layotto,支持用 WebAssembly 编写的微服务。 Jason 现场演示了如何使用 Kubernetes 在 MOSN 和 Layotto 在电商应用中部署和管理 WebAssembly 函数。

SaaS 中的嵌入函数

至此,我们已经了解了 WebAssembly 在云原生基础设施中的应用。 那么业务逻辑应用呢?WebAssembly 使业务应用程序可以轻松支持第三方插件或扩展。 集中托管的云原生应用程序(例如 SaaS)可以使用 WebAssembly runtime 安全有效地执行任何用户提交的代码功能。

Suborbital 的 Connor Hicks 非常清楚地解释了为什么响应式嵌入式函数比传统的 webhooks 或“本地集成”(即定制模板)更适合扩展和定制 SaaS。 Suborbital 是一个应用程序框架,可以轻松地将 WebAssembly 函数嵌入到 SaaS 中。

Shopify 是使用嵌入 WebAssembly 函数扩展和定制相关 SaaS 的开拓者。很明显,开发者们确实希望使用 JavaScript 而不是 Rust 或 C/C++ 来编写这些函数。 Shopify 的 Saúl Cabrera 就如何在 WebAssembly 上运行和优化 JavaScript 程序进行了演讲。

此类别中,我们看到了 WebAssembly runtimes 如 WasmEdge,支持高级的JavaScript特性,例如 ES6 模块、 async 络、 以及 Rust/JavaScript互动。

Bailey Hayes 和 Carl Sverre 讲了 SingleStore 如何使用 WebAssembly 来执行用户定义的函数嵌入到云数据库中。它允许数据存储和计算保持紧密联系,并提高效率。在他们的演讲中,该团队展示了如何在大型数据集上使用 AI 模型执行实时情感分析。

作为早期采用者,该团队还参与了标准化工作,提出了 WASI-data 规范,以支持数据库和 WebAssembly runtime 之间的标准双向通信协议。

AI 和物联

正如 Liam Randall 在他的主题演讲中所讨论的那样,WebAssembly 的最大应用机会可能在边缘,在边缘 络和边缘设备上。

Dan Mihai Dumitriu 介绍了索尼物联 应用部门 Midokura 如何在传感器设备上部署 WebAssembly 应用程序。 WebAssembly 占用空间小和性能高,使其能够在小型设备上作为用户应用程序的安全沙箱运行。来自 Microsoft 的 Kate Goldenring 和来自伯南布哥联邦大学的 Rodrigo Farias Rodrigues Lemos 展示了 Akri,一个运行 Krustlet 的 WebAssembly 应用程序,用于发现物联 设备并将它们作为资源提供给一个 Kubernetes 集群。

实际上,CNCF 现在有至少3个 “K8s用在边缘上”的项目 KubeEdge、 SuperEdge和 OpenYurt。和刚刚提到的 K8s 集成一起,WebAssembly 在物联 设备上的未来可期。

如今的边缘 络上的一个重要应用是 AI 推理。又轻又快的 WebAssembly runtimes 能让 AI 推理计算离边缘上的传感器和数据源更近。大会中有两个演讲是和 AI 推理特别相关的。

来自 Layer5 的Shivay Lamba 和来自 Hackerrank 的 Mritunjay Sharma 讲了如何使用 WasmEdge 的 Tensorflow 和 Tensorflow Lite API 扩展来做图像识别,可以以毫秒的速度识别每个图像。该 API 对 Rust 和 JavaScript 开发者都可用。

来自微软的 Radu Matei 讨论了 WASI-NN 规范,该规范提供了一个标准 API,可以将任何 AI 推理库合并到 WebAssembly 中。 WasmEdge Tensorflow 扩展正被调整到适用 WASI-NN。

生态创新

随着 WebAssembly 应用增多,开发者纷纷参与进来提高 WebAssembly 本身和相关工具。大会上有两个引人注意的 WebAssembly 生态进展: Bindle 和 Grain。

Bindle 为 WebAssembly 模块和 artifacts 提供包管理系统。 正如我们从 NPM、Docker Hub、Go 和 Rust crate 的成功所看到的,包管理可以促进协作,并使开发者能够基于彼此的工作做开发。 来自 Microsoft Azure 的 Matt Butcher 和来自 Cosmonic 的 Taylor Thomas 就 Bindle 是如何设计的以及如何使用进行了演讲。 我们期待这项重要技术得到更多地采用。

Grain 是一个 WebAssembly 优先的编程语言。 静态类型和编译型编程语言可以最有效地利用 WebAssembly 的轻量级 runtime。 但是,Rust 和 C/C++ 等静态类型语言对于初学者来说并不容易。 来自 Grain 项目的 Oscar Spencer 讨论了 Grain 如何设计为一种易于使用的编程语言,可以编译成高效的 WebAssembly 字节码。 这个项目还处于早期,但非常有潜力。

展望未来

2021 年是云原生 Wasm 应用起飞的元年。随着 WebAssembly 几乎被纳入所有领先的云原生项目,我们可以看到,未来的一年, WebAssembly 应用会普遍部署在云上。 你还在等什么呢?

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年10月4日
下一篇 2021年10月4日

相关推荐