多领域试水 WebAssembly 距离大规模应用还有多远 (多领域发展)

多领域试水 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 等),以便为客户端及服务端应用程序提供服务。

以上就是 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 还是比较年轻的,不过,这门技术本身受关注度颇高,也从侧面反映出它还是具有潜力的。目前,也已在多个领域有相应的落地,本次采访中,于航按照类别为大家进行了盘点:

除了在浏览器内部的应用之外,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 草案:

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

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

Wasm 前景如何?

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

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

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

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

于航

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

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

声明:本文来自用户分享和网络收集,仅供学习与参考,测试请备份。