共计 4302 个字符,预计需要花费 11 分钟才能阅读完成。
本文作者:Michael Yuan,WasmEdge Maintainer
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。
因为云原生社区对 WebAssembly 的趣味日益增长,KubeCon+CloudNativeCon 于 10 月在洛杉矶举办了一场专门的 Cloud Native Wasm Day 流动。超过 300 名开发人员注册并付费加入了为期一天的流动。我 (指作者) 是流动的策动委员会成员,并亲自参加了流动。
流动以 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 的策略引擎。
利用框架
应用程序框架构建在 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 用在边缘上”的我的项目 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 利用会广泛部署在云上。你还在等什么呢?