WebAssembly 正逐渐成为 FaaS 的主力
相信很多人都知道PaaS(平台即服务)和IaaS(基础设施即服务)。而随着云计算时代的发展,逐渐出现了大量的 XaaS 形式的概念,这些技术从原先的硬件服务器,虚拟化服务,再到容器化逐渐转变。使得软件发布的成本越来越少,服务资源的利用率越来越高。现如今,我们大多数开发者们都一定知道 Docker 和 Kubernates 这两个容器管理软件的代表。最近较为关注CNCF和Bytecode Alliance,我看到一篇《Serverless Open-Source Frameworks: OpenFaaS, Knative, & more》和WasmEdge相关的新闻。于是,想聊聊 WebAssembly 和 FaaS 的定义和关系。
什么是 FaaS?
FaaS(全称:Function as a Service),功能即服务,也正是众所周知的 Serverless computing(无服务器运算),一种云计算服务。它允许您执行代码以响应事件,而无需通常与构建和启动微服务应用程序相关的复杂基础设施。Serverless 并不是说没有服务器参与,它通过将复杂的服务器架构透明化,使开发者专注于“要做什么”,从而强调了减少开发者对服务器等计算资源的关注、工作粒度从服务器切换到任务的思想。由此可以看出,资源的颗粒度正在逐渐细化。而 AWS 和 Azure 都推出过各自的 Serverless 服务,例如 AWS Lambda和Azure Functions。

WebAssembly 的发展简史

WebAssembly 这是一个在 2018 年前端和后端非常火的词。Docker 的创始人 Solomon Hykes 曾对此这样评价“如果 2008 年的时候,WASM(WebAssembly)和 WASI(WebAssembly System Interface, WASM 系统接口)这两个东西已经存在了的话,他就没有必要创立 Docker 了。"但是回到最初,JavaScript 随着 Chrome 市场占有率的不断攀升,也与之水涨船高。很多人前端开发者们逐渐倾向于 JS 开发。但是 Mozilla 作为浏览器界的巨轮,他觉得浏览器即使引入 Adobe 的 Flash 或是微软的 Silverlight 都不足以提供更强大的计算性能,于是,Mozilla 内部启动了一个 asm.js 的项目。
其最早发明出来是为了将 C++的转译成 JS,然后在浏览器中运行起来,这样就能把大量现有的 C++代码在浏览器中复用。被转译后的 JS 代码比原生的 JS 代码要慢,Mozilla 的工程师发现一种类型系统,可以让被转译后的 JS 运行得更快,这就是 asm.js。当浏览器的 JavaScript 引擎发现运行的是 asm.js 时,就会跳过语法分析这一步,将其转成汇编语言执行。另外,浏览器还会通过 GPU 调用 WebGL 执行 asm.js,使其运行得更快。同时,其他浏览器厂商发现 asm.js 的运行速度非常快,也把这种优化加入到他们的浏览器引擎中。这仅仅是开始,工程师们仍在持续努力,但是,不是将其他语言编译成 JS,而是一种新的语言,那就是 WebAssembly。
虽然这个技术的确提高了浏览器执行运算的性能,但是很长时间都始终无法找到一个合适的运用场景。
游戏公司一般只用游戏引擎和 OpenCL(或 Vulkan)进行集成,专门优化 3D 渲染和场景特效。这是 WebGL 做不到的。
云计算的发展使得后端的算力不断加强,而数据带宽也从 MBps 到达 TBps,系统数据都集中在云服务上。这也使得 wasm 的优化成了鸡肋。
移动端扩张速度很快,谷歌虽然放弃了 chrome extensions 的市场,但是他又提出了 PWA 的技术,这样也让 HTML5 的技术门槛下降不少,移动端的开发者们对于 wasm 的热情也就淡下许多。

而 Bytecode Alliance 的成立却打破了这片“寂静”。他们根据 Node.js 的经验,将 wasm 从前端开发转向了全栈开发。他们开发了一整套 WASI,并提供了Wasmtime,Cranelift,lucet 和 WAMR 等项目。而 Wasmer 和 wapm 的出现也使得 WebAssembly 正重新回到所有开发者的视野。
WasmEdge
来了, Docker
和CRI-O
慌了?
WasmEdge runtime (曾名 SSVM)是一个轻量级高性能 WebAssembly (WASM) 虚拟机,为边缘进行了优化。WasmEdge 可以应用于 severless 云函数、SaaS、区块链智能合约、物联网、汽车实时软件应用等多种场景。他也是首次实现将 Webassembly 做成 OCI 容器,似乎正打破容器时代——楚汉争霸的格局。但我们也需要知道的是 WebAssembly 主要在浏览器里普及率高,但在服务器端普及率低,这是因为在服务器端它的调度能力不强,缺乏 DevOps 的解决方案。目前是需要自身去管理进程,管理资源分配。所以能够把 WebAssembly 和 Kubernetes 结合起来,是一个非常前沿的领域。所以 Docker
和 CRI-O
目前仍然是两大容器规制的标准。
而且容器主要以虚拟 library boundary 环境为主,提供比 FaaS 更高的层级——CaaS。这也使得 WebAssembly 不能直接抢占 Docker 和 CRI 的云计算市场。因为 Docker 和 Kubernates 的生态都非常健壮。但是我认为 WebAssembly 正逐渐成为 FaaS 的主力。因为 WebAssembly 早已在前端拥有大量的技术支撑,而在后端正一步步地与各种语言开发库进行结合。这也会促成 FaaS 的发展方向更趋向于去中心化和分布式系统的发展。而这样的发展需求也可以从华为和苹果都提出搞一体化产业生态可以看出,但是这一切都需要我们开发者们不断地学习和思考,才能一起去逐步实现!
版权声明: 本文为 InfoQ 作者【DisonTangor】的原创文章。
原文链接:【http://xie.infoq.cn/article/e65991f01a108031bedef8ad6】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论