【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

多领域试水,WebAssembly 距离大规模应用还有多远?

  • 2022-07-12
  • 本文字数:5494 字

    阅读完需:约 18 分钟

多领域试水,WebAssembly 距离大规模应用还有多远?

采访嘉宾 | 于航

编辑 | 闫园园

 

2021 年 6 月 21 日,Scott Logic 发布了 2021 年 WebAssembly (以下简称 Wasm)用户报告。报告中显示 69% 的受访者认为 Wasm 将对未来的 Web 开发产生非常大的影响,同时受访者还预计 Wasm 将会对不同应用领域产生重要影响。



不难看出,作为一项相对年轻的技术,Wasm 本身还是吸引了不少眼球。但另一方面,也有开发者注意到,虽然 Wasm 目前在多个领域都有相应的落地实践,但距离大规模应用还是有一定差距。甚至,还有部分开发者提出 “ Wasm 的声音在这两年渐渐弱了”,那么究竟这门技术的现状如何?今年 Wasm 2.0 草案的发布是否会对其发展有所推动?展望未来 Wasm 的前景又是怎样?带着这些问题,InfoQ 采访了 PayPal Staff Engineer 、《 深入浅出 WebAssembly 》的作者于航。

快速发展中的 Wasm

 

在开始探讨 Wasm 现状之前,我们先来回顾下它的历史。

 

众所周知,当年 Brendan Eich 大神只用了 10 天时间便发明出了 JavaScript ,随后这门语言便一路蹿红,并且一直到现在 JavaScript 仍是互联网技术领域里最流行的编程语言之一。不过,即便如此,这门语言还是存在其自身的短板,其中,变量的动态类型就经常被大家诟病,虽然这也是它简单易用的原因之一,但相较于静态类型语言而言,这一点确实会带来额外的运行时性能开销。

 

因此,为了提升 Web 应用的性能,Wasm 应运而生,2015 年 Mozilla 在 asm.js 的基础上发布了 Wasm。不过,Wasm 的出现绝不是要成为一门新的编程语言,正如其官方定义提到,WebAssembly(缩写为 Wasm)是一种基于堆栈式虚拟机的二进制指令集。Wasm 被设计成为一种编程语言的可移植编译目标,并且可以通过将其部署在各类环境中(浏览器、k8s 等),以便为客户端及服务端应用程序提供服务。

 

  • 新的指令格式:本质上是一种虚拟 ISA,它基于堆栈式虚拟机的执行方式设计。同样的一段指令可以在二进制与文本两种格式之间互相转换。其中,文本格式被存放在以 .wat 结尾的文件中,其内部以 “S-表达式” 的形式组织各指令之间的具体执行顺序。二进制格式被存放在以 .wasm 结尾的文件中,该文件可以直接被浏览器、虚拟机等 Wasm 引擎解析和使用;

  • 可移植编译目标:由于 Wasm 指令被设计为在虚拟机上执行,因此无论操作系统和其所在的具体硬件指令集架构如何,它都可以在各种设备上运行。并且,作为编译目标,人们通常首先使用高级静态语言来编写相应的功能逻辑,然后再经由 Emscripten 等编译器来将这些高级语言源代码编译为对应的 Wasm 指令代码。


以上就是 Wasm 的诞生以及它的定义,“当下 Wasm 仍然处在快速发展的过程当中,截至其目前发展历史来看,其中有两个年份是比较关键的”,于航总结道:

 

第一个关键年份是 2017 年。2017 年 2 月,四大浏览器(Firefox、Chrome、Edge 和 Webkit)在 Wasm MVP(最小可用版本) 标准的设计上达成共识,“这是一个很好的现象,说明大家对 Wasm 这项技术的潜在价值是认可的”;2017 年 8 月,WebAssembly Working Group(以下简称 WWG) 成立,Wasm 正式成为 W3C 众多技术标准中的一员;2017 年末,Mozilla 宣布四大浏览器(引擎)完全支持 Wasm MVP 版本的特性。可以看到,2017 年 Wasm 发展很快,“这时候,大家看到了一种趋势,就是 Wasm 可能会对目前的 Web 技术格局产生影响”。

 

第二个关键年份是 2019 年。2019 年 3 月,Docker 创始人 Solomon Hykes 在 Twitter 上说了一段话,大概意思为“如果 WASM 和 WASI 早在 2008 年就存在,那么我们就不需要创建 Docker”。此话一出,在社区产生了非常大的反响,“这一次,Wasm 的潜在价值从 Web 逐渐开始向 out-of-web 的其他领域,比如云原生、AI 以及区块链等领域开始传播”;2019 年 12 月,W3C 宣布 Wasm 成为第 4 种 Web 语言,同时 Wasm 1.0 标准正式落地;也是在这一年,由个人和公司组成的团体——字节码联盟(Bytecode Alliance)也宣告成立,联盟旨在通过协作的方式,来共同实现 Wasm 及 WASI 相关标准,并通过提出新标准的方式来共同打造 Wasm 在浏览器之外的未来。“我们常见的一些 Wasm 虚拟机,比如 Wasmtime、Lucet 等也都是由他们负责设计和研发的。”

 

总结来看,在这两个关键年份集中发生了一些意义重大的事情,对这门技术的发展起到了重要的推动作用。

 

到了 2020 年和 2021 年,Wasm 本身标准方面并没有出现比较大的动作,或许也是由于此,导致部分开发者认为“ Wasm 渐渐没了声音”。不过,据于航介绍,其实在 2020 年和 2021 年 ,Wasm 本身也是在不断完善和发展中的:

 

在 Wasm 1.0 标准基础上,各类围绕 Wasm 的基础工具不断涌现,浏览器和基础设施加快了 Wasm 标准的实现速度。“这里有个改变值得关注,开发者的聚焦点开始逐渐从标准本身移向了 Wasm 在工业界的实践和应用。”

 

另外,WWG 也在不断推进 Wasm 2.0 相关特性的设计和落地,在此过程中,官方研究人员开始更多地去思考这门技术和开发者之间的关系。例如,对于开发者来说,Wasm 最初的官方文档比较晦涩难读,意识到这个问题之后,WWG 进行了相关调整和优化。“可以看出,Wasm 官方也逐步开始从关注技术本身转而去关注它的推广和应用。”

 

最后到了今年,Wasm 2.0 草案正式发布,包括很多处于 Phase 3 的提案也正在被实现。总体而言,最近这几年并没有像前几年一样,有看似特别重要的节点,但就一门新技术来说,它自身的发展仍然是在持续有序地进行的。“各类浏览器厂商也正以超预期的速度去整合那些试验性的 Wasm 特性,从中大家也可以看到它们在这门技术上的赌注”。

 

Wasm 应用现状:多点试水

 

回顾这门技术的整体发展脉络,与 Java、C++ 等历经几十年磨砺的技术相比,Wasm 还是比较年轻的,不过,这门技术本身受关注度颇高,也从侧面反映出它还是具有潜力的。目前,也已在多个领域有相应的落地,本次采访中,于航按照类别为大家进行了盘点:

 

  • 多媒体方面。由于在多媒体中包含的图像编解码等过程大都需要大量数学运算,因此像视频解码 ogv.js、Photon 引擎等开源库和应用都在其设计实现中使用了 Wasm 来加速 Web 上媒体资源软解码的速度:通过配合 Wasm 虚拟机本身的高性能,再结合多线程以及 SIMD 等技术,解码速度相较之前单纯使用 JavaScript 有着巨大的提升;除此之外,借助 Wasm 这样一种中间格式,以往用 C/C++ 编写的众多算法编解码库也都可以相对简单地被用在 Web 应用中。“多媒体可以说是目前凸显 Wasm 在 Web 平台上价值的最为重要的一类应用。”

  • 编程语言方面。自 Wasm 出现后,诸多新兴编程语言在设计之初就将它作为编译目标,比如 Walt、Grain 等。

  • Web 框架领域方面。众多基于 Wasm 的试验性框架出现,比如可以使用 Rust 构建前端应用的框架 Yew 和 Seed;可以使用 Go 构建前端应用的框架 Vecty 等等。“虽然这些框架处在不断发展中,但受限于目前 Wasm 字节码中还无法直接操作 DOM 这一问题,所以,它们的可用性还有待观察。”于航补充道。

  • 与仿真器相关的一系列应用方面,如 WasmBoy、Pinky 等等。这类应用主要依赖于 Wasm 的高性能,可以使得仿真器以较高的效率来在 Web 上模拟对应平台 ISA 指令的执行。

 

除了在浏览器内部的应用之外,Wasm 在浏览器之外的应用场景也很多:

 

  • 云原生领域,有 Krustlet、Embly、Kubeless 等。其中,Krustlet 使得 Kubernetes 可以支持调度 Wasm 类型的 Kubelet;Embly 和 Kubeless 则是两个基于 Wasm 的 Serverless 框架。

  • 游戏引擎领域,大家非常熟悉的 Unity 和 Unreal Engine 尝试用 Wasm 技术将大型 3D 游戏移植到 Web 端。同时,Ammo.js、Defold 等一些基于 Wasm 构建的新兴游戏开发引擎也陆续出现。

 

不仅在上述“热点”领域,Wasm 还在物联网、操作系统、AI、密码学等领域均有相应的落地实践,同时作为技术设施的编译器和虚拟机应用也比较常见。不过于航也表示,这些领域的实践更多是一种“有限”实践,换句话说,本质上还没有为该领域做出突出贡献。

 

所以,目前来看 Wasm 应用试水的领域还是很广泛的,但距离大规模的应用还有一定的距离,那么是否是这门技术本身存在一定的局限性呢?对此,于航认为眼下的应用现状与技术本身其实并无直接关系,具体原因还需要从不同角度来分析:

 

一方面,还是在于大部分互联网公司对于新技术的采用是非常谨慎的,并且通常情况下,不会轻易改变自己原有的技术栈。个中缘由不难理解,老的技术栈由于发展时间较长,遇到问题可以相对轻松地找到对应解决方案,“即使在技术性能上稍微有些损耗,但这些损耗往往可以通过简单地横向扩展就得以解决,简单来讲就是用钱就可以解决。”

 

同时,对于互联网公司来说,采用新技术则需要考虑多方面因素:第一,团队现有人员的技术栈是否可以以较低成本使用这个新技术;第二,新技术的采用对现有组织架构的影响;第三,采用新技术带来的价值是否能够抵消它带来的潜在风险等等。

 

在这种背景下,对大多数公司来说,现阶段对 Wasm 还是持有一个相对谨慎的态度,更多的先尝试将其用在相对较小、较初期的业务中。

 

解读 Wasm 2.0 草案

 

今年 4 月, Wasm 2.0 草案正式发布,虽然作为一个草案,它不一定会得到 W3C 及其成员的认可,甚至随时可能被其他文件更新、替换或弃用,但技术本身自带的热度还是使得这份草案关注度颇高。相比 Wasm 1.0,Wasm 2.0 草案中加入了很多值得关注的新特性,比如引用类型(Reference Types)、固定宽度的 SIMD(Fixed-width SIMD)、批量内存操作(Bulk Memory Operations) 等等。这里,于航也为大家详细解读了 2.0 草案:

 

  • 引用类型(Reference Types)增加了新的名为 externref 的类型,它可用于直接引用宿主环境中的值。并且,新增加的如 ref.func、table.set 等指令很大程度上增加了 Wasm VM 与宿主环境的互操作性,为后续的 Exception Handling 和 GC 提案做了铺垫。



  • 固定宽度的 SIMD(Fixed-width SIMD) 提案为 Wasm 提供了固定 128 位的 SIMD 支持。这使得在处理一些特殊场景时,Wasm 可以利用向量化的能力,在一个指令下完成多个结果的计算过程。

  • 批量内存操作(Bulk Memory Operations)提案提供了用于优化 memcpy 与 memset 这两个常用的内存操作函数的指令,新增加的 memory.copy 指令可以更加高效地操作内存。

 

同时,本次草案中,大家还会关注到仍有一些在讨论中的提案,包括:分支提示(Branch Hinting)、尾部调用优化(Tail Call)、异常处理(Exception Handling)、线程功能(Threads)、宽松 SIMD(Relaxed SIMD)等等。于航提到,他对这些新提案还是相当期待的,因为这些特性可以继续优化 WebAssembly 在各个场景中的使用体验。展开来说:

 

  • 分支提示(Branch Hinting)、线程功能(Threads)、宽松 SIMD(Relaxed SIMD)、尾部调用优化(Tail Call)都是为了提升 Wasm 字节码在特定情况下的执行性能,最终为了尽可能地让 Wasm 的执行效率能够最大化。

  • 异常处理(Exception Handling)是为了解决支持异常处理的源语言在编译到 Wasm 时,对异常处理的兼容性问题。

 

“本次草案的发布,更多的是为下一步 GC 等复杂提案的实现打下坚实基础,”于航谈到,他认为就现阶段来看,2.0 草案的发布不会改变语言的写法,甚至对于对于上层用户来说,可能不会有太大感知,但是这次草案的最大意义正是为后续 Wasm 体验的改进做了很多铺垫,“大部分人可能会觉得这几个提案无关痛痒,但本质上它们是后续几个大提案实现的重要前提”。

 

Wasm 前景如何?

 

回到开头,在 2021 年 Wasm 用户报告中,不少开发者曾预计 Wasm 将会对 Web 开发以及不同应用领域产生重大影响。那么经过上述分析到底 Wasm 的前景如何呢?本次采访的最后,于航谈到判断 Wasm 的前景的话还需要大家持续关注以下两个方面:

 

第一,官方提案的进度。对于开发者来说,可以每周或者每个月去跟进 GitHub 上相关提案的推进进度,如果这些提案在不断推进,意味着对于这门技术是个很好的迹象,“至少能够说明 Working Group 作为一个核心的官方团队,是重视这个事情的。”

 

第二,基础设施厂商的实现进度。毕竟对于 Wasm 厂商和基础设施厂商来说,如果它们愿意花更多精力来实现 Working group 新的提案,前提一定是看好这门技术的,也能从侧面说明 Wasm 的发展前景。

 

“大家可能会担心,觉得现阶段看不到 Wasm 的更多落地,但我觉得落地还是要关注加入 WWG 的大公司的实践情况。”于航谈到,不过,也可以预见的是,随着这门技术标准和相关生态的逐渐完善,参与制定的互联网领头公司,比如 Google 等势必会率先在自己的业务场景中采用 Wasm 这门技术,届时,在这些巨头的影响下,没有直接参与标准制定的公司或者规模较小的公司也会逐渐将 Wasm 进行落地实践。

 

嘉宾介绍:

 

于航

PayPal Staff Engineer

 

曾先后在 Tapatalk、饿了么等国内外企业工作。目前在 PayPal 负责 “Compliance Insights” 相关的技术研发和管理工作。曾多次作为 QConGMTC、TLC 等技术大会的优秀讲师、优秀出品人。2018 年底出版名为《深入浅出 WebAssembly》的国内第一本 Wasm 技术书籍,随后陆续推出了《深入 C 语言与程序运行原理》等多个在线技术专栏。个人擅长的主要技术领域为:Web 前端基础架构、Wasm、C/C++ 系统软件设计与开发、X86-64 汇编等。同时也擅长演讲、跨团队协作及中小型技术团队管理。


若对更多关于 WebAssembly 的实践感兴趣,QCon 全球软件开发大会(北京站)「玩转 WebAssembly」专场,将从前后端等多重视角探讨 WebAssembly 的落地进展,帮你用上、用好 WebAssembly。此外,大会还设置了研发效能、前端新基建、前端前沿技术、业务架构、Rust 实战等共计 30 个专题,大会具体日程已上线,扫描二维码了解更多。感兴趣的同学可以直接联系票务经理:17310043226(微信同电话)



2022-07-12 11:588457

评论

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

Python实现KNN算法

TiAmo

算法 决策 KNN算法

破防了!阿里大佬DDD(领域驱动设计)不破不立,GitHub直接霸榜

Java你猿哥

Java 领域驱动设计 DDD ssm 领域驱动

Mac版PS2023 24.5 大更新,新增4大AI功能,看完忍不住换了!

Rose

PS2023最新版 PS支持AI功能 Photoshop破解

跨平台开发的优势:ReactNative与小程序容器

没有用户名丶

CleanMyMac闪退怎么办?解决CleanMyMac X闪退

魔仙苹果mac堡

mac系统清理优化软件 CleanMyMac下载 CleanMyMac闪退 CleanMyMac最新版

实用自定义 Mac Dock 的隐藏终端命令

Rose

Mac Dock 自定义Dock

基于Spring Boot+VUE Java小程序商城项目(附源码),接私活利器

Java你猿哥

Java 小程序 源码 Spring Boot Vue

史上最全MySQL各种锁详解

Java你猿哥

MySQL 乐观锁 悲观锁 事务/行级锁

基于数据驱动 U-Net 模型的大气污染物扩散快速预测,提升计算速度近6000倍

飞桨PaddlePaddle

人工智能 深度学习 百度飞桨

揭秘!为何阿里P8亲身经历撰写的架构师核心笔记竟如此成功

Java你猿哥

Java 领域驱动设计 软件架构 架构师 分布式架构

科兴未来|深圳创新创业大赛开始啦!

科兴未来News

企业 深圳 #双创赛事# 新能源行业 深创赛

Parallels使用到期怎么办?PD17虚拟机无限试用版安装教程

Rose

Parallels Desktop 17下载 Parallels到期 PD17虚拟机 PD无限试用版

2023年互联网Java工程师高级面试八股文汇总(1260道题目附解析)

Java你猿哥

MySQL redis Spring Boot mybatis 多线程

你了解LED显示屏的安装方式吗?

Dylan

安装 LED LED显示屏

软件测试 | 应用程序签名机制实现的源代码分析

测吧(北京)科技有限公司

测试

IDEA 终端命令行设置

Andy

终极指南!Terraform的进阶技巧

SEAL安全

IaC Terraform 5月 企业号 5 月 PK 榜

StampedLock:高并发场景下一种比读写锁更快的锁

华为云开发者联盟

开发 华为云 华为云开发者联盟 企业号 5 月 PK 榜

mac专业矢量绘图设计Sketchv96.3中文激活版

魔仙苹果mac堡

Sketch中文版 Sketch最新版 Sketch破解 Mac矢量图设计

从2000ms缩短到50ms,亿级ES数据搜索性能调优实践

Java你猿哥

Java elasticsearch ELK ssm ES

万众瞩目的Nautilus Chain即将上线主网,生态正式起航

西柚子

DMG镜像制作软件:DMG Canvas 激活版

真大的脸盆

Mac Mac 软件 镜像文件制作工具 镜像文件管理

OpenHarmony 3.2 Release新特性解读之驱动HCS

OpenHarmony开发者

OpenHarmony

软件测试 | 软件开发的几个阶段

测吧(北京)科技有限公司

测试

Hazel for Mac(自动化清理软件)v5.2.2激活版

Rose

Mac清理软件 Hazel 下载 Hazel Mac版 自动化文件管理工具

RocketMQ 顺序消费机制

Java你猿哥

Java RocketMQ 获取 topic等信息 ssm

简洁高效:Java代码中If-Else结构的优化实践与技巧

xfgg

Java 代码优化

Mac电脑Photoshop 2023 Beta版完美解锁!打字生成图像,Ai绘图功能版!

魔仙苹果mac堡

Ps最新版下载 Photoshop2023破解 Ai绘图

软件测试 | 测试贯穿整个项目流程

测吧(北京)科技有限公司

测试

Mac电脑怎么删除VMware Fusion虚拟机系统,vmware fusion如何删除虚拟机

Rose

VMware Fusion虚拟机 Mac虚拟机 删除虚拟机教程 Win系统

MySQL踩坑笔记,加了唯一索引还会出现重复数据?

Java你猿哥

Java MySQL sql ssm 索引

多领域试水,WebAssembly 距离大规模应用还有多远?_大前端_闫园园_InfoQ精选文章