什么是 WebAssembly 及其必要性
1
什么是 WebAssembly
WebAssembly(Wasm)是一种可移植的字节码格式,本身为了解决日益复杂的前端 Web 应用以及有限的 JavaScript 脚本解释性能而诞生的技术,通过该技术可以使用非 JavaScript 编程语言编写代码并且能在浏览器上运行[1]。
随着 Wasm 的发展,现在 Wasm 不仅仅可以用于浏览器,同样可以被应用在 server-side 程序中,它已经被定义为一个可移植、体积小、加载快的一种通用二进制格式。其指令本身并不直接面向程序开发者,而是被设计为其他编程语言(如 Rust、C++、Go)的编译目标,可以在任何具有 Wasm 运行时的平台上运行。
Wasm 在云原生领域的应用生态正在蓬勃发展。Wasm 程序可以像容器一样在云原生环境中运行,帮助开发者轻松地构建和部署应用程序。Wasm 可以提供更高的性能,更快的启动时间,更低的资源消耗,以及更好的可移植性,是除容器外的另一种对计算和资源的抽象方式。因此 Wasm 出身就符合云原生的理念,可以很好地在云上运行。目前围绕 Wasm 相关的云原生相关项目正在涌现。
2
为什么需要 WebAssembly
上层语言无关
其实像 Wasm 这种“编译中间目标 + 跨平台执行”的思想在某些编程语言中已经存在。例如在 Java 语言中,开发者编写的代码被编译为字节码,再由 Java 虚拟机执行字节码。不同的是,Wasm 是一个通用的编译目标,它允许开发者用任何他们熟悉的编程语言(只要支持编译目标为 Wasm,具体请参见支持的语言列表[2])来编写 Wasm 程序,不需要为了开发某个功能而学习一门新的语言。同时,语言无关性意味着 Wasm 解锁了各种上层语言生态的大门,使其开发过程本身就具备灵活便利的特点。
轻量级和高性能
Wasm 能够达到接近原生机器码的运行速度,有着快速的启动时间和很小的空间占用。与 Docker 容器相比,Wasm 及其运行时可以快速执行并且体积非常小,在运行时性能方面,WebAssembly 比 Docker 快 10%-50%;在启动时间方面,Wasm 比 Docker 快约 100 倍[3]。在 serverless 场景中,冷启动是一个困扰已久的问题,而 Wasm 在这方面有着天然的优势,因此 Wasm 被认为是一个解决冷启动问题的高效运行时。
高安全性
Wasm 二进制是在内存安全的隔离沙箱中执行的,它不仅比原生二进制文件更安全,而且比 Docker 这样的 OS 级容器更安全。Wasm 对系统资源的操作必须申请明确的权限[4],拥有权限后通过一系列接口与主机环境通信。通过严格的资源约束控制,Wasm 可以安全可靠地在各种平台上运行。
Wasm 这种良好的隔离性和安全性也使得其非常适合多租户的场景。这种特性正是云计算非常需要的,因此 Wasm 有潜力成为除容器外的另一种计算运行时。
评论