无论是在服务器上还是在边缘,Wasm 都可以让您创建比以前更接近数据运行的自定义逻辑。而且您可以安全、高效且更灵活地执行此操作。

为什么 Wasm 是云计算的未来_数据库

Wasm 可能只是您从未听说过的最重要的新兴技术。好吧,也许你听说过。这一点很重要!

WebAssembly 语言的简写,Wasm 是为网络开发的。然而,Wasm 技术已经扩展到网络浏览器之外。现在,组织开始在服务器端运行 Wasm。例如,我的公司 SingleStore 在我们的数据库中使用它。

一些人认为 Wasm 将取代容器技术和无处不在的JavaScript。

无论您是否相信,Wasm 显然正在对云计算产生影响。为什么以及如何?让我们数一数。

Wasm 是跨平台的:使将云组件组合在一起更安全、更简单

人们使用各种不同的语言来编写软件。让这些语言相互交互是很困难的。Wasm 提供了一个框架,您可以在其中使用您想要的任何语言进行编写。然后它会生成一种通用的模拟机器格式。

这种格式允许用各种语言(如Rust、C/C++和Go)编写的组件相互通信。Wasm 还为服务器端系统(如数据库)提供了嵌入来自不同语言的组件的能力,而无需您知道或关心该模块是如何生成的。

将 Wasm 视为一种通用插件格式。假设您想使用第三方开发的组件来增强系统的功能。Wasm 让您可以将新组件带入您的系统,而没有集成附加组件通常带来的风险。例如,外部组件可能会使系统崩溃或以意想不到的方式工作。Wasm 通过为不同的系统和组件一起交互创建一个极其安全的框架来缓解这些问题。

云是 Wasm 扩张的一大推动力。Wasm 非常适合云,因为它是虚拟化的,可以在任何支持 Wasm 运行时的环境中工作。此外,云系统通常由许多拼凑在一起并以不同方式连接的服务组成。这可能会变得复杂。但是你越能简化你的云环境,云系统的各个方面就越容易正确地协同工作。

Wasm 是安全的:通过运行代码和表示函数的方法降低风险

在大多数语言运行时中,函数都有地址。这些地址是内存中的可执行点。如果您只是将内存视为一堆字节,则函数可能无法与内存的其余部分区分开来。这为人们打开了找到函数并将代码注入其中的大门,或者以特权方式调用函数,使函数做一些它不应该做的事情。Wasm 的设计消除了这些问题。

Wasm 以一种不可利用的方式表示函数。它还在沙箱中运行代码,这减轻了与运行不受信任的代码相关的常见安全问题。因为 Wasm 将程序内存封装在一个安全区域中,所以任何东西都无法脱离它并访问可能影响运行该程序的主机或危及安全性的其他地方。

借助 Wasm 基于能力的安全模型,主机可以完全控制 Wasm 程序可以运行哪些类型的特权操作。例如,如果需要访问文件,主机必须明确授予对目录的访问权限。

Wasm 很快:消除不需要的东西并提高速度和效率

显然,Wasm 并不是人们用来以更安全、更简化的方式将事物组合在一起的第一种技术。但是,Wasm 比其他一些技术快得多。

编译器可以利用 LLVM 后端生成 Wasm 程序,向下编译为 LLVM 中间表示。LLVM或低级虚拟机是许多语言已经编译成的提取机器。由于采用了这种方法,并且由于社区多年来围绕 LLVM 项目所做的努力,Wasm 程序可以编译为高度优化的机器代码。

在 SingleStore,我们创建了 Wasm Space Program——一个数据库内的虚拟实时宇宙——以展示 Wasm 的速度和轻量级。在这个模拟中,宇宙飞船使用不同的策略来补充能量并在广阔的实时“宇宙”中与其他宇宙飞船作战。这涉及到大量的数据,系统中有超过一百万艘船,每秒更新近三百万个数据库。

传统上,集成该数据并将其组装到中间层需要您将大量数据提取到中间层。这可能会引入大量延迟,并需要一些复杂的缓存来实现实时响应。不是采用这种方法,而是每艘宇宙飞船的策略都是用 Wasm 编写的,并作为 UDF 加载到数据库中。每一秒,每艘宇宙飞船的战略功能都会被调用来决定其下一步行动。

前端没有任何东西——在浏览器中运行的 JavaScript 程序——可以理解这些策略,或者任何关于宇宙状态的东西。它的工作只是直接向数据库发出 SQL 查询,并以图形方式显示返回的信息。数据库维护所有状态信息,并且由于 Wasm 允许计算紧邻数据,因此速度要快得多。甚至不需要中间层。

但 Wasm 并不全是乐趣和游戏。您可以使用它来解决无数其他应用程序和用例。例如,您可以使用 Wasm 进行情绪分析。情感分析所需的那种复杂逻辑不是可以用数据库 SQL 方言轻松表达的东西。因此,为了做到这一点,您通常需要使用更复杂的语言来实现它,然后通过下载每一行数据来将数据带给它。然后,您需要将情绪分析评级推回数据库。这意味着您使用的数据库中的每一行都需要往返一次。如果您有数百万行,则会产生大量网络流量。但是通过 SingleStore 集成 Wasm 的方式,您已经在数据库中,因此您不会产生这种开销。

Wasm 一直在变得更好:创建标准使其更加强大

wasm 已经非常有能力了。随着新技术和标准的出现,Wasm 将让您做更多事情。

例如,在字节码联盟(SingleStore 是其成员)等组织成员的帮助下, W3C WebAssembly 社区组目前正在致力于标准化 WebAssembly 系统接口 (WASI)。WASI 将提供一组标准的 API 和服务,当 Wasm 模块在服务器上运行时可以使用这些 API 和服务。许多标准提案仍在进行中,例如垃圾收集、网络 I/O 和线程,因此您不能总是将您在其他编程语言中所做的事情映射到 Wasm。但最终,WASI 的目标是提供一个有助于实现这一目标的完整标准。在许多方面,WASI 的目标与POSIX相似。

现在的 Wasm 也没有解决与其他 Wasm 模块链接或通信的能力。但是,在计算行业成员的支持下,Wasm 社区正在致力于创建称为组件模型的东西。这旨在围绕 Wasm 模块创建一个动态链接基础设施,定义组件如何启动和相互通信(类似于传统操作系统的进程模型)。

此外,一种称为 WIT(WebAssembly 接口类型)的新兴标准 IDL 语法将允许人们以与语言无关的方式描述他们的 Wasm 接口。因此,绑定生成器将能够获取 IDL 中的内容并编译允许 Wasm 主机和来宾以通用方式来回传递数据的代码。

Wasm 是未来:提供更快、更安全、更高效的方式将事物整合在一起

Wasm 虽然更轻量,但可能不会很快取代容器。但是你可以期待 Wasm 成为未来大量软件的一部分。

无论是在服务器上还是在边缘,Wasm 都可以让您创建比以前更接近数据运行的自定义逻辑,而且您可以安全、高效且更灵活地执行此操作。

现在使用 SingleStore,您可以将现有程序编译为 Wasm,将它们推送到数据库中,然后在那里运行。这意味着您可能不必重写该代码并将其放在没有数据的地方。借助 Wasm 技术,您可以两全其美。 

Peter Vetere 从事软件开发已有 25 年。 他目前在SingleStore工作——SingleStoreDB的制造商,这是一个为数据密集型应用程序设计的实时分布式 SQL 数据库——作为 LaunchPad 团队的成员,他研究如何将创新的新想法引入数据库。

为什么 Wasm 是云计算的未来_LLVM_02