Web开发

首页 » 常识 » 诊断 » WebAssembly将会取代Dock
TUhjnbcbe - 2024/8/21 16:52:00

出品

开源中国

lola_chen

WebAssembly(Wasm)是由Mozilla、谷歌、微软、苹果等公司合作研发的二进制指令格式语言,最初是为浏览器设计的,具有内存安全、可移植等特性。

年12月5日,W3C正式宣布WebAssembly成为继HTML、CSS和Javascipt之后的第四大标准Web语言。这是WebAssembly在前端的高光时刻。

同样是年,Mozilla、Fastly、Intel与RedHat宣布成立联合组织BytecodeAlliance(字节码联盟),希望通过协作实施标准和提出新标准,以完善WebAssembly在浏览器之外的生态。

随后,WebAssembly在后端走得越来越远。Docker联合创始人SolomonHykes在一条著名tweet里表示,如果Wasm+WASI在年就存在了,就没有必要创建Docker了。

一时喧哗,关于Wasm会不会取代Docker的讨论不在少数,大多观点认为,相比Docker,Wasm的确具有更快更轻等优越性。但实际上,SolomonHykes的这条推文却有后半句没说完(往下看)。

那么,Wasm会取代Docker吗?经过几年发展,WebAssembly又发展到了何种地步?开源中国有幸专访了WasmEdge项目的发起人MichaelYuan,作为全球范围内首个被CNCF纳入托管的开源WebAssemblyruntime项目,WasmEdge在近期发布了WasmEdge0.8.2全新版本,并且还将发布新功能,让K8S能够直接接入。

沿袭Java发展路径

OSCHINA:请自我介绍一下。

Michael:大家好,我叫MichaelYuan,是开源老兵。我并不是计算机专业出身,从本科到博士,我都是学天体物理的。我博士毕业后,就参与到开源的世界。那时候,微软还在将开源视为社会毒瘤。

我从Java开始做起,参与创建了服务端Java公司叫JBoss,这是第一个用开源的方法做Java中间件的公司,也是第一个真正找到商业模式的开源公司。后来JBoss被红帽软件收购了。然后我就一直留在了开源行业。

我现在的身份是CNCF沙箱项目WasmEdge的发起人与Maintainer,同时也是SecondState的创始人,SecondState开发和商业化WebAssembly和Rust生态系统中的企业应用。

OSCHINA:您获得天体物理学博士学位是我们意想不到的,是怎样的契机使您接触到WebAssembly的呢?您见证了WebAssembly怎样的变迁?

Michael:其实当时开源行业的人很多都不是计算机专业毕业的。在那个年代,找不到工作的人才去做开源的。我们做Jboss的时候,公司里有不少物理博士,包括当时的CEO与CTO都是物理博士。

从Java到今天,后端技术的发展就是不停地重新发明轮子(也可以说是“螺旋式上升”)。年轻的开发者总是从前端开始职业生涯,过了一段时间后,曾经是前端的开发转到后端,他们遇到的第一个问题就是这个东西怎么这么复杂?我就要写一个网页再加上数据库,为什么要学习这么复杂的分布式计算框架?所以他们就会重新发明轮子,这在后端的历史上发生了三次。

第一次就是Java。Java以前是为了浏览器发明的。现在,我们已经知道Java完全是一个后端的语言。年左右,也是我当时在JBoss创业的时候,抓住了Java从浏览器端向服务端转变的红利。这个时候,大家对Java的看法是什么呢?和其他后端开发框架相比,Java的优势是简洁和易懂,写的程序安全可移植。

第二次则是JavaScript。到了年,绝大部分新来的开发者对Java的感觉就是太复杂了,于是就有了JavaScript从前端转变成后端,有了Node.js,所以现在大部分后端技术都是用JavaScript开发的。Node.js当时主要的优势是简单,开发效率高。

时间来到年,也是我们创建WasmEdge这个开源项目的时候。这个时候,大家对Node.js的抱怨是太复杂了。npminstall一下,安装几百个安装包,都不知道安装了什么东西。我们看见的新一代开发范式是Serverless与微服务。把每个业务单元做小做简单,解耦业务与基础架构,从而让开发与运维都简化。

也正因为此,目前的“大前端”、Jamstack、“前端的后端”等创新都在大量使用Serverless。而后端的服务网格、云原生,则在使用容器化微服务。Serverless与微服务都需要比Docker更轻更快的安全运行沙盒。WebAssembly开始从前端走向后端。

和Java当年的发展路径很像。JavaApplet最初是为了在浏览器玩游戏,是为了在浏览器内提高性能,但是20年来,有一件事一直没有变过:大家不喜欢在浏览器玩游戏。所以虽然在浏览器市场占有率很高,但是WebAssembly在前端的发展并不成功。我们看不到几个WebAssembly在浏览器的案例,就像我们今天在浏览器看不到几个用Java的程序一样。

但是WebAssembly有一个非常成功的地方。因为浏览器是互联网大厂的游戏,所以要在浏览器里行成标准,必须要有全行业的共识。WebAssembly不但后面有Google、Apple、Mozilla、微软这样的大厂,而且还有W3C这样的组织。

这就造成了WebAssembly可以像当年的Java一样做出一个强大的生态。具体的例子,比如GCC、LLVM等编译器支持把各种高级语言编译成Wasm字节码。这种生态的支持程度,不是任何一个独立的大厂或者组织能够独立做到的。这也是WebAssembly放到服务器端有巨大生命力的原因。

虽然在前端没有现象级的应用,但是WebAssembly实现了标准化。这是别的技术很难去和WebAssembly竞争的地方。所以,WebAssembly有很大前景变成一个通用的计算执行环境或者容器,不仅会放在云端,也会用在边缘设备上。

成为服务网格里的“一等公民”

OSCHINA:WasmEdge0.8.2全新版本有哪些功能更新?跨平台能力提升、增加了golangsdk的支持等,都是WasmEdge在兼容性上所作的努力,是否可以认为WasmEdge目前最紧迫的问题是兼容性问题?

Michael:

WasmEdge0.8.2的功能更新主要是:

更好的跨平台兼容性。开发者可以在MacOSX(Intel和M1)、Windows10以及配备ARM32位芯片的IoT设备上运行WasmEdge应用程序。

Networking支持。WasmEdge应用程序发出网络请求并运行HTTP服务器。

新的以及一些改进的API。在C、Rust和Golang应用程序中嵌入WasmEdge函数。

WasmEdge的AoT编译器的通用二进制输出。利用云原生平台中的AOT性能增进。

支持proxy-wasm标准。

讲到兼容性,其实有两个方面:

一个是WebAssembly里面运行什么,比如能不能运行JavaScript,还是必须依赖编译型的语言(Rust、C/C++、Swift等)。这个我们走的路是全面支持JavaScript与DSL。

另外一个是WebAssembly能够在什么环境里运行。这方面,我们有不同的语言的SDK,比如Golang、C与Rust,支持k8s等等。

所以我不认为这是一个兼容性问题,而是生态问题。虽然WebAssembly在前端进行了标准化,有编译器、浏览器的支持,但是后端毕竟还是有自己的一套生态,还是需要尽快把WebAssembly整合到后端的生态里面去,这是我们今天正在要干的事情。

比如我们正在把WasmEdgeport到seL4上,seL4是一个可以形式化验证的开源实时操作系统RTOS。我们也在WasmEdge里原生支持了TensorFlow框架,开发者可以通过WasmEdge以本地速度调用TensorFlow模型,进行推理。与此同时,我们自己在Crun与Runc的基础上开发了Crunw,让K8s支持WebAssembly。

OSCHINA:让K8s能够直接管理,这代表着什么?

Michael:K8s是管理微服务和服务网格的重要工具,这样就意味着Wasm应用可以在服务网格里成为一等公民,直接用来实现微服务,不需要借助其他工具和框架。微服务和服务网格是Serverless的基础架构,一旦K8s支持Wasm,Wasm在Serverless、微服务领域就会成为一等公民。

有了Crunw之后,WasmEdge能够无缝融入现有的K8s生态。现在有很多基于K8s的产品都在与WasmEdge合作,比如Linkerd、KubeEdge、SuperEdge等。

与Docker并肩而行

OSCHINA:WebAssembly会取代Docker吗?同类型的有哪些?相比而言,WasmEdge的优势在哪?

Michael:在回答这个问题之前,我们先来总结一下目前的容器方案。

FastlyCTOTylerMcMullen最近说了三句话:虚拟机模拟了计算机,容器模拟了操作系统,WebAssembly模拟了进程。这三句话怎么理解呢?我们之前发表过一篇文章,和他想表达的东西有异曲同工之妙。我们把容器分为三层:

第一层是系统级或者是硬件级的虚拟机,比如Hypervisor或MicroVM,会运行操作系统与Runtime软件堆栈;

第二层是应用容器,比如Docker,容器会在运行用户代码前,加载和启动有操作系统的镜像;

第三层是高级语言虚拟机,比如JVM、V8和WebAssembly。WebAseembly只是执行编译好的字节码应用,不起操作系统的作用。

理解了这三个层次,就会理解到WebAssembly是抽象程度最高的,需要的工具链最复杂,但是带来了性能的巨大的提高。

回到WebAssembly能不能取代Docker的问题上,这个说法来自Docker联合创始人SolomonHykes的一个tweet。在那条动态里,他说如果Wasm+WASI在年就存在了,就没有必要创建Docker了,Wasm是云计算的未来。

很多人只看到了这一句话,没有看到他后面补发的内容,他说WebAssembly不会取代Docker,Docker与WebAssembly会肩并肩运行。

在他讲这句话的时候,WebAssembly的K8s生态还没成熟,他这条推特就是在说会在K8s里肩并肩运行WebAssembly与Docker,而这也是我们认为的未来,所以我们有crunw。

所以,WebAssembly与Docker不是一个取代关系。WebAssembly与Docker是各有所长、互相补足的关系,就像之前提到的,WebAssembly对工具链要求比较高,但是WebAssembly的性能高、轻量级、安全的特点会让WebAssembly用在今天Docker进不去的场景。举个具体的例子,WebAssembly在冷启动方面,能够比Docker快倍。所以Docker很难fitin的边缘计算、轻服务、汽车、区块链,都是WebAssembly的用武之地。

OSCHINA:您认为未来的云原生容器会形成怎样的格局?在其中,WebAssembly会占据怎样的地位?WasmEdge会发挥什么样的作用?

Michael:WasmEdge这种新容器的发展是扩展了容器或虚拟化的生态。以前,很多地方有虚拟机化的需求,但是Docker做不进去,或者Docker做得不好,比如Serverless、边缘设备、边缘云。

这些都是有原生虚拟化的场景,但是Docker比较重,比较大,没有办法做到这个场景,所以用WebAssembly能够扩展这个市场。WebAssembly的市场是个增量,并不是要把Docker挤出来。

在AOT模式下,WasmEdge是目前市场上最快的WebAssembly虚拟机。另外,WasmEdge的最大不同之处在于,为了能够让WebAssembly尽快在云原生领域应用,WasmEdge还支持了非标准的扩展,比如KVStore、网络Socket、TensorFlow等扩展,可以说WasmEdge是离场景最近的WebAssemblyRuntime。作为CNCF唯一的WebassemblyRuntime项目,我们希望成为WasmEdge成为云原生和边缘计算的轻量级容器首选。

(WasmEdge架构图)

嘉宾简介:

MichaelYuan毕业于德克萨斯大学奥斯汀分校,获得博士学位。Michael是JBoss的早期员工,被RedHat收购之后,作为产品经理见证了世界上第一个成功的开源商业模式,著有5本国际知名出版社出版的技术书籍。年,Michael发起了WasmEdge项目,提供下一代云原生和边缘计算的执行环境。

1
查看完整版本: WebAssembly将会取代Dock