WebAssembly 在服务端的漫长旅程

WebAssembly 在浏览器里已经算是成熟技术了。Figma 用它跑渲染引擎,Google Earth 用它处理地图,AutoCAD 用它把 C++ 代码跑在 Web 上。这些用例已经足够有说服力。

但浏览器内的成熟,并没有自动带来服务端的成熟。过去几年,”WASM 将改变服务端架构”的说法一直在流传,但实际落地情况远比叙事克制。

它到底在服务端做什么

服务端使用 WASM 的核心逻辑是隔离

传统的进程隔离靠操作系统的 namespace 和 cgroup,容器化是这套机制的工程封装。但这套机制的启动开销在毫秒级,内存占用在 MB 级。对于边缘节点的函数计算场景,这个开销太高了。

WASM 运行时(Wasmtime、WASMer、V8 的 Liftoff/TurboFan)可以做到更细粒度的隔离:一个 WASM 模块默认没有任何系统调用权限,不能访问文件系统,不能建立网络连接,除非显式授权。这个”沙箱优先”的设计,理论上比容器的安全边界更清晰。

同时,冷启动时间可以压到微秒级,内存 overhead 更小。对于 serverless 场景,这是有价值的优势。

Cloudflare Workers 是最典型的生产验证:它用 V8 隔离(与 WASM 有交叉但不完全等同)跑用户代码,冷启动时间对用户几乎透明。Fastly Compute 则直接以 Wasmtime 为基础,把 WASM 模块作为 CDN 边缘节点的计算单元。

这两个是目前服务端 WASM 最真实的生产案例,规模也足够大。

WASI:缺失的那块拼图

在浏览器里,WASM 和宿主的交互靠 JavaScript 的胶水代码完成。但在服务端,你总得和操作系统打交道——读文件、建 socket、获取时间。

WASI(WebAssembly System Interface)就是为了解决这个问题。它定义了一套标准的系统接口,让 WASM 模块可以以可移植的方式使用系统能力,同时运行时可以精确控制哪些能力被授权。

WASI 的问题是标准化进展缓慢。WASI Preview 1 已经基本稳定,支持文件系统、时钟、随机数、标准 I/O。但 WASI Preview 2 引入了基于 Component Model 的新架构,与 Preview 1 有较大的接口差异,迁移成本不低。而 Preview 2 真正达到稳定可用,比原来预期的时间晚了将近两年。

这个节奏拖慢了上层生态的建设。工具链(wasmpack、wit-bindgen 等)需要跟着标准走,语言运行时的 WASI 适配也需要跟着更新。Python、Ruby 的 WASM 支持到现在还没有进入可以轻松用于生产的状态。Rust 和 C/C++ 是目前 WASM 工具链成熟度最高的语言,Go 的支持在进步但仍有限制。

和容器的关系:不是替代

“WASM 会取代容器”这个说法在 2020 年前后很流行,现在已经相对冷静了。

Docker 的联合创始人 Solomon Hykes 说过一句话(大意):如果 WASM + WASI 在 2008 年就存在,我们就不需要发明 Docker 了。这句话被广泛引用,但经常被断章取义——它说的是某个特定用例下 WASM 的优越性,不是说 WASM 会替代容器。

两者解决的问题域有交叉但不重合。

容器优势的场景: 现有工程师熟悉 Docker 生态、应用依赖完整的 Linux 系统调用、需要快速迁移现有服务、对冷启动时间不敏感。容器化的工具链(Kubernetes、Helm、镜像仓库)已经相当成熟,迁移成本清晰。

WASM 优势的场景: 对冷启动时间极度敏感(边缘函数计算)、需要在同一个进程里运行不可信的第三方代码(插件系统)、追求更细粒度的能力控制、多语言编译到同一个运行时。

一个值得关注的方向是 WASM 作为插件系统。Envoy Proxy 的 WASM 扩展机制已经进入生产,可以让开发者用任何能编译到 WASM 的语言写 filter,在不重新编译 Envoy 的情况下动态加载。这个用例里,WASM 的沙箱隔离特性非常适合——你可以运行第三方的扩展代码而不担心它影响主进程。类似的场景在数据库扩展、游戏 mod 系统里也在出现。

为什么进展比预期慢

几个结构性原因。

第一是工具链碎片化。 不同语言到 WASM 的编译支持质量参差不齐。生产中大量的代码是 Python、Java、Go——这些语言的 WASM 支持都处于”可以用但有麻烦”的状态,还没有到”顺畅”的程度。

第二是调试体验还差一截。 WASM 的调试工具链在快速发展,Chrome DevTools 对浏览器内 WASM 的 source-map 支持已经比较完整,但在服务端,用 GDB 或 LLDB 调试 WASM 模块的体验还很原始。生产事故的排查难度更高。

第三是生态惯性。 Kubernetes 生态现在极其庞大,工程师熟悉它,工具围绕它建设,云厂商的托管服务基于它。要让一个已经运行良好的行业转向另一套基础设施,需要的不只是技术上的优越性——需要足够大的收益来覆盖迁移成本。边缘计算场景是个切入点,但还不是主战场。

合理的预期

短期内(1-2 年),WASM 在服务端会继续在两个领域深化:边缘函数计算(Cloudflare Workers、Fastly Compute 模式)和插件/扩展系统(Envoy filter、数据库扩展、可信执行环境)。这两个领域的价值已经被验证,会继续发展。

中期内(3-5 年),如果 WASI Component Model 生态成熟、主流语言(特别是 Python 和 Java)的 WASM 工具链显著改善,通用服务端场景的渗透率会提升。但”取代容器”不会发生——两者会共存,各自占据合适的位置。

WASM 的核心价值不是性能,也不是取代某个现有技术,而是一种新的代码分发和隔离原语。它让你可以用统一的格式打包代码,在任何支持 WASM 运行时的地方执行,同时保持细粒度的能力控制。

这个价值是真实的。只是兑现它的时间,比早期鼓吹的要长一些。


进展慢,不等于没有进展。评估一项技术的合理方式,是把它放在正确的时间尺度和使用场景里——而不是用五年前的承诺对比今天的现实,然后得出”它失败了”的结论。


WebAssembly 在服务端的漫长旅程
https://www.krli.org/2026/04/27/WebAssembly-服务端的漫长旅程/
作者
李科燃
发布于
2026年4月27日
许可协议