译者注:这是《WebAssembly 权威指南》一书的第十五章,介绍了 WebAssembly 在云和边缘场景下的应用。
老实说,我可以肯定地说,许多人并不了解云计算的全部范围。与采购物理硬件系统往往困难重重的情况相比,云计算的特点是速度提升明显,实例启动方便。但是把所有东西都放在云端和把所有东西都不放在云端一样愚蠢。
推动你对云进行战略思考的真正驱动力不应该仅仅是采购和开发人员的生产力,尽管这些都是重要的考虑因素。更一般的想法是考虑计算成本。从我所说的“成本”和“计算”的意思来看,这是一个比看起来更复杂的计算。在本章中,我将重点关注我们运行计算的地方变化的速度有多快,以及为什么 WebAssembly 将成为其中的关键部分。
短暂的个人迂回
在我职业生涯的早期,我是一家名为 Parabon1 的公司的首批员工之一。我们搭建了一个互联网分布式计算平台,汇集了全世界电脑的闲置时间。请记住,这是在云计算之前。除了将我们的引擎及其基于 Java 的核心安全地移植到八个平台之外,我们还构建了一个客户端 API、一个用于调度作业的服务器基础架构,以及六个或更多的垂直应用程序来使用它。我们运行的作业包括用于基因序列比较的线性缩放、用于穷举回归搜索的基于遗传算法的特征选择,以及基于蒙特卡罗的渲染系统。
此举的全部意义在于寻找计算能力的套利机会。机构不会购买足够的计算能力来满足他们的峰值需求,因此他们可以通过计算解决的问题存在上限。我们为一类被称为“令人尴尬的并行”弹性能力的问题提供了弹性能力。客户可以根据解决特定问题资源的需要请求尽可能多或尽可能少的计算。这给了他们一个旋钮,可以根据他们的需要产生边际成本。
在进行详尽搜索时,这使他们能够包含比他们通常拥有的分析资源更多的特征。在一个案例中,制药公司找出为什么某些治疗对某些患者有效但对其他患者无效的原因很有帮助。另一个匹配良好的例子是 NASA 的一名顾问,他能够将他的模拟从他在正常条件下可以使用的设备上花费九个月加速到我们的平台上需要四五个小时。他不得不将他的代码从 Fortran 移植到 Java,以实现各种操作系统之间的可移植性和我们对计算提供商的承诺。虽然 Fortran 在直接竞争中可以绕过当时 Sun 的新兴语言,但我们会通过并行化来弥补它。
即使有令人尴尬的并行问题约束的局限性,考虑到当时宽带,数字渲染等数据密集型任务也不太适合我们的平台。计算与数据的比率太低。花费太多时间和带宽将数据获取到需要去的地方。我们从根本上提供的是一种计算中介形式。即使在当时,我觉得还需要更多东西才能真正提供最大价值,但云计算还没有出现,无法让我们更全面地了解资源虚拟化。
另一个推动我思考的工作经历是我在视频游戏行业的经历。我正在开发一款基于另一款拥有 4000 万用户的游戏,所以我们非常确定我们需要扩大规模。然而,将所有东西都放在云端会让人望而生畏,所以我们混合购买和构建了数据中心设备,然后使用云服务作为弹性扩容。同样,我们可以仅在需要时使用额外的资源,而不是为它们一直运行付费。
我们的行业在不断发展
在这样的背景下,当我谈到计算的“成本”时,我指的是时间成本、金钱成本、非弹性供应的机会成本、功耗成本和延迟成本。这些是我们最近试图最小化的成本。云计算是该战略的一部分,微服务和无服务器函数等架构设计也是如此。Apple 的 M1 设计是另一种。M1 芯片中有两颗 CPU,一颗更注重性能,一颗更注重功耗。研究人员正在分析使用机器学习策略来命令 LLVM 操作以最大化性能或最小化功耗的复杂方法。应用程序代码没有改变,只是它的编译形式变了。
在何处以及如何使用计算资源来解决问题已成为成功 IT 战略的最重要方面之一。这包括高级和定制硬件,例如矢量化 CPU 指令2、图形处理单元(GPU)、现场可编程门阵列(FPGA)3、专用集成电路(ASIC)4 和张量处理单元(TPU)5。这些类型的硬件中的每一种都具有不同的功能、指令、成本和性能特征。将工作负载映射到这些元素将是以最小化一系列成本的方式进行编译的重要部分。
物理位置是成本的另一个因素,因为如你所知,延迟是我们不能忽视的6。如果你熟悉云区域的概念或使用内容分发网络 (CDN) 为静态资源提供服务,你就会明白让资源更接近用户的好处。
域名系统 (DNS) 技巧允许根据用户来自的地理区域动态选择端点。
边缘计算是一种新兴的服务产品,它将这些想法更进一步,将分布式计算(类似 Parabon)、云托管和地理分布式资源的想法结合在一起。不同的是,我们不再简单地谈论静态资源,而是可执行代码。Web 架构允许我们将事物一直推送到浏览器。如你所见,WebAssembly 在此用例中扮演着重要角色。有时出于隐私原因、低延迟用户体验等原因,你希望在浏览器或设备上执行此操作。有时,你可能不想在用户设备上运行专有代码,但仍想近一点。这是边缘计算的领域。它是跨越集中式数据中心、区域边界、服务提供商接入点边界、内部系统、本地接入点和设备的持续部署的本地链路。
在此范围内,隐含了各种硬件架构、隐私模式、对潜在敏感信息的访问和计算能力。我们对我之前提到的 NASA 研究人员的要求(即将他的代码移植到 Java)在今天不太可能是一个合理的要求。这些环境需要让客户自由选择他们的语言,同时也提供保护,防止他们在多租户系统中相互踩踏。
在图 15-1 中可以看到这个连续位置的快照。出于不同的原因,开发人员希望能够在此范围内部署软件工件。云中的大型模型训练和数据分析具有价值。这些结果可能不适合在移动设备或嵌入式系统上运行。一些服务可以位于更靠近用户的位置,以获得低延迟、更好的体验。出于知识产权保护的原因,你可能不想将某些操作一路发送到设备。在其他情况下,支付卡行业 (PCI)、健康保险流通与责任法案 (HIPAA) 和一般数据保护条例 (GDPR) 等隐私法规将鼓励或要求你这么做。
我们有一个策略,通过基于容器的环境和 Kubernetes 驱动的基础设施在云中部署可扩展的基础设施。绝大多数在这方面做得很好的东西在移动设备或嵌入式系统中完全没有用。
WebAssembly 和 WASI 提供了一个很好的故事,涵盖了所有这些变化。我认为它们将在这个领域大放异彩。在撰写本文时,我想向你介绍一些领先的项目,但我希望这些项目在不久的将来会大幅扩展。
在 2021 年的一次演讲中,来自 Cosmonic 和 wasmCloud 项目的 Liam Randall 强调了我一直在讨论的连续体。参见图 15-2,这基于他展示的一张图片。
我们看到的是我们的行业随着时间的推移发生了怎样的变化。开发人员要负责的事情越来越少。我们可以依赖运行时环境提供的东西增加了。最初,我们必须管理一切。我们必须购买硬件,安装操作系统和补丁,并添加任何依赖库或应用程序。为这些系统打补丁是一项全职工作,并且经常会导致与我们的系统的构建目标不兼容。
Linux 和 FreeBSD 等开源操作系统改变了整个行业。以前涉及昂贵的专有操作系统的许可证现在免费了。我们可以拥有任意数量的副本,但是在不同的硬件配置上设置和配置它们仍然是一项昂贵的活动,创新的时机已经成熟。
云计算的爆炸式增长引入了一个虚拟化层,我们可以在其中屏蔽硬件细节。这使我们能够共享物理系统的使用时间。针对各种操作系统配置的预定义映像轮换可以轻松满足需求并从已知起点快速移动。这些虚拟机映像很大、很笨重,并且出于各种目的是冗余的。管理依赖项仍然是应用程序开发人员的一大负担,但这是进步。
我们所知道的容器系统可以追溯到 1970 年代的 chroot 系统7。2000 年 FreeBSD 的 jail 系统出现,可以让多租户主机进一步区分什么是共享的,什么是每个用户独有的。这在多年后推动了 Linux Control Group 的兴起和发展,导致了 2008 年 Linux Containers (LXC) 的发展。Google 和 CloudFoundry 也有一些产品,但最终是 2013 年发布的 Docker 真正爆发。
总的来说,这种容器化的方法比上一代的重量级镜像的虚拟化更精细。基础设施可以被预定义,因此我们可以专注于安装正确版本的共享库和应用程序。
如你所见,WebAssembly 引入了新版本的安全、稳定、可移植代码的理念。API 可用性仍然是一个问题,但 WASI 可以帮助解决这个问题。在这样的环境中,沙盒代码的概念变得越来越重要,不仅是因为我们在第 8 章中讨论的供应链攻击。还因为我们希望将代码部署在不同的层上,如图 15-1 在多租户系统中部署代码。正如 Liam Randall 在他之前的相关演讲中提到的那样,随着基于功能的(capabilites-based)安全系统兴起,你可能预计这种趋势将继续下去。
在前几章中,我们探索了通过 Wasmtime 和 Wasmer API 加载和执行可重用 WebAssembly 模块的应用程序。这个用例有助于定义一个新的应用程序托管层,该层将提供支持插件、模块、扩展甚至基本功能的选项。代码需要经过批准的功能才能执行基本执行以外的操作,例如从文件系统读取、生成线程或打开网络连接。这种方法将促进广泛的使用,例如使用插件代理和文件服务器、微服务和无服务器函数以不同语言编写的长期运行的应用程序。
加上这种灵活的计算方式,这些方式的开销甚至比目前大家热捧的容器模型提供的开销还要低,安全性也更强。为了加强我们正在讨论的潜在影响,这些讨论中经常引用 Docker 联合创始人 Solomon Hykes 的话: “如果 WASM+WASI 在 2008 年就存在,我们就不需要创建 Docker 了。这就是为什么它很重要。服务器上的 WebAssembly 是计算的未来。”8正如他后来承认的那样,这并不一定意味着 Docker 会过时,但这意味着我们正在谈论同样重要的事情。这两种技术可能会找到协同工作的方法。
让我们看看这些想法如何以各种方式结合起来,为我们未来的异构和可扩展计算奠定基础。我们将探索一些商业和开源产品作为例子。
Fastly Compute@Edge
在过去十年中,Fastly 一直是一家成功的 CDN 提供商。它是字节码联盟的创始成员,最近从 Mozilla 聘请了一些专注于 WebAssembly 和 WASI 的工程师。它超越了静态内容服务,进入了我们通过其 Compute@Edge 平台想象的新世界。 该服务的核心是 Lucet WebAssembly 编译器和运行时,已经与我们在第 11 章中提到的 Mozilla Wasmtime 项目合并。通过开源并将其贡献给字节码联盟,Fastly 希望通过利用两个运行时。两者都是围绕 Cranelift 项目构建的,当与 WASI 结合时,将有助于客户将以各种编程语言编写的功能安全地推送到 Fastly 的 Edge@Compute 环境中。
Lucet 运行时的一个特性是它能够在 50 微秒内实例化 WebAssembly 模块,而 V8 需要 5 毫秒才能完成相同的操作9。除了这种速度优势外,它还可以以更低的内存开销实现这一点,以千字节而不是数十兆字节为单位。
与 Compute@Edge 平台交互相当简单。你注册一个账户并获得对由令牌10保护的 API 的访问权限。有一个命令行工具,用于启动项目并通过动态 DNS 条目将它们部署到生态系统中。目前,代码可以用 Rust、AssemblyScript 或 JavaScript 编写。许多功能目前处于测试阶段,但它们正在迅速发展并大量参与相关技术和标准的开发和管理。
虽然需要注册才能在 Fastly 的系统上部署任意代码,但其基于 WebAssembly 的 Terrarium 平台很容易在浏览器中探索。它围绕 WebAssembly StudioStudio(译者注:该项目目前已于 2022 年 6 月 24 日归档)构建,提供了一种简单的方法来体验在其平台上部署功能的便利性。
访问 https://wasm.fastlylabs.com 开始构建。你应该会看到一个带有弹出窗口的网站,你可以从各种项目中进行选择。有用于 C、TypeScript 和基本 Wat 代码库的空项目。还有一些实际工作的 C 和 Rust 示例,例如通过 HTTPS 提交 DNS 查询、图像处理、获取远程数据的天气应用程序、与 GitHub 通信的 GraphQL 示例以及节流代理示例。
选择其中一种项目类型后,浏览器将填充其关联结构。在本例中,我选择了 C 语言的图像处理实例。每个文件都可以浏览和编辑,但我只需单击如图 15-3 顶部的“Build & Deploy”按钮。请注意,为方便起见,它会为托管应用程序生成一个随机 DNS 名称。
如果你跟随生成的域,你将看到由所选文件 main.c
生成的 HTML,这只是为了清楚显示在图 15-4 中。
最后,如果单击链接将较大的图像锐化 20%,你将看到如图 15-5 所示的猫图像。令人兴奋的事情并不是你可以将应用程序发布到 Web 上并从浏览器中调用它。相反,你可以选择你的语言,包括明显不安全的语言,如 C,将其部署到其他人的基础设施中,进入混合架构(可能在地理上复制以实现低延迟交互)而不用担心。
在部署位置的连续性方面,顾名思义,我们主要关注边缘计算。接下来我们将研究一个解决方案,该解决方案将帮助开发人员将 WebAssembly 模块部署到他们现有的 Kubernetes 集群中。
Krustlet
虽然 Docker 容器提供隔离和行为依赖性机制,但 Kubernetes 已成为编排这些容器的主要环境之一,使它们能够自动部署复杂的应用程序和工作流。这两种技术确实是相辅相成的。如此之多以至于它们作为部署引擎紧密耦合。虽然这在大型云部署中不是问题,但当我们想要针对较小的平台时,它就会成为问题。最终,我们将寻找一种机制,允许以更轻的结构来表达行为的组合。然而,找到一种将 WebAssembly 直接与 Kubernetes 集成的方法是一个合理的目标。这正是微软的 DeisLabs 团队在过去几年中一直在进行的试验11。
该团队已将 WebAssembly 确定为部署安全、快速和安全软件的另一种方式。他们争辩说,从这样一个安全的基础开始比必须锁定容器实例更难。他们开发了 Krustlet——基于 Rust 的 Kubelet(因此得名)。这种方法的其他好处是启动和关闭时间更快,部署的元素比传统容器更小。这为物联网传感器和设备、嵌入式系统和其他受限环境创造了新的使用机会,同时还与现有的 Kubernetes 环境兼容。
DeisLabs 团队并不期望现有的应用程序突然被重新打包成 WebAssembly 模块,而且这绝不意味着要取代 Docker。相反,它是一个简化的 Kubelet,基本上“按原样”与 Kubernetes 交互。你可以将功能与 WebAssembly 和运行时环境混合搭配,而不是仅仅使用开放容器倡议(OCI)容器。这些运行时层不是固定的,但 Krustlet 历来与 Wasmtime 和 wasmCloud 项目的前身合作。通过打破 Kubernetes 和容器之间的耦合,我们期待这样的努力能带来很酷的东西。值得注意的是,Krustlet 已被云原生计算基金会(CNCF)接纳为沙盒项目。
请记住,这主要是一种扩展 WebAssembly 现状的方法。它最终将允许更广泛的引擎和计算区域设置与基于容器和 Kubernetes 的策略保持一致。它还强调了我们在协调策略和应用程序托管提供商方面的选择,我们接下来将讨论这些内容。
Suborbital
Suborbital 项目源于对容器的组成、协调和行为调度的解耦的兴趣。该团队最初考虑将 Docker 容器作为其工作流程的基础,但发现它们麻烦、缓慢且难以保护。WebAssembly 总体上更适合,所以让我们看看它是如何产生的。
Suborbital 平台有几个部分。第一个是用于表达 API 服务的基于 Go 的开发环境,称为 Vektor。这允许简单地表达复杂的行为,包括设置和配置服务器。Vektor 指南包括例 15-1,以演示如何启动配置有 Let’s Encrypt 支持的证书的服务器,以及注册和安装简单的处理程序。
例 15-1. Vektor server 示例
import "github.com/suborbital/vektor/vk"
server := vk.New(vk.UseAppName("Vektor API Server"),
vk.UseDomain("vektor.example.com"))
server.GET("/ping", HandlePing)
if err := server.Start(); err != nil {
log.Fatal(err)
}
func HandlePing(r *http.Request, ctx *vk.Ctx) (interface{}, error) {
return "pong", nil
}
下一个元素是基于 Go 的运行时调度函数和称为 Reactr 的可运行行为。它可以是独立的应用程序,也可以作为服务运行并通过 HTTPS 连接接受作业,从而提供函数即服务 (FaaS) 环境。它处理内存管理、函数安全系统,并可以安排用 Rust、AssemblyScript 和 Swift 编写的可运行作业。这些函数可以同步、异步或链接在一起进行调度,以提供 Unix 管道和过滤器样式的函数组合模型。
Grav 环境是一个基于 Go 的分布式消息传递网格,可扩展以管理组件之间的通信。它被设计为低开销和高弹性,支持各种消息传递方法(例如请求/回复和广播),以及内存中和进程间消息传递模型。但是,它服务于特定目的,并不打算取代更成熟的通用环境,例如 RabbitMQ 或 Kafka。
全面且一致的命令行工具 subo 允许你与 Suborbital 环境进行交互,并隐藏有关特定语言构建系统、容器结构等的许多细节。部署的工件可以以各种方式捆绑并在运行时增量热交换。
Atmo 是将它们联系在一起的最后一块。它是一个服务器端 API 框架,用于以声明方式管理已部署的功能。开发人员可以专注于功能并依靠基础架构根据需要进行扩展。虽然 Atmo 本身不与 Kubernetes 挂钩,但如果将其配置为自动扩展基础架构,则可以用来提供帮助。Atmo 通过 YAML 指令文件进行配置,以定义应如何部署和捆绑可运行的功能。这包括管理路由、业务逻辑和状态管理。
Suborbital 仍处于测试阶段,但它提供了一个令人信服的运行时环境愿景,这就是图 15-2 中最后一列所暗示的。甚至还有一个名为 Flight Deck 的 Atmo headless 版本,它将允许软件即服务 (SaaS) 提供商使用由该生态系统管理的 API 和功能自然地扩展他们的应用程序。
我要强调的下一个项目是来自 Second State 的 WasmEdge 项目。它是一种安全且高性能的 WebAssembly 运行时,已被 CNCF 采纳为官方沙箱项目。它也是在本章中到目前为止所讨论的一系列地方的目标运行时。
除了我们已经看到的典型主机功能外,WasmEdge 还具有测量执行时间消耗的机制,这在尝试将无服务器 FaaS 环境和基于区块链的系统货币化时非常有用。Wasmtime 也具有此功能,我们将在以下部分中看到。
WasmEdge 团队是 Jamstack 理念的大力倡导者,他们的理念非常棒。这是一个技术套件,包括 Javascript、API 和 Markup。基本思想是在构建过程中将前端转换为优化的静态单页和资产。这使得它们的运行时性能降低了复杂性和负载负担。虽然前端可以转换为静态资源,但它们通过与后端 API 和超媒体系统的交互保持动态行为。
可以使用标准的 HTTP 客户端(如浏览器)或命令行工具(如 HTTPie12)简洁地查询后台。
执行部署在 FaaS 上的功能就像下面这样简单,但要小心。我省略了编译后的 WebAssembly 代码的字节数。
brian@tweezer ~> http https://rpc.ssvm.secondstate.io:8081/api/executables/1
{
"wasm_id": 1,
"wasm_sha256": "0xfb413547a8aba56d0349603a7989e269f3846245e51804932b3e02bc0",
"wasm_description": "Function as a Service (FaaS)",
"wasm_as_buffer": {
"type": "Buffer",
"data": [
48,
44,
57,
55,
.
.
.
]
},
"wasm_state": "{}",
"wasm_callback_object": "{}"
}
正如你所看到的,新的端点可以通过操作资源来定义。要调用一个端点的行为来发出一个友好的、参数化的问候,你可以发出以下内容。
brian@tweezer ~> echo "from the future" | http -f POST https://rpc.ssvm.secondstate.io:8081/api/run/161/say Content-Type:text/plain
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Connection: keep-alive
Content-Length: 22
...
Content-Type: text/html; charset=utf-8
Date: Tue, 17 Aug 2021 18:48:13 GMT
ETag: W/"16-kf3Sg+1nPhqMOp7M01tMU9CkSVk"
...
hello from the future
WasmEdge 提供的其他功能包括基于功能的安全性、RockDB 支持的存储机制、WASI 集成、TensorFlow 功能等。
Second State 的网站有使用此功能的示例。此示例使用基于 FaceNet 数据集的多任务级联卷积网络 (MTCNN) 模型。
该示例包括指向 GitHub 存储库中实际代码的链接,以及通过命令行工具和浏览器构建、部署和调用此功能的过程的描述。提交 1927 年 Solvay 会议的著名图像的结果如图 15-6 所示13。
从 REST API 调用复杂的函数本身并不令人震惊,令人震惊的是能够在可移植的高性能沙箱环境中安全地部署要运行的代码。从测试的角度来看,你可以在 Node.js 或其他地方本地运行相同的行为也很有用。
除了基本的 WASI 支持外,WasmEdge 还支持第 12 章中讨论的几个提案,甚至是 WASI 套接字扩展以添加网络支持。WasmEdge 也有一个类似于我们从 Wasmer 和 Wasmtime 中看到的 API,用于将 WebAssembly 行为嵌入到任意其他应用程序中。
如果你访问 Second State 网站,你会发现 WasmEdge 在区块链、汽车基础设施和其他各种用途中运行的其他示例。我们将在第 16 章中涉及其中的一些内容,但现在我们将专注于我们最终的 WebAssembly 应用程序基础架构运行时。
wasmCloud 项目是一个复杂的、不断发展的技术集合,以前称为 waSCC(代表 WebAssembly 安全能力控制器)。它最近被选为 CNCF 的官方应用程序运行时项目,并承诺帮助开发人员在我们在本章讨论的所有地方的协调能力上构建基于角色的模型。我想重点关注它,因为我认为它有效地解决了解决图 15-1 最后一列的各种工程问题。这当然不是唯一可能解决该问题的项目,但目前它是这个想法最强大和最全面的提炼。
wasmCloud 提供了对基于云的基础设施的全面抽象。开发人员可以使用 Actor 根据消息处理和使用基础设施提供的功能来生成业务功能。能力(capability)只是一个术语,指的是参与者在应用程序运行时为了满足他们的期望而需要的非功能性需求。完全分离允许在不同环境中重用以及在同一环境中热交换底层实现。
与 wasmCloud 相关的工具和框架旨在解决将多语言代码库部署到日益多样化的平台的复杂性,正如我们之前提到的 Liam Randall 的演讲中所概述的那样。他们专注于只添加他们需要的东西,这就是他们利用 WebAssembly 和 WASI 的原因。该团队最近决定迁移到 Elixir 和 OTP 平台,而不是在这个生态系统中手工制作并发解决方案。他们很久以前就决定将他们的连接基础设施建立在 NATS 工具链和自适应边缘和分布式通信框架的基础上14。
你最终得到的是一个技术栈,它跟踪我们行业的演变,并准备好满足各种运行时配置和场景的需求。让我们快速浏览一下所涉及的层。
堆栈的底部是 WebAssembly 和 WASI。从这里开始,我们有一个可移植的安全架构,可以跨大量不同功能和资源的运行时和环境运行。与以前的沙盒环境不同,这使我们可以自由选择语言并获得高性能结果。该基础层如图 15-7 所示。
wasmCloud 扩展了 WebAssembly 的基础,包括签名包、减少样板代码、可组合角色模型以及水平和垂直可扩展性。它支持已部署业务功能的多租户无状态和隔离执行。这种层次结构的特征如图 15-8 所示。
wasmCloud 基础的功能部分是参与者完成其执行模型所需的可热插拔的非功能依赖项。wasmCloud 包含了一系列预定义的能力,比如数据存储、提供网络资源、消息队列等,这些都是可视化的,如图 15-9 所示。
开发人员将根据特殊需求与他们自己的提供商一起构建这些功能。存在于这个层级之上的角色将孤立存在,或者形成业务功能,可以在更丰富的层次上垂直发展。底层分布模型(基于 WebAssembly 的参与者)仍然相当轻量级,并且可以利用其他环境中受适当堆栈配置限制的类似功能。与 Kubernetes 和容器之间的紧密耦合不同,这为组织提供了更多的重用选择。我们展示了开发人员花费大部分时间的层。
最后,所有这些都连接到一个自我形成和修复的网状晶格网络。它采用全局发现机制,拓扑可调,支持各种云提供商的离线和在线执行模式。这种最终的灵活性如图 15-11 所示。
这些设计选择的总体效果是一个满足 21 世纪需求的卓越生态系统。作为最后一个例子,Red Badger 的优秀人员发布了他们最近的实验,即跨多个云提供商部署 wasmCloud 集群。它使用 Krustlet 和 wasmCloud,详见 GitHub。这是一个令人信服的愿景,它可能会实现如图 15-1 所示的演进。
我希望看到类似技术结构的替代实现。我期待着我们在本章中介绍的其他项目以及我们甚至还没有听说过的新项目的伟大成果。权衡和技术演进将在其他计划中保持一致。开发人员将越来越少地担心他们所使用的基础架构,因此他们可以专注于他们主要为开发而获得报酬的商业价值。鉴于现代软件开发世界的多样性,我不知道还能做什么。
接下来,我们将在去中心化系统的世界中进行最后一次架构巡游,看看我们的 WebAssembly 系列相关技术可以为我们做些什么。
注释
-
Parabon 目前专注于计算和 DNA 的交叉,用于下一代治疗和法医工具,例如用于解决悬案的工具。有一部基于它与 CeCe Moore 合作的热门电视节目,名为 The Genetic Detective。 ↩︎
-
这包括一些技术,如高级向量扩展(AVX) 和流式 SIMD 扩展(SSE)。 ↩︎
-
DeisLabs 团队主要由曾在 Kubernetes 软件包管理器 Helm 工作的人组成。 ↩︎
-
很难强调这张照片中显示的集体智慧。其中有 17 位诺贝尔奖获得者。你可以在维基百科上找到更多关于这张杰出照片及其来自集会的信息。 ↩︎
-
NATS 也是 CNCF 的一个官方孵化项目。 ↩︎