什么是WebAssembly组件模型?

F5生态系统 | 2025年2月12日

WebAssembly(简称Wasm)凭借接近原生的高速执行性能、丰富的编程语言选择,以及默认拒绝的稳健沙箱模型,一次又一次展现出其技术革新价值。它已在整个Web领域得到广泛应用,在服务器端也发挥着重要作用。

每个蓬勃发展的生态系统都需要清晰的愿景,明确各个组成部分如何协同运作,而这正是WebAssembly Component Model发挥作用之处。Component Model是一套用于促进各个WebAssembly代码单元之间,以及WebAssembly代码与宿主环境之间交互的系统。其核心是WebAssembly组件这一概念。这些组件本质上是编码了数据类型的常规Wasm模块。利用这些类型,可以生成在后台运行的粘合代码,让组件之间实现无缝通信。

组件模型开启了现代软件开发的新阶段。开发者可以从任何编程语言生态系统中选择所需组件,并将其组合成一个应用。已有一个用Python编写的数据处理应用,但需要一个用Rust编写的高效解析器?没问题。贵组织的一个团队擅长Go,而另一个团队只使用JavaScript?也没问题。每个团队都可以创建能够轻松组合的WebAssembly组件。

从技术角度看,为何需要它

WebAssembly面临着一个几乎所有新代码执行平台都会遇到的问题:如何在彼此独立、且可能由完全不同的编程语言工具链生成的代码单元之间安全、高效地共享数据?通常,两个独立的WebAssembly模块可以像许多系统一样,通过JSON、Protobuf或其他常用的数据交换格式传递数据。但这些格式的序列化和反序列化开销较大。毕竟,需要通信的两个模块很可能由同一运行时并行执行,而不是通过网络通信,因此这种数据交换方式仍有改进空间。

难点在于每种编程语言表示数据的方式各不相同。不同语言的实现可能会选择不同的字符串编码方式;一种语言可能倾向于使用数组存储顺序数据,而另一种语言则可能倾向于使用链表。要让不同语言编写的代码相互通信,就必须就各类数据的通用表示形式达成一致。这称为应用程序二进制接口(ABI)。但在实践中,各种语言并未达成一致。通常,如果要让一种语言编写的代码与另一种语言编写的代码通信,就得由开发人员坐下来,仔细而艰难地编写代码,在两种语言之间进行转换。这不仅要求开发人员深入了解两种语言的工作原理,而且极易出错。一些语言生态系统已经开发出能够自动完成这项工作的工具,但即便如此,也仅支持部分语言。

值得庆幸的是,组件模型为所有语言定义了一种通用数据形式,称为规范 ABI。为了便于使用,还提供了一种名为WebAssembly Interface Types(简称WIT)的接口定义语言,用于描述组件接口。

WIT的世界

现在,我们已经有了这些组件,但如何判断它们可以用在哪里?毕竟,WebAssembly可以在许多环境中运行,包括Web浏览器、服务器、边缘和微型设备等,而这些环境的能力各不相同。WIT为我们引入了世界这一概念。世界是组件所遵循的接口,由一组组件可导入的函数和一组组件导出的函数组成。借助世界,我们可以较为轻松地分析组件及其组合方式。下面定义了一个位于`wasi:cli/command`世界中的组件,该世界描述了在终端命令行中运行的组件:

来源:https://github.com/WebAssembly/wasi-cli,为简洁起见略有修改

此组件负责处理文件系统和随机数等内容,同时提供输入和输出流。更重要的是,它提供了一个在调用命令时运行的函数。

任何人都可以定义世界(world),目前已有多个处于标准化流程中的世界,适用于能够处理HTTP请求、访问USB设备、使用AI模型等功能的组件,未来还会有更多。宿主环境可以声明其实现的世界,方便开发者了解哪些组件可以正常运行。由于组件可以组合,因此也可以基于其他世界实现某些世界,并将这两个组件组合起来。例如,假设宿主环境实现了套接字世界,而某个组件需要在HTTP世界中发起HTTP请求,则可以编写一个使用套接字实现HTTP世界的适配器组件:

只需简单组合,您的组件无需任何修改即可在套接字环境中运行!由此可实现丰富多样的应用。

展望未来

组件模型意义重大,不仅对WebAssembly如此,对全球所有开发者亦是如此。它将从根本上改变开发者思考和开发软件的方式。组件模型已经展现出丰富的实用价值,而这一切仍处于早期阶段。请持续关注WebAssembly生态系统的最新进展。随着采用率不断提升,我们有望看到越来越多引人注目的用例涌现。

分享

相关博客文章

SOAS 2025:目标不一致,结果难出色
F5生态系统 | 2025/05/13

SOAS 2025:目标不一致,结果难出色

AI部署缺乏协调会导致效率低下。了解如何协调安全、自动化和部署策略,充分释放AI潜力。

AI应用的应用交付与安全:驾驭现代AI架构
F5生态系统 | 2024/08/22

AI应用的应用交付与安全:驾驭现代AI架构

了解生成式AI应用和API安全如何塑造现代应用交付与安全。

借助多云网络简化超级云
F5生态系统 | 2023/09/13

借助多云网络简化超级云

超级云不只是一个流行词。它代表着一种简化愿景,以多云网络为起点,支持跨云提供商的混合IT。

2023年应用策略现状:成本与复杂性是推动多云网络发展的首要因素
F5生态系统 | 2023/03/15

2023年应用策略现状:成本与复杂性是推动多云网络发展的首要因素

多云网络解决方案可在核心、云和边缘环境之间实现无缝、安全的互联,为解决当今混合IT面临的挑战提供支持,因而备受业界关注。

运营演进的必要性
F5生态系统 | 2022/01/11

运营演进的必要性

在数字化成为默认模式的世界中,运维仍然过度依赖人工方式,需要不断演进,才能支持自适应应用。这一演进要求整个IT体系进行重大变革,并具备由AI赋能的自适应能力,以保持可用性、优化性能并保障安全。

多云并非简单使用多个云:让跨云衔接更轻松
F5生态系统 | 2021/10/07

多云并非简单使用多个云:让跨云衔接更轻松

随着企业转向互联云战略,工作负载的管理和保护变得日益复杂。了解F5如何满足市场对多云网络新方法的需求。