云原生 WebAssembly 如今发展到哪一步了?

2021年11月22日 阅读数:4
这篇文章主要向大家介绍云原生 WebAssembly 如今发展到哪一步了?,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

做者:Michael Yuan,WasmEdge Maintainerjavascript

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

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

因为云原生社区对 WebAssembly 的兴趣日益增加, KubeCon+CloudNativeCon 于 10 月在洛杉矶举办了一场专门的 Cloud Native Wasm Day 活动。超过 300 名开发人员注册并付费参加了为期一天的活动。我(指做者)是活动的策划委员会成员,并亲自参加了活动。git

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

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

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

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 服务。编程

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

WebAssembly 程序不只仅是由 Kubernetes 管理和控制的工做负载。他们还能够扩展 Kubernetes 自己。 SUSE 的 Rafael Fernández López 向咱们介绍了 Kubewarden 项目,该项目为 Kubernetes 提供了一个基于 WebAssembly 的策略引擎。

应用框架

应用程序框架构建在 Kubernetes 之上,为应用程序提供通用服务。一个很好的例子是 Dapr,它由微软建立,很快将成为 CNCF 孵化项目(翻译本文时,Dapr 已是 CNCF 孵化项目)。 Dapr 利用 sidecar 模式为附加到这些 sidecar 的微服务应用程序提供经常使用服务,例如服务发现和调用、弹性重试、日志记录和跟踪、监控、秘密存储、链接安全等。这些 sidecar 应用程序(微服务)能够由 Kubernetes 管理。 Dapr 如今支持基于 WebAssembly 的 sidecar 应用程序

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用在边缘上”的项目 KubeEdgeSuperEdgeOpenYurt。和刚刚提到的 K8s 集成一块儿,WebAssembly 在物联网设备上的将来可期。

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

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

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

生态创新

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

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 应用会广泛部署在云上。 你还在等什么呢?