跳到主要内容

WebAssembly 在工业领域的巨大机遇

· 阅读需 8 分钟

注:本文内容引用自https://www.infoq.cn/article/pskeeKXTSbmQa2cauwBh

WebAssembly 是一种新的编码方式,一种虚拟的指令集,具有紧凑的二进制格式,可以以接近原生的性能运行,并被多种语言诸如 C / C ++,Rust,Go,Kotlin 等作为编译目标。

在工业领域,WebAssembly 已经获得学术界和一些大型企业的强烈兴趣,在过去的 2 年中已经涌现一些相关前沿性研究报告与开源项目。

在 2022 年由美国卡耐基梅隆大学举办的一场名为“WebAssembly Research Day”的学术会议中,西门子研究人员作了一个主题为“An end-to-end toolchain for evaluating WebAssembly runtimes for CPS-IoT Use cases”的报告。西门子团队介绍了当前工业界最新的编程语言 WebAssembly 技术在以下方面对他们的巨大意义:

网络物理控制( Cyber Physical Control):传统上,电气控制工程师、计算机软件工程师和通信工程师三组人马分开工作,相对独立。工业化与信息化的两化深度融合在工业控制系统内集成计算、通信和存储等功能,使用 WebAssembly 技术支持计算和控制在网络中自由分布流动,是网络物理控制的极佳的支撑技术,也是电气控制、软件、通信工程师们共同的工具。

广泛的设备支持(Range of supported devices):WebAssembly 的轻量化设计可以支持其在 500K 内存以内的嵌入式设备上轻松工作,也能很好利用 512M 内存的网关和 16G 内存的工业 PC,同时还可以在云端服务器上运行。WebAssembly 程序的跨平台特性,让计算负载可以按需灵活部署。

兼容巨大存量的软件(Legacy Software Support):像西门子这样的大型公司会具有基于 C/C++的海量存量软件,这些软件源码都可以被重新编译到 WebAssembly,部署到各种现代的硬件平台上。工业化与信息化的两化深度融合就是要把用在 IT 的先进技术应用到 OT 领域。WebAssembly 正是这一有力的工具,将在 IT 领域开发出的应用,如人工智能、机器学习、计算机视觉、数据处理、数据存储、数据流处理、以及复杂模型的控制系统等无缝移植到工业领域里。

高性能和一致性(Performance and consistency):西门子对业界主要的开源 WebAssembly 引擎进行了科学全面的测试,确认 WebAssembly 技术在程序运行与计算性能上的优势,其中由英特尔、小米、蚂蚁、亚马逊等公司主导开发 WebAssembly Micro Runtime(WAMR)表现了令人满意的性能。

为什么是 WebAssembly?

和 Java 与.NET 的不同?WebAssembly 是一种同时具有字节码格式和文本格式的计算机程序语言。字节码格式带来了跨平台的关键能力,Java 是由 Sun 最早引入字节码格式的语言,其 class 字节码格式已经帮助 Java 语言取得了巨大成功。微软也为.NET 引入了公共语言运行时 (CLR)的字节码文件格式,成为 Windows 平台主流的程序运行格式。那在工业界为什么是 WebAssembly 呢?

首先,WebAssembly 是 W3C 组织下定义的开放标准,W3C 所创建的标准定义流程保证了万维网(Web)领域互联互通与向后兼容,WebAssembly 的演进是先有规范后有实现,具有充分的向后兼容支持,不会发生剧烈甚至颠覆性的改变。其所有的相关编译器、引擎、工具等都是完全开源的方式在组织开发。在 WebAssembly 技术领域,不存在像甲骨文公司和微软公司对 Java 和.NET 从商标、专利、版权、技术路线等全方位的独家控制。这些特点,对于需要有长时期支持的工业系统来说尤其重要。

其次,支持多种编程语言,尤其是 C/C++。虽然 Java,Kotlin 和 Scala 等语言也都支持编译到 JVM 字节码格式,但与之相比,WebAssembly 是唯一支持 C/C++、Rust 的字节码技术。在工业领域,需要能够重用巨大存量的 C/C++库和软件,Rust 语言因为其内存安全特性,也备受工业界关注。

第三点,内置的隔离能力。Java 和.NET 设计初衷并不包含模块之间的隔离能力。WebAssembly 的设计,让在同一个进程内或者在嵌入式无用户状态环境中执行多个 WebAssembly 程序模块,保证模块之间具有强内存隔离性。同时任何一个 WebAssembly 程序如发生了非法内存访问,将被 WebAssembly 引擎所捕获,不会影响到其他程序的执行。这个特点让 WebAssembly 在 CDN 领域作为微容器,在单个进程内创建许多的 WebAssembly 实例,达到极高的吞吐能力。对于工业领域众多嵌入式设备,这个能力可以帮助分离应用程序和固件的开发,支持嵌入式上的应用后装载和动态更新,甚至为支持第三方应用开发提供了可能。

第四点,超轻量型与高执行性能。参考开源项目 WebAssembly Micro Runtime,其执行一个 WebAssembly 代码所需要的资源可以在 100K 内存之内,同时通过预编译技术,WebAssembly 程序执行速度可以接近甚至超过 GCC 原生编译程序执行的速度。同时 WebAssembly 支持硬件加速计算能力如 SIMD,支持多线程充分利用现代 CPU 多核计算能力,让 WebAssembly 轻松执行 Tensorflow 这样机器学习应用类型的密集计算。

最后,跨平台能力。WebAssembly 和 Java 和.NET 一样具有跨平台能力,同一份二进制文件可以运行在不同 CPU 架构、不同操作系统的环境上。工业领域存在如此多的不同设备类型,我们可以说没有比工业领域更欢迎这个关键能力了。