作者|PeterVetere 翻译|CuiYingfeng 无论是在服务器上还是在边缘,Wasm都允许您创建比以往更接近数据的自定义逻辑。您可以安全、高效且更灵活地执行此操作。 Wasm是最重要的新兴技术之一,不管你听说过与否,毫无疑问它很重要。 作为WebAssembly语言的简写,Wasm是为Web开发的。然而,Wasm技术已经扩展到网络浏览器之外。一些组织现在在服务器端运行Wasm。例如,我的公司SingleStore在我们的数据库中使用它。 有人认为Wasm将取代容器技术和无处不在的JavaScript。 信不信由你,Wasm正在对云计算产生影响。为什么以及如何?并一一听我说。跨平台:使云组件更安全、更轻松地组合在一起 人们使用各种不同的语言编写软件。让这些语言进行交互是很困难的。Wasm提供了一个可以用任何你想要的语言编写的框架。然后将其用于生成通用的模拟机器格式。 这种格式可以让用Rust、C/C++、Go等多种语言编写的组件相互通信。Wasm还为服务器端系统(例如数据库)提供了嵌入来自不同语言的组件的能力,而您无需知道或关心该模块是如何生成的。 将Wasm视为一种通用的插件格式。假设您想使用第三方开发的组件来增强系统的功能。Wasm允许您将新组件引入您的系统,而没有集成附加组件通常带来的风险。例如,外部组件可能会使系统崩溃或导致一些意外故障。Wasm通过为不同的系统和组件相互交互创建一个极其安全的框架来缓解这些问题。 云是Wasm扩展的重要驱动力。Wasm非常适合云,因为它是虚拟化的并且可以在支持Wasm运行时的任何环境中工作。此外,云系统通常由许多服务拼凑而成,并以不同的方式连接。这可能会变得复杂。然而,您越能简化您的云环境,云系统的各个方面就越容易正确地协同工作。安全性:通过运行代码和表示函数的方式来降低风险 在大多数语言运行时中,函数都有地址。这些地址是内存中的可执行点。如果您只是将内存视为一堆字节,则无法分辨函数地址在哪里以及普通字节在哪里。这为某人找到函数入口点以注入代码或以特权方式调用函数打开了大门,以便该函数执行它不应该执行的操作。Wasm的设计消除了这些问题。 Wasm以一种无法利用的方式表示函数。它还在沙箱中运行代码,从而减轻与运行不受信任的代码相关的常见安全问题。由于Wasm将程序内存封装在一个安全的飞地中,没有任何东西可以超越它并获得可能影响运行程序的主机或危及安全性的访问权限。 借助Wasm基于功能的安全模型,主机可以完全控制Wasm程序可以运行的特权操作类型。例如,如果需要访问文件,主机必须明确授予对目录的访问权限。速度:消除你不需要的东西,提高速度和效率 显然,Wasm并不是人们用来以更安全、更简单的方式将事物组合在一起的第一种技术。然而,Wasm比其他一些技术快得多。 编译器可以利用LLVM后端生成Wasm程序,编译为LLVM中间表示。LLVM(LowLevelVirtualMachine的缩写)可以作为多种语言的编译背景。得益于这种方法,以及围绕LLVM项目的多年社区努力,Wasm程序可以编译为高度优化的机器代码。 在SingleStore,我们创建了“WasmSpaceProject”——一个数据库中的虚拟实时宇宙——以展示Wasm的速度和轻便性。在这个模拟器中,宇宙飞船使用不同的策略在广阔的实时“宇宙”中加油和与其他宇宙飞船作战。这涉及到大量数据,系统中有超过一百万艘船,每秒更新近三百万个数据库。 集成这些数据并将其组装到中间层传统上需要将大量数据提取到中间层。这会引入很多延迟,并且需要一些复杂的缓存来实现实时响应。Wasm太空计划没有采用这种方法,而是将每个航天器的策略都用Wasm编写,并作为UDF加载到数据库中。每一秒,每艘飞船的策略函数都会被调用来决定它的下一步行动。 前端(浏览器中运行的JavaScript程序)没有理解这些策略的逻辑,也没有任何关于宇宙状态的信息。它的工作只是直接向数据库发出SQL查询并以图形方式显示返回的信息。数据库维护所有状态信息并且速度更快,因为Wasm允许计算就在数据旁边。甚至不需要中间层。 但Wasm并不全是乐趣和游戏。您可以使用它来解决无数其他应用程序和用例。例如,您可以使用Wasm进行情绪分析。情感分析所需的复杂逻辑无法用数据库SQL语言轻松表达。所以为了做到这一点,你通常需要用更复杂的语言来实现算法,下载所有数据并将数据提供给算法。然后,您需要将情绪分析评分推回数据库。这意味着您使用的数据库中的每一行都需要往返。如果你有数百万行的数据,它会产生大量的流量。但是,通过SingleStore集成Wasm的方式,该算法已经在数据库中,因此您不会产生这种开销。能力:制定标准使其更强大 Wasm已经非常有能力了。而随着新技术和标准的到来,Wasm将如虎添翼。 例如,W3CWebAssembly社区组在字节码联盟等组织成员的帮助下,目前正在致力于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都允许您创建比以往任何时候都更接近数据的自定义逻辑,并且您可以安全、高效、更灵活地进行。 现在使用SingleStore,您可以将现有程序编译为Wasm,将它们推送到数据库中,并在那里运行它们。这意味着您可能不必重写该代码并将其放置在远离数据的地方。借助Wasm技术,您可以两全其美。原文链接:https://img.ydisp.cn/news/20221128/0xpg2u2ywdbdata-id="h6f20189-U3lW6m0K"id="h6f20189-U3lW6m0K">译者简介 崔英峰,社区编辑,a70后程序员,10年以上工作经验,长期从事Java开发、架构设计、容器化等相关工作。
