如果你在过去几年中与开发人员有过接触,很有可能会在对话中提到“WebAssembly”。WebAssembly(又名Wasm)是一项新兴技术,它有可能从根本上改变软件应用程序的构建和运行方式。大约10年前,我们对容器和Kubernetes(现在已经无处不在的基础设施软件)说过同样的话。这篇文章将强调为什么我们对Wasm感到兴奋,以及我们认为它为新创业公司的创始人提供了机会。
为什么Wasm很重要?
关于Wasm有很多详细的引物,包括这个,所以我们将专注于我们认为最需要注意的东西。Wasm最初旨在提供一种在浏览器中以接近原生性能运行可移植代码的方法,现在在服务器和边缘用例中也变得流行起来。事实上,它的名字现在是一个错误的名称,掩盖了它真正的潜力,因为它的相关性超出了web的范围(它也不是汇编)。基本上,Wasm是一种二进制执行格式和编译目标,其功能类似于一种语言。更重要的是,我们相信,它开启了一种架构和运行云原生应用程序的新方式,具有以下优点:
性能
由于Wasm代码开始时与机器代码非常接近,因此它在浏览器中执行的步骤比它的解释版本JavaScript更少。Wasm还可以用于在服务器端环境中实现更好的性能,最显著的是将启动时间从秒(容器)减少到毫秒。
可移植性
Wasm提供了语言和平台的可移植性,为大多数排名前20的编程语言提供了早期、成熟的支持,包括C、c++、Java、Python和Rust。这使应用程序开发人员更接近“一次编写,到处运行”的愿景(以前的容器提高了可能性,但在一些关键方面也未能实现这一目标)。
安全性
Wasm采用了在沙箱环境中执行的默认否认安全模型,为运行不受信任的代码提供了更强的安全姿态。
考虑到这些好处,Wasm对应用程序的影响似乎是无穷无尽的!但是在我们与开发人员关于Wasm的讨论中,很多讨论都围绕着目前是否以及如何使用Wasm展开。早期的证明点和案例研究为任何新兴技术提供了重要的验证,Wasm也不例外。
如何使用Wasm ?
如今,Wasm已被用于各种应用程序。这里我们重点介绍一个具有代表性的示例,我们将其分为客户端和服务器端用例。
客户端用例
加速web应用
- Figma使用Wasm将加载时间缩短了3倍。它从asm.js迁移到Wasm,是为了更有效地将其用c++编写的渲染引擎编译为可以在浏览器中执行的格式。
- 在1Password,工程团队注意到迁移到Wasm后,表单密集型站点的性能最高提高了39倍。
- Stackblitz是为web开发量身定制的在线IDE的创建者,他利用Wasm来支持其底层操作系统WebContainers,以毫秒为单位实现IDE的启动时间。
在浏览器中运行数据库
postgreswasm和DuckDB-Wasm是开放源代码项目,允许在浏览器中运行事务性和分析性数据库实例。
服务器端用例
容器、无服务器和边缘
- 几个月前,Docker宣布支持Wasm,这允许将Wasm构件部署到Docker中并在Docker中共享。
- Cloudflare和Fastly这样的cdn,以及Netlify和Vercel这样的web应用程序平台,都宣布支持在各自的边缘功能产品中执行Wasm。
- Fermyon是Wasm生态系统中的一家初创公司,正在为Wasm应用构建无服务器的PaaS
用户定义函数和插件
- SingleStore是一个统一的数据引擎,它使用wasmtime运行时构建代码引擎,以支持创建可以在SingleStoreDB上执行的用户定义函数。
- 流数据平台Redpanda使用Wasm引擎创建了数据转换,可以直接在数据流上进行内联转换。
- Suborbital正在为SaaS应用程序的用户提供编写插件的方式,以安全地扩展它们。
Wasm基础设施栈是如何形成的?
为了实现Wasm解锁的无数用例,需要新一代的工具和基础设施。在过去的几年里,我们看到了一个公司生态系统的出现,它们跨越编译器和运行时,在基础设施堆栈的更高级别上提供解决方案。这张市场地图突出了一些正在构建基础设施和工具的公司和开源项目,以使更多的开发人员在他们的应用程序中使用Wasm。
随着Wasm基础设施的构建模块开始固化,我们预计更多的关注将转向构建团队和组织需要开发、测试、调试和监控Wasm应用程序的额外工具。Fermyon、Cosmonic、Suborbital、Wasmer和Dylibso等Wasm初创公司已经在填补其中一些空白方面取得了有希望的进展。
那么,新的Wasm公司的机会在哪里?
尽管Wasm社区内的活动很多,但我们相信至少有两个领域为新公司提供了巨大的机会。
安全
虽然Wasm的默认否认模型可以实现更好的安全性,但人们使用Wasm的方式以及他们可能创建的攻击向量还不清楚。作为一家容器安全公司的前联合创始人,我注意到许多人吹嘘容器相对于虚拟机的安全优势,却发现完全新的安全解决方案(和公司)是必要的,以充分保护容器化应用程序。我预计类似的场景对Wasm来说是非常合理的,这为一套新的云原生安全工具提供了机会。
可观察性
应用程序架构的变化通常也会带来监控性能和操作的新方法。新的解决方案可能从提供更好的Wasm模块可见性开始,包括它们在哪里以及如何执行。基于容器的应用程序的出现导致了测量遥测数据的新方法,类似的东西也可能对Wasm生态系统有意义。
Wasm的下一步是什么?
CNCF最近的一项调查表明,开发人员对采用Wasm越来越兴奋,但Wasm社区仍然需要完成大量工作来推动更广泛的采用。如前所述,需要更好的工具来改善开发人员的体验。此外,必须跨堆栈的多个级别建立新的标准——例如,Web Assembly系统接口和组件模型等活动。语言支持必须继续成熟,开发人员必须更多地意识到Wasm的好处,以推动采用。我们仍然处于Wasm影响的早期阶段,我们的团队很高兴与创始人合作,为下一波云计算浪潮构建基础设施和工具。