相信很多人都知道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的发展方向更趋向于去中心化和分布式系统的发展。而这样的发展需求也可以从华为和苹果都提出搞一体化产业生态可以看出,但是这一切都需要我们开发者们不断地学习和思考,才能一起去逐步实现!

WebAssembly正逐渐成为FaaS的主力的更多相关文章

  1. WebAssembly 介绍

    http://blog.csdn.net/zhangzq86/article/details/61195685 WebAssembly 的出现是不是意味着 Javascript 要完? https:/ ...

  2. WebAssembly,Web的新时代

    在浏览器之争中,Chrome凭借JavaScript的卓越性能取得了市场主导地位,然而由于javascript的无类型特性,导致其运行时消耗大量的性能做为代价,这也是JavaScript的瓶颈之一.W ...

  3. 【转】JavaScript 简史

    本文来自众成翻译.JavaScript 毋庸置疑是当今最重要的语言之一.Web 的兴起已经把 JavaScript 带到一个前所未有的地步.下面我们来看看 JavaScript 在其短短历史中是如何演 ...

  4. (函数即服务)Faas的现状与未来

    刚看到jolestar一位从法律转行程序员的前辈写了一篇Faas现状与未来的文章,里面很多观点都很有启发,或许正如他说的那样,由于Faas能较好的解决资源利用率和开发效率问题,2018年Faas将变得 ...

  5. How Javascript works (Javascript工作原理) (六) WebAssembly 对比 JavaScript 及其使用场景

    个人总结: 1.webassembly简介:WebAssembly是一种用于开发网络应用的高效,底层的字节码.允许在网络应用中使用除JavaScript的语言以外的语言(比如C,C++,Rust及其他 ...

  6. WebAssembly学习(四):AssemblyScript - 结构体系与内置函数

    一.结构体系 1.编译 编译器的结构相对保守. 提供源文件,其文本被标记化并解析为抽象语法树. 这里执行语法级检查. 一旦解析了所有引用的源文件,就构造一个程序并从AST初始化. 在这里进行合理性检查 ...

  7. 正睿OI国庆DAY2:图论专题

    正睿OI国庆DAY2:图论专题 dfs/例题 判断无向图之间是否存在至少三条点不相交的简单路径 一个想法是最大流(后来说可以做,但是是多项式时间做法 旁边GavinZheng神仙在谈最小生成树 陈主力 ...

  8. 荷畔微风 - 在函数计算FunctionCompute中使用WebAssembly

    WebAssembly 是一种新的W3C规范,无需插件可以在所有现代浏览器中实现近乎原生代码的性能.同时由于 WebAssembly 运行在轻量级的沙箱虚拟机上,在安全.可移植性上比原生进程更加具备优 ...

  9. 春节前“摸鱼”指南——SCA命令行工具助你快速构建FaaS服务

    春节将至,身在公司的你是不是已经完全丧失了工作的斗志? 但俗话说得好:"只要心中有沙,办公室也能是马尔代夫." 职场人如何才能做到最大效能地带薪"摸鱼",成为了 ...

随机推荐

  1. 【NX二次开发】修改dlx对话框标题的方法

    修改dlx名称, 修改对话框标题的方法: theDialog->TopBlock()->FindBlock("Dialog")->GetProperties()- ...

  2. 由一次PasswordBox密码绑定引发的疑问 ---> WPF中的附加属性的定义,以及使用。

    1,前几天学习一个项目的时候,遇到了PasswordBox这个控件,由于这个控件的Password属性,不是依赖属性,所以不能和ViewModel层进行数据绑定. 2,但是要实现前后端彻底的分离,就需 ...

  3. 【模拟8.11】将军令(贪心&&树形DP)

    只看45分的话,是树形DP....(当然也有能拿到70分+的大佬) 40分: 只考虑k==1的情况,树形DP 所以每个节点可能被父亲,自己,儿子控制 设f[MAXN][3],0表示儿子,1表示自己,2 ...

  4. 小白学k8s(8)-Bazel部署go应用

    Bazel使用了解 Bazel产生的背景 什么是Bazel 快(Fast) 可伸缩(scalable) 跨语言(multi-language) 可扩展(extensible) Bazel中的主要文件 ...

  5. .Net EF Core千万级数据实践

    .Net 开发中操作数据库EF一直是我的首选,工作和学习也一直在使用.EF一定程度的提高了开发速度,开发人员专注业务,不用编写sql.方便的同时也产生了一直被人诟病的一个问题性能低下. EF Core ...

  6. ceph-csi源码分析(6)-rbd driver-nodeserver分析(下)

    更多 ceph-csi 其他源码分析,请查看下面这篇博文:kubernetes ceph-csi分析目录导航 ceph-csi源码分析(6)-rbd driver-nodeserver分析(下) 当c ...

  7. 1、centos7修改网卡名称为传统的eth0

    [root@localhost ~]# cd /etc/sysconfig/network-scripts/ [root@localhost network-scripts]#mv ifcfg-ens ...

  8. Docker搭建zabbix+grafana监控系统

    一.准备工作 1.mysql数据库:192.168.1.5 2.nginx服务:192.168.1.10 3.docker服务器:192.168.1.20 4.zabbix客户端若干 二.docker ...

  9. CentOS-Docker搭建Nextcloud

    下载镜像 $ docker pull nextcloud 运行镜像 $ docker run -d --restart=unless-stopped --name nextcloud -v /home ...

  10. GIS坐标系测绘原理:大地水准面/基准面/参考椭球体/EPSG/SRI/WKT

    预热文章系列:<GIS历史概述与WebGis应用开发技术浅解>.<GIS坐标系:WGS84,GCJ02,BD09,火星坐标,大地坐标等解析说与转换>.<OGC标准WMTS ...