用“Rust+Wasm”写前端真香,已经成为了圈内的大众话题,甚至在2018年,Rust重点发展目标之一就是建立针对便于开发WebAssembly的生态工具。那么5年过去了,这门有望取代JavaScript的语言,究竟需要如何发展,创建者发话了:向Java学习!
【资料图】
作者丨 B. Cameron Gain
译者丨千山
很难相信,自从2001年互联网泡沫破灭以来,已经过去了20多年。每当科技处于周期性下行轨道时,它仍然是潜在厄运的前兆。我清楚地记得,在2001年经济崩盘后不久,我曾和一些IT领域的失业者、待业者一起,整天无所事事地闲逛。
某天,在纽约的一个公园里,我的一个朋友坐在公园的长椅上敲着他的笔记本电脑,他说有一个非常酷的网站创建工具叫Java。
实际上,时间已经过去很久了,但我至今记忆犹新。
朋友兴奋地描述着这样的图景:你可以用Java代码编程,并部署在你想要的任何地方,这是多么令人惊叹。这在改变网站用户体验方面发挥了关键作用,尤其是和上世纪90年代相比,彼时还是HTML代码提供网站设计的主要元素。
“当然,为什么不呢,我去看看,”我回应道。
之后就是我们大家都熟知的历史了:不仅在Web开发中,Java在整个IT基础设施中都占据了一席之地。
快进到今天:有一个叫做WebAssembly或Wasm的东西,它提供了非常类似的声明:一次编译,到处运行。它不仅适用于最初创建的Web应用程序,而且适用于跨网络和在CPU上运行的任何东西。
这有没有让你联想到什么?
企业管理协会(EMA)的分析师Torsten Volk评论道:“Wasm可能是Java的孙子,它遵循了一脉相承的原则,即允许开发人员在任何设备上运行相同的代码,但与此同时,Wasm还修复了阻止‘在任何设备上运行Java’的初心成真的基本问题。”
1、简单案例
Wasm已被证明在许多不同的硬件环境中非常有效,从服务器端到边缘部署和物联网设备,或者任何代码可以直接在CPU上运行的地方。
代码捆绑在整齐打包的Wasm可执行文件中运行,可以将其与容器甚至迷你操作系统相比较,后者运行时所需的代码和目标配置要少得多(如果有的话)。从本质上讲,无论代码部署在哪里,应用程序都比仅仅局限于Web浏览器环境要远得多。因此,开发人员创建代码并部署它。它真的可以这么简单,尤其是在使用PaaS解决方案时。
Volk指出,最重要的是,Wasm实现了真正的“一次编译,到处运行”功能,即相同的代码可以在任何受支持的设备上运行,而不需要重新编译。
“Wasm不局限于一种开发语言,而是支持Python和许多其他流行语言。开发人员可以在服务器和其他设备的共享环境中运行他们的代码,而不必担心底层的Kubernetes集群或虚拟机管理程序,”Volk说。“他们还为他们的微服务接收统一的日志记录和跟踪,开箱即用。与Java相比,这种简化的开发体验是另一个巨大的优势。”
在最近的KubeCon+CloudNativeCon会议上,有人发表了关于使用Wasm取代Kafka以降低时延的演讲。与此同时,Java继续被用于网络应用程序,尽管替代方案可以提供更好的性能,但开发人员仍然在使用它,因为他们只是喜欢使用Java。由此推断,即使Wasm的运行时性能不是很好,开发人员仍然可能仅仅因为使用简单而采用它。
“Wasm的一大优点是,开发人员很容易上手,只需部署一些代码并立即观察其运行即可。这种价值主张可能需要一段时间才能完全理解,可是一旦你迷上了,你就不想再担心底层基础设施的里里外外了,”Volk说。“然后你可以决定是否有必要替换Kafka,或者你只是想把它连接到你的Wasm应用程序上。”
Java的整个“一次编译,到处运行”的承诺与WebAssembly非常相似,Fermyon Technologies的首席执行官兼联合创始人Matt Butcher提到:“事实上,Luke (注:Luke Wagner是WebAssembly的初作者)曾经告诉我,他认为Java是20年的有用研究,构成了如何编写下一代(例如Wasm)的基础。”
2、还是不一样
Java和Wasm之间有一个关键区别:它们的安全态势。
它的可移植性和一致性可以使安全性和合规性更易于管理(同样,它在 CPU 级别以二进制格式运行)。此外,Wasm结构的简单性意味着代码在封闭的沙盒环境中发布,几乎直接发布到端点。Java(以及 .NET)的默认安全状态是“信任它正在运行的代码”,而Java授予代码对文件系统、环境、进程和网络的访问权限。
“相比之下,Wasm的默认安全状态是不信任在语言运行时中运行的代码。对于Fermyon(以云和边缘为中心)来说,这是使Wasm成为云服务的良好候选的关键特性,”Butcher指出。
因为它与容器和虚拟机采取的安全态势相同。这使得我们作为云供应商可以向用户销售服务,而无需审查或批准用户的代码。
换句话说,在使用分布式容器化和微服务环境时,需要担心的攻击点数量呈指数级增长。Volk同意Matt的评估,因为依靠零信任原则允许基于相同技术的多租户,如mTLS和jwt,这些技术已经用于在Kubernetes上运行的应用程序容器。
“这使得Wasm很容易在共享环境中安全地试用,这应该会降低入门的初始障碍,”Volk说。
Java和Wasm之间的另一个巨大区别是Java需要JVM并且不需要额外的资源,比如垃圾收集器,InfinyOn的首席技术官Sehyo Chang如是说。
“另一方面,Wasm非常接近底层CPU,不需要GC或其他繁重的粘合逻辑,”Chang说。“这使得Wasm能够在非常低功耗的CPU上运行,适合在嵌入式设备或物联网传感器中运行。”
3、结语
很多人认为Wasm的未来就在于能在浏览器之外运行它。正如Matt Butcher所说,Wasm像虚拟机和容器一样,能够在云中运行,这才是真正令人兴奋的地方。
虽然Wasm还很年轻,但它提供的种种可能性已经非常有吸引力。凭借着与浏览器高度匹配的各种特性,Wasm在浏览器之外更有种“海阔任鱼跃、天高任鸟飞”的意味。终有一日,Wasm会发展出更美好的未来图景。
原文链接:https://thenewstack.io/javas-history-could-point-the-way-for-webassembly/