WebAssembly正逐渐成为FaaS的主力

相信很多人都知道PaaS(平台即服务)和IaaS(基础设施即服务)。而随着云计算时代的发展,逐渐出现了大量的XaaS形式的概念,这些技术从原先的硬件服务器,虚拟化服务,再到容器化逐渐转变。使得软件发布的成本越来越少,服务资源的利用率越来越高。现如今,我们大多数开发者们都一定知道Docker和Kubernates这两个容器管理软件的代表。最近较为关注CNCFBytecode Alliance,我看到一篇《Serverless Open-Source Frameworks: OpenFaaS, Knative, & more》和WasmEdge相关的新闻。于是,想聊聊WebAssembly和FaaS的定义和关系。

什么是FaaS?

FaaS(全称:Function as a Service),功能即服务,也正是众所周知的Serverless computing(无服务器运算),一种云计算服务。它允许您执行代码以响应事件,而无需通常与构建和启动微服务应用程序相关的复杂基础设施。Serverless并不是说没有服务器参与,它通过将复杂的服务器架构透明化,使开发者专注于“要做什么”,从而强调了减少开发者对服务器等计算资源的关注、工作粒度从服务器切换到任务的思想。由此可以看出,资源的颗粒度正在逐渐细化。而AWS和Azure都推出过各自的Serverless服务,例如 AWS LambdaAzure 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。

虽然这个技术的确提高了浏览器执行运算的性能,但是很长时间都始终无法找到一个合适的运用场景。

  1. 游戏公司一般只用游戏引擎和OpenCL(或Vulkan)进行集成,专门优化3D渲染和场景特效。这是WebGL做不到的。
  2. 云计算的发展使得后端的算力不断加强,而数据带宽也从MBps到达TBps,系统数据都集中在云服务上。这也使得wasm的优化成了鸡肋。
  3. 移动端扩张速度很快,谷歌虽然放弃了chrome extensions的市场,但是他又提出了PWA的技术,这样也让HTML5的技术门槛下降不少,移动端的开发者们对于wasm的热情也就淡下许多。

而 Bytecode Alliance 的成立却打破了这片“寂静”。他们根据 Node.js 的经验,将 wasm 从前端开发转向了全栈开发。他们开发了一整套 WASI,并提供了WasmtimeCraneliftlucetWAMR 等项目。而 Wasmerwapm 的出现也使得 WebAssembly 正重新回到所有开发者的视野。

WasmEdge来了, DockerCRI-O慌了?

WasmEdge runtime (曾名 SSVM)是一个轻量级高性能 WebAssembly (WASM) 虚拟机,为边缘进行了优化。WasmEdge 可以应用于 severless 云函数、SaaS、区块链智能合约、物联网、汽车实时软件应用等多种场景。他也是首次实现将 Webassembly 做成 OCI 容器,似乎正打破容器时代——楚汉争霸的格局。但我们也需要知道的是 WebAssembly 主要在浏览器里普及率高,但在服务器端普及率低,这是因为在服务器端它的调度能力不强,缺乏 DevOps 的解决方案。目前是需要自身去管理进程,管理资源分配。所以能够把 WebAssembly 和 Kubernetes 结合起来,是一个非常前沿的领域。所以 DockerCRI-O目前仍然是两大容器规制的标准。

而且容器主要以虚拟library boundary环境为主,提供比FaaS更高的层级——CaaS。这也使得WebAssembly不能直接抢占Docker和CRI的云计算市场。因为Docker和Kubernates的生态都非常健壮。但是我认为 WebAssembly 正逐渐成为 FaaS 的主力。因为WebAssembly早已在前端拥有大量的技术支撑,而在后端正一步步地与各种语言开发库进行结合。这也会促成FaaS的发展方向更趋向于去中心化和分布式系统的发展。而这样的发展需求也可以从华为和苹果都提出搞一体化产业生态可以看出,但是这一切都需要我们开发者们不断地学习和思考,才能一起去逐步实现!

posted @ 2021-07-29 16:25  DisonTangor  阅读(1222)  评论(0编辑  收藏  举报