写点什么

WebAssembly 在工业领域的巨大机遇

魏东,侯明鹏

  • 2023-03-28
    北京
  • 本文字数:5574 字

    阅读完需:约 18 分钟

WebAssembly在工业领域的巨大机遇

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 是什么?


WebAssembly 最初由谷歌、火狐、微软等浏览器厂商推动,用于为用户提供更高执行性能的 Web 浏览器程序。国际标准组织 W3C 于 2017 年推出 WebAssembly 第一版规范草稿,时至今日 WebAssembly 的发展已经取得令人瞩目的成就,在我们每一个人的电脑、手机、机顶盒中都有 WebAssembly 技术在背后支持。同时 WebAssembly 也超越了浏览器的领域,在云计算、可信计算、网格计算、边缘计算、IoT 以及区块链等众多领域取得的非凡的发展。

 

作为 W3C WebAssembly Community Group 中的一项开放标准,WebAssembly 是为下列目标而诞生的:


  1. 快速、高效、可移植——通过利用常见的硬件能力,同一份 WebAssembly 字节码程序在不同平台上能够以接近本地的速度运行。


  1. 可读、可调试——WebAssembly 是一门低阶语言,但是它确实有一种人类可读的文本格式(其标准的最终版本即将颁布),这样可以通过手工来写代码,看代码以及调试代码。


  1. 安全——WebAssembly 被限制运行在一个安全的沙箱执行环境中。像其他网络代码一样,它遵循浏览器的同源策略和授权策略。


  1. 支持作为多种编程语言的编译目标。目前支持较成熟的语言有 C、C++、Rust、TinyGo、AssemblyScript,业界也在努力让更多语言如 Kotlin, TypeScript、Java 可以编译到 WebAssembly。中国大湾区数字经济研究院的基础软件中心也在以 WebAssembly 为编译目标设计全新的编程语言。

 

字节码联盟(BytecodeAlliance)是推动 WebAssembly 技术发展的一个最活跃业界合作非盈利组织,合作成员包含英特尔、西门子、微软、Fastly、Mozilla,谷歌、亚马逊等企业。字节码联盟提供开源的 WebAssembly 引擎(Runtime)实现,WebAssembly 系统编程接口(WebAssembly System Interface-WASI),WebAssembly 模块接口工具(WIT),组件模型等工具和组件生态的开源项目。字节码联盟的开源地址是https://github.com/bytecodealliance/,它提供两个主要的 WebAssembly 引擎开源项目 wasmtime 和 WAMR。

 

简而言之对于工业等众多领域而言,WebAssembly 的巨大意义在于它提供了一条途径,以使得以各种语言编写的代码都可以以接近原生的速度在 WebAssembly 引擎上运行。由此 WebAssembly 被全美计算机协会编程语言特别兴趣组评为 2021 年度“Programming Languages Software Award”。


为什么是 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 架构、不同操作系统的环境上。工业领域存在如此多的不同设备类型,我们可以说没有比工业领域更欢迎这个关键能力了。


最后我们借用英特尔 WebAssembly 技术专家在 2021 Automotive Linux Summit 上主题为“The Cool Features Of WebAssembly Micro Runtime For IoT And Embedded ”汇报中的如下一页,来做为总结。



WebAssembly 在工业领域的展望


卡耐基梅隆研究人员汇报了与德国博世公司合作的主题为“Giving the Cloud an Edge with WASM”的研究项目,介绍了目前工业制造中的一些痛点(如下图):


  • 每一个工艺阶段都包含若干 FPGA/PLC 执行固定内部循环控制


  • 高层的控制在车间/工厂层级运行,运行在许多不同的操作系统上


  • 设计工作一般在一个非生产现场的办公或实验室环境中进行


  • 补丁和升级经常都需要手工、现场执行,既低效又容易出错



云计算发展今天已经证明大规模计算调度的技术成熟性,工厂实际上也包含海量的、规格各异的计算单元,WebAssembly 可以帮助在工厂内部实现计算资源的统一调度。下图中所示,WebAssembly (WA) 用于运行各种的工业应用,可以按照时延、资源等需要在嵌入式设备、工业 PC 和车间/工厂服务器之间灵活部署与调度。



由此他们开发的银线平台(Silverline Platform),可以将大部分的工业应用程序编译成 WebAssembly,使用 WebAssembly Micro Runtime(WAMR)开源项目作为运行引擎,提供一个统一的管理调度平台。这个系统帮助充分利用已有的硬件计算资源,实现更先进的业务柔性和管理性。

 

Digital Twin Assembly (dtasm)是由西门子开发的一个支持数字孪生、模块式组装的开源项目,也使用了 WebAssembly 模块作为仿真程序的目标格式。每个仿真单元在过程的每一个时间单元格中使用其输入数据执行计算,将结果输出到其输出变量中,作为其当前时间格的输出。该项目定义仿真模块的输入和输出接口定义和二进制接口标准,这样可以由很多个基于 WebAssembly 程序模块的仿真单元可以灵活组装起来,形成链式调用,构建一个复杂的数字孪生系统。

 

在中国尽管还没有许多在工业企业中被应用的公开报告,已经有不少企业在物联网相关领域使用 WebAssembly。小米的工程师在 2021 Wasm Open Day 活动中报告了“WASM & WAMR 在 AIOT 中的实践”,介绍了小米 Vela 物联网操作系统中对 WebAssembly 的支持与应用。阿里巴巴工程师在题为“Waft:基于 WebAssembly 的 AIoT 应用框架实践”的汇报 中介绍了基于 WebAssembly 设计的物联网应用开发框架,提供更加平滑的用户体验。

 

在开发者工具领域,浏览器内的 WebAssembly 技术已经让一些传统的桌面工具迁移到浏览器上,例如 Autodesk 公司已经将传统的 AUTOCAD 软件迁移值浏览器。国内企业三维家自研基于 WebAssembly 的图形引擎,并且在基于云的建模内核之上,融入大数据、AI 人工智能等前沿技术,打造出面向制造业、高 AI 化、一体化的工业软件。

 

在不久的将来,我们可以期望 WebAssembly 在广泛的工业领域成为一个关键性的支撑技术。其中最具有想象的三个主要的领域:


  • 自动化与机器人控制应用:传统 PLC 等编程语言的能力已不足以满足现代以数控机床、视觉控制、自动巡航、工业机器人等为代表的复杂控制场景需要, WebAssembly 可以让更多的编程语言进入控制应用开发,引入更多的语言生态资源。


  • 人工智能的应用:基于 WASI-NN(神经元网络)系统接口,WebAssembly 程序将可以在工业场景的各种不同计算单元中使用人工智能的算法


  • 云边端的统一的集中管理调度平台(Centralized Management Platform):使用统一的编程调试软件(Engineering System)及管理调度平台,易于部署、实施、管理、监控和维护。

如何开始使用 WebAssembly?


现在正是工业领域企业开始使用 WebAssembly 构建解决方案的合适时机。下面提供了一些可用于了解、使用 WebAssembly 的参考链接:


  • https://developer.mozilla.org/zh-CN/docs/WebAssembly:由 Mozilla 开发者网络提供的 WebAssembly 基础介绍


  • https://github.com/WebAssembly/proposals:WebAssembly 规范提案状态


  • https://github.com/WebAssembly/WASI: WebAssembly system interface 规范提案


  • https://github.com/bytecodealliance/wasm-micro-runtime:WebAssembly Micro Runtime 开源项目


作者简介:


魏东,于 1991 年毕业于清华大学电机工程系,获工程学士学位;并分别与 2001 年和 2004 年于美国新泽西理工学院(New Jersey Institute of Technology)获得电气工程的硕士和博士学位。在美国博士毕业后,魏东博士长期从事工业自动化领域的理论及应用研究,取得了一系列在国际上有影响的独创性成果。他是 cyber-resilient ICS 模型的创立者之一,其研究成果的原创性得到学术界和工业界的认可。魏东于 2004 年五月至 2019 年五月在西门子(美国)研究院任科学家,从事工业自动化技术的研究与开发,主要的研究课题包括工业 4.0、可编程逻辑控制器(PLC)、运动控制、工业网络通信及安全。魏东博士于 2020 年入选宁波市镇海区“雄镇英才”高层次人才创业项目计划,并于 9 月来宁波创立浙江清捷智能(Tsing-Jet)科技有限公司。2022 年入选宁波市“甬江引才”计划。目前聚焦于开发基于5G 与边缘计算技术的产品和系统去解决工业互联网在工厂侧的“最后一公里”问题。

 

侯明鹏,男,研究员,博士。就职于北京机科国创轻量化科学研究院有限公司。主要从事先进制造、增材制造和特种设备控制系统的开发和研究工作。获得授权发明专利 3 项;发表论文 5 篇;授权软件著作权 12 项;发布团体标准 2 项;先后主持和参加 863、04 专项、重大专项、北京市科技计划等纵向课题 10 余项。获得省部级奖三项:(1)中国机械工业科学技术奖特等奖(2)中国机械工业科学技术奖一等奖(3)北京市科学技术奖。


参考资料:


1.https://developer.mozilla.org/zh-CN/docs/WebAssembly/Concepts

2.https://www.cs.cmu.edu/~wasm/wasm-research-day-2022.html

3.slides, An end-to-end toolchain for evaluating WebAssembly runtimes for CPS-IoT Use cases, Siemens

4.slides, Giving the Cloud an Edge with WASM, Carnegie Mellon University, Bosch

5.https://github.com/siemens/dtasm, Digital Twin Assembly, Siemens

6.https://ex.chinadaily.com.cn/exchange/partners/82/rss/channel/cn/columns/sz8srm/stories/WS62e4f86aa3101c3ee7ae186f.html

7.http://www.sigplan.org/Awards/Software/

8.https://2021.international.conference.modelica.org/proceedings/papers/Modelica2021session6A_paper3.pdf

9.https://idea.edu.cn/dii.html

10.https://github.com/bytecodealliance/wasm-micro-runtime

11.https://ossalsjp21.sched.com/event/peeL/the-cool-features-of-webassembly-micro-runtime-wamr-for-iot-and-embedded-xin-wang-intel

12.https://github.com/WebAssembly/WASI/issues/443


原文转载自“CAA 会员服务”微信公众号,链接:https://mp.weixin.qq.com/s/Lmmt3_R6-Wkh-JzBapSgJw

2023-03-28 10:557262

评论

发布
暂无评论
发现更多内容

SOA 和微服务有何区别?

江南一点雨

Java 微服务 springboot SOA

从零开始实现一个Promise

helloworld1024fd

JavaScript

醉三皇成为第12届北京国际网络电影展官方指定用酒品牌

联营汇聚

Java高手速成 | Java集合类泛类型

TiAmo

Java 泛型 编程语言、

带你用20张图了解什么是 JVM 运行时数据区

风铃架构日知录

Java 程序员 JVM 码农 内存

ThreadLocal源码解析及实战应用

京东科技开发者

Java 源码 技术 后端 企业号 1 月 PK 榜

实录 | MegEngine 大 Kernel 卷积工程优化实践

MegEngineBot

深度学习 开源 卷积 MegEngine 大 Kernel

那些炫酷的CSS文字效果之诗词《兔》

南城FE

CSS css3 前端 动画

年终盘点丨最受开发者欢迎的文章 TOP20

阿里巴巴云原生

阿里云 云原生

如何使用API Hub 实现一个图片列表

Towify

阿里云开源大数据平台EMR全面升级 性能最高可提升6倍

阿里云大数据AI技术

大数据 云原生 大数据 开源

《隐私计算白皮书(2022年)》概览

京东科技开发者

技术 安全 隐私保护 白皮书 企业号 1 月 PK 榜

全景剖析阿里云容器网络数据链路(一):Flannel

阿里巴巴云原生

阿里云 容器 云原生

简单聊聊Redis中的几种Java客户端,以及它们的优缺点!

程序员小毕

数据库 redis 程序员 面试 后端

Java Netty框架自建DNS代理服务器教程

小小怪下士

Java 程序员 Netty DNS

如何实现发送评论时总数自动加一?

Towify

Rewrite sqllogictest framework in rust

Databend

Spring项目中用了这种解耦模式,经理对我刮目相看

JAVA旭阳

Java spring

安畅携手阿里云共建Landing Zone方案,助力企业上云无忧

云布道师

阿里云

排障定位时间缩短一半, 博睿数据如何赋能青岛住房公积金管理中心

博睿数据

APM AIOPS 智能运维 博睿数据 精选案例

表格集算表高性能原理——怎样实现纯前端百万行数据秒级响应

葡萄城技术团队

前端必会手写面试题合集

helloworld1024fd

JavaScript

一文了解 Go time 包的时间常用操作

陈明勇

Go golang time

Kstry流程编排框架

lykan

软件架构 模块化 流程编排 高并发编程 业务可视化

高级前端常考手写面试题合集

helloworld1024fd

JavaScript

每日一题之Vue的异步更新实现原理是怎样的?

bb_xiaxia1998

Vue

程序员该如何用“高科技”智能地教狗狗上厕所

风铃架构日知录

人工智能 深度学习 程序人生 后端 系统架构

简单谈谈Redis中的几种java客户端以及优缺点!

风铃架构日知录

Java redis 程序员 程序人生 客户端

EMQX+阿里云飞天洛神云网络NLB:MQTT消息亿级并发、千万级吞吐性能达成

EMQ映云科技

阿里云 物联网 IoT mqtt 企业号 1 月 PK 榜

构建并运行 Databend

Databend

databend

Excelize 2.7.0 发布, 2023 年首个更新

xuri

golang GitHub 开源 编程 Excelize

WebAssembly在工业领域的巨大机遇_大前端_InfoQ精选文章