作者 | Peter Vetere
译者 | 崔莹峰
无论是在服务器上还是在边缘,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(Low Level Virtual Machine 的简称)可以供许多语言作为编译的后台。由于这种方法,且由于社区围绕LLVM项目多年的努力,Wasm程序可以编译为高度优化的机器代码。
在SingleStore,我们创建了“Wasm太空计划”——一个数据库内的虚拟实时宇宙——来展示Wasm的速度和轻量级。在这个模拟程序中,宇宙飞船使用不同的策略来补充能量,并在浩瀚的实时“宇宙”中与其他宇宙飞船作战。这涉及大量数据,系统中有超过一百万艘船,每秒有近三百万次数据库更新。
传统上,集成该数据并将其组装在中间层需要将大量数据提取到中间层。这可能会引入大量的滞后,并且需要一些复杂的缓存来实现实时响应。“Wasm太空计划”没有采用这种方法,而是将每艘宇宙飞船的策略都用Wasm编写,并作为UDF加载到数据库中。每一秒,每个宇宙飞船的战略函数都被调用来决定它的下一步行动。
前端(在浏览器中运行的JavaScript程序)上没有任何逻辑可以理解这些策略,它也没有关于宇宙状态的任何内容。它的工作只是直接向数据库发出SQL查询,并以图形方式显示返回的信息。数据库维护所有状态信息,并且由于Wasm允许计算紧挨着数据,因此速度要快得多。甚至不需要中层。
但Wasm并不全是乐趣和游戏。你可以使用它来解决无数其他应用程序和用例。例如,你可以使用Wasm进行情绪分析。情感分析所需的复杂逻辑不是可以用数据库SQL语言轻松表达的。因此,为了做到这一点,你通常需要用更复杂的语言实现这个算法,下载所有数据并将数据传给这个算法。然后,你需要将情绪分析评级推回数据库。这意味着你使用的数据库中的每一行都需要往返。如果你有数百万行数据,则会产生很多流量。但是,通过SingleStore集成Wasm的方式,这个算法已经在数据库中,因此你不会产生该开销。
能力:创建标准使其更加强大
Wasm已经非常有能力了。而且随着新技术和新标准的到来,Wasm将更加强大。
例如,W3C WebAssembly Community Group在字节码联盟等组织成员的帮助下,目前正在致力于标准化WebAssembly系统接口 (WASI)。WASI将提供一组标准的API和服务,当Wasm模块在服务器上运行时可以使用这些API和服务。许多标准提案仍在进行中,例如垃圾回收、网络I/O和线程,因此你不必总是将你在其他编程语言中做的事情都映射到Wasm。因为最终,WASI将提供一个完整的标准来实现这一目标。在许多方面,WASI的目标与POSIX相似。
Wasm现在也没有解决与其他Wasm模块链接或通信的能力。但是Wasm社区在计算行业成员的支持下,正在努力创建一种称为组件模型的东西。它旨在围绕Wasm模块创建一个动态链接基础设施,定义组件如何启动和相互通信(类似于传统操作系统的进程模型)。
此外,一种新兴的标准IDL语法,称为WIT(用于WebAssembly接口类型),将允许人们以与语言无关的方式描述他们的Wasm接口。因此,绑定生成器将能够获取IDL中的内容并编译代码,这些代码将允许Wasm主机和客户端以通用方式通信数据。
未来:提供更快、更安全、更高效的
方式将事物整合在一起
Wasm虽然更轻量级,但可能不会很快取代容器。然而你可以期待Wasm成为未来许多软件的一部分。
无论是在服务器上还是在边缘,Wasm都允许你创建自定义逻辑,这些逻辑比以前更接近数据,而且你可以安全、高效且更灵活地完成此操作。
现在有了SingleStore,你可以将现有程序编译为Wasm,将它们推送到数据库中,然后在那里运行它们。这意味着你可能不必重写该代码并将其放在远离数据的地方。借助Wasm技术,你可以两全其美。
https://www.infoworld.com/article/3678208/why-wasm-is-the-future-of-cloud-computing.html
崔莹峰,51CTO社区编辑,一名70后程序员,拥有10多年工作经验,长期从事 Java 开发,架构设计,容器化等相关工作。
领取专属 10元无门槛券
私享最新 技术干货