【翻译】WebAssembly的归宿。在云中

荆利
2023-12-01

上一篇文章中,我们向你介绍了WebAssembly的基本原理。现在我们知道了WebAssembly是什么,是时候讨论它的归属了,我们坚信,它是属于的。

什么使WebAssembly具有云的价值?

在前面的文章中,我们讨论了WebAssembly的一系列决定性属性。在这篇文章中,让我们来看看这些属性,看看是什么让它们在云中如此吸引人。

便携式

在云中,工作负载并不是静态的。与过去的虚拟机和数据中心不同的是,我们启动的东西不会永远保持在同一个地方运行。在云中,我们的工作负载在主机之间移动。当我们考虑到被称为 "边缘 "的神话生物时,我们也希望我们的工作负载能够在后端和边缘的任何端之间自由移动。

为了实现这一点,我们需要知道,我们的工作负载将在任何有足够资源的主机上工作。这就是为什么可移植性在云中是如此重要。

快速

时间就是金钱。我们不得不等待某些工作完成的时间越长,我们执行这项工作的成本就越高。更糟糕的是,如果我们让我们的客户等待,那么我们也有可能失去他们的钱。在上一篇文章中,我们讨论了WebAssembly虚拟机的高效、快速特性。我们从实验和基准知道,我们可以从WebAssembly模块中获得接近原生(或完全原生,取决于引擎)的性能。

小规模

当部署的单位很大时,有些事情我们根本无法做到。例如,你不能指望快速和容易地运送一个1GB的Docker镜像,你当然也不能指望在不付出带宽和速度的代价的情况下,能够下载和启动这样一个镜像。

WebAssembly模块很小,而且是可流动的。这意味着我们部署的工作单元可以比我们现有的云部署的工作负载小得多,而且它可以实现以前不可能实现的部署和分发场景。我们可以将计算单元分布在信息中,这些信息可以比通常伴随着大型Web应用的典型JavaScript包更小。

安全

今天的现代云原生应用实行深度防御--即假设入侵者有能力穿透基础设施的任何一层,因此你要在所有层建立安全。我们有一些工具可以在运行时监控系统,以防止它们执行未经授权的操作,但像WebAssembly模块这样的独立的沙盒实体,除非主机运行时允许,否则不能做任何事情,也不能访问它们自己以外的任何内存。你甚至可以询问一个模块,确定它将向主机运行时请求哪些功能。这里没有惊喜,也没有办法劫持一个模块,让它做一些它不能做的事。

云中的WebAssembly

虽然许多人在阅读这篇文章时可能听说过WebAssembly在浏览器中的运行,但从云端到边缘,到处都有一些惊人的创新,都在利用我们刚才讨论的WebAssembly的引人注目的品质。

有一些提供边缘计算的公司正在提供基于WebAssembly的功能执行,有一些开源项目和公司正在开发整个高级开发框架,旨在改变我们构建分布式应用的方式,有一些传统的云供应商,如AWS和谷歌,在他们的云中提供WebAssembly功能执行,甚至有一部分Kubernetes社区正在探索如何将基于WebAssembly的工作负载与容器调度平台相结合。

边缘计算

边缘计算是在用户的物理位置或执行所需的数据源附近进行的代码执行。人们想要边缘计算,因为我们对计算能力和性能的要求从未放松。我们想要一切,而且我们想要比以前更快。

想想一个机器学习应用,它分析视频的每一帧来检测物体。如果分析器视频帧的源头很近(从网络角度来说),我们就可以在用户观看视频时,在用户所在的地方实时完成这项工作。如果没有边缘计算,这将成为一个缓慢、乏味的过程,整个视频被提交处理,我们在排队等咖啡后最终得到结果。

边缘计算最近越来越受欢迎,有许多公司提供边缘网络,从静态内容交付到这些交付网络边缘的代码执行。这些边缘网络现在支持WebAssembly,接受其微小的尺寸、安全性和性能。

以边缘计算服务著称的Fastly公司最近在其Compute@Edge产品中支持在其边缘网络上运行编译为WASI(WebAssembly系统接口)的代码。你可以使用Rust或AssemblyScript等语言来编写代码,这些代码在边缘运行,靠近用户,利用Fastly的库,处理附近的数据,并与传统的后端进行通信。Fastly是字节码联盟(由对WebAssembly的成功有既得利益的公司组成的多行业集团)的成员,并通过该成员资格积极支持WebAssembly社区,为运行时和工具开发做出贡献。

对于许多业内人士来说,Netlify是通过GitHub集成生成和托管静态网站的黄金标准。他们简单的界面使你只需点击几下就可以创建一个新的网站,并配有SSL和自定义域名。

最近,Netlify开放了一项功能,让你创建托管在其边缘网络的无服务器功能。请记住,与 "云功能 "或任何其他你可能部署在传统云后端的服务不同,这种功能的副本被部署,以便在地理上接近用户,减少用户和你的代码之间的跳数,在理论上,减少你的代码和它所依赖的数据之间的跳数。欲了解更多信息,请查看这篇关于Netlify无服务器功能的博文。

应用程序开发框架

除了对使用边缘计算作为WebAssembly代码的部署目标的兴趣大增之外,还有一些有趣的项目正在进行,试图利用WebAssembly的规模、力量、安全性和可移植性,以实现全新的方式来构建应用程序。这些人想给我们提供云原生的、分布式的构件,我们可以很容易地把它们扣在一起来完成工作。

亚轨道Atmo

现在有一整类框架,建立在低级别的WebAssembly引擎之上,暴露了一个有意见的应用开发框架。Suborbital的Atmo就是这样一个框架。Atmo旨在使创建强大的服务器应用程序变得容易,而不需要担心可扩展性、基础设施或复杂的网络问题。

通过Atmo,你用指令将一系列的可运行程序拼接在一起,然后你可以创建一个可运行程序包,部署它,并运行你的应用程序。Atmo用于分布式业务逻辑执行的可运行程序实际上是编译的WebAssembly模块,它使用Atmo SDK来获得增强的功能。对于过去使用lambdas或云函数的管道,甚至是声明式工作流风格的框架的人来说,这种声明式的小计算单元的拴系可能感觉很熟悉。

欲了解更多信息,请查看Suborbital主页。

Cosmonic的wasmCloud

wasmCloud是一个分布式应用程序运行时,它采用行为体模型来动态连接行为体和能力提供者,目的是不仅从开发过程中剥离不必要的模板,而且使创建安全、强大、易于扩展的应用变得简单有趣,可以跨越从云到边缘的多个基础设施,是的,甚至是网络浏览器。

有了wasmCloud,你可以用Rust或任何其他支持WebAssembly的目标语言来创建你的角色。你的角色通过抽象或合同与你的非功能需求沟通,如数据库访问、网络服务器、日志等。这样一来,同样的应用程序代码在开发过程中可以有不同的能力提供者,而在生产过程中则无需重新编译。wasmCloud的行为体的安全性是由直接嵌入到WebAssembly模块中的签名JSON Web Tokens(JWT)的分散系统提供的。

更多信息,请查看wasmCloud文档。wasmCloud最近被捐赠给了云原生计算基金会(CNCF)。

云功能、扩展和插件

非浏览器WebAssembly领域的另一类创新是在传统的云后端,以及在较低的系统网络层面,包括Kubernetes和相邻的工具和框架。

Envoy代理

Envoy是云原生计算基金会(CNCF)的另一个成员,是一个开源的边缘和服务代理。简而言之,Envoy站在边界一侧的流量和另一侧的流量之间,顾名思义,充当所谓的 "真实 "终端的代理

自成立以来,Envoy一直支持以自定义过滤器的形式进行扩展,可以应用于通过代理的流量。这些扩展最初是用C++编写的,但现在可以用任何能够产生WebAssembly模块的语言编写。

为了帮助开发者寻找和分享这些扩展过滤器,甚至还有一个类似市场的中心,开发者可以在那里发布和搜索WebAssembly扩展。

云提供商的功能

几乎所有提供某种功能即服务(FaaS)或lambda功能的主要云提供商,都开始支持在WebAssembly中创建这些功能的能力。这些供应商已经看到了墙上的文字,即通向未来的道路是由WebAssembly模块铺就的。

关于云计算供应商提供的wasm支持的函数运行时的例子,请查看Cloudflare或AWSLambda@Edge的产品。

Kubernetes和WebAssembly与Krustlet

如果不提及Kubernetes及其伴随的(相当庞大的)生态系统,你就无法真正讨论现在的云原生事物。

Krustlet是一个用Rust编写的kubelet,负责整个生态系统中使用的一些强大的工具。这个项目允许你在定义Kubernetes pod规范时,指定存储在符合OCI标准的注册表中的WebAssembly模块的图像名称。

这意味着,通过运行Krustlet的节点,你可以直接在Kubernetes中无缝地调度WebAssembly模块,而不需要中间件的黑客。Krustlet支持调度WASI模块和wasmCloud角色。

Krustlet也是最近加入云原生计算基金会的一个项目。

开放策略代理

开放策略代理是一个旨在为云原生环境提供基于策略控制的产品。OPA希望每个人都使用相同的工具和政策语言,在你的整个堆栈中进行政策(如规则)评估,从服务到CI/CD到数据、SSH边界、UI等等。人们使用OPA作为Kubernetes准入控制器,确定用户授权的规则,精炼和后处理的业务数据的来源,以及更多。

通常情况下,Open Policy Agent策略是一组用Rego语言编写的文本文件。然而,你也可以将OPA策略编译成WebAssembly模块。这些可移植的、独立的WebAssembly策略文件可以安全地、轻松地在环境中运输,并在适当的地方针对实时数据执行。

关于OPA的更多背景,请参考Anders Eknert关于WTF的文章

总结

我们现在所看到的就像一颗行星的早期形成--成千上万的创新小块围绕着新的WebAssembly的重心旋转。如果单独来看,它们似乎都是微小的进步,但如果作为一个整体来看,它们代表了WebAssembly引擎推动云原生领域发展的可能性。

我们不仅认为WebAssembly是分布式云原生开发的未来,我们还认为,如果有足够的支持、工具和社区,它可能是后Docker世界的下一个逻辑演变。

 类似资料: