从浏览器内的角度来看,Wasm 最近的开发工作,理所当然地受到了广泛好评。在上一篇文章《只需5分钟,教你如何编写并执行一个 Rust WebAssembly 程序》,我们对 Rust 到 Wasm 的编译以及简单的浏览器内 Wasm 执行的案例做了演示。
在另外一篇文章《区块链、硬件与面向服务的架构,WASM 即将迎来大爆发?》,里面有绝佳的浏览器内的 WASM 应用程序示例,并辅以了对WebAssembly(Wasm)的详细解释。
浏览器之外
Wasm 不仅仅是浏览器的字节码。 Wasm 有着前所未有的强大的可移植性、高效率和灵活性。因此,我们现在可以做到,以多种不同语言编写浏览器内 Wasm 应用程序,发展到在所有设备上分发 Wasm 独立功能单元,在这一点上取得飞跃。
Wasm 执行环境可以包括最少的 shell、移动设备、台式机和物联网设备。Wasm 可能会推动从微芯片乃至整个数据中心,这所有一切的发展(Webassembly.org,2019)。
为什么跨越浏览器很重要?
当连接到现代 Web 服务时,我们并非仅仅与一台机器进行交互,而是持续和后台可能数千台机器进行交互( Arpaci-Dusseau 和Arpaci-Dusseau,2018 )。
网站越复杂,运营成本就越高。散布在分布式系统上的微服务需要尽最大可能做到简单、高效和可靠。对于 Facebook、Google 这种大公司来说,这些特性意味着可以节省大量能耗,进而节省成本,促成积极成果。
除了这些能轻易做到的,我们还应该积极试验,以找到方法来改善 Wasm 最终用户/消费者体验。 eBay 就是一个很好的例子。
利用 Wasm,eBay 最近很好地完善了其移动条形码扫描仪的实现,恰到好处地为客户提供了最优服务( Tech.ebayinc.com,2019)。
为什么选 Wasm?
首先我们需要了解下“抽象化”。
虽然操作系统抽象化对于构建分布式系统来说是一个糟糕的选择,但编程语言抽象化却更具意义。 (阿帕奇-杜索和阿帕奇-杜索,2018)。Wasm 作为从一开始就使用形式语义设计的第一种主流编程语言,进一步地提供了对现代硬件的抽象化的支持(Rossberg等,2018)。
Wasm 允许在最大量的源代码语言中编写和共享每个单个功能的逻辑。Wasm符合我们熟知的最佳软件原则和惯例(DRY 和 KISS),并提供了必要时在所有设备之间转换可执行代码的方法。
为什么要进行远程过程调用(Remote Procedure Call)?
从进程间通信(IPC)角度来看,最主要的抽象化是基于远程程序调用(Remote Procedure Call)的概念,简称 RPC。(Arpaci-Dusseau和Arpaci-Dusseau,2018)。
要实现这种分布式机器之间普遍存在的互操作性,需要具备允许任何应用程序(以任何语言编写)直接从任何其他分布式机器调用服务的功能,就好像它只是调用自己的本地对象一样。 这正是远程过程调用 (RPC) 技术所实现的。
本文的目标是使用 Wasm 和 RPC 在 web 上执行与语言无关的通用代码。
在下一节中,会讲解如何:
- 编写自定义的 Rust 代码并编译为 Wasm
- 设置 RPC 服务器
- 在 RPC 服务器上定义自定义服务
- 安装 Wasm 虚拟机(WAVM)
- 通过 HTTP Post(即Curl,Python等)远程执行自定义 WebAssembly(Wasm)代码