相信很多人都知道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. css--常见左右盒子高度自适应布局

    前言 前端开发工程师最基础的技能要求是根据 ui 设计稿还原网页,这就缺少不了必要的网页布局,首先看下最近小伙伴问我的一个问题,他说一个网页有左右两个部分,左右两个部分的高度都不固定,要使得右部分的宽 ...

  2. 题解 P3605 [USACO17JAN]Promotion Counting P

    分块\(yyds\) ----关于线段树合并的题我用分块过掉这件事 题目传送门 先说正解 正解当然是线段树合并等一类做法了 至于解析...出门右转题解区第一篇 (就是他让我看不懂,然后用分块打的\(Q ...

  3. EasyExcel随笔

    EasyExcel 注意点 不支持的功能 单个文件的并发写入.读取 读取图片 宏 csv读取 出现 NoSuchMethodException, ClassNotFoundException, NoC ...

  4. 源码学习之noop

    /** * Perform no operation. * Stubbing args to make Flow happy without leaving useless transpiled co ...

  5. Linux网络基础TCP/IP

    1.osi:七层 上三层,主要是用户层面;下四层是实际进行数据传输物理层: 设备之间比特流的传输,物理接口,电气特性等 端口号的作用 通过IP找到服务器,通过端口号找到具体哪个服务.网页服务的端口号是 ...

  6. 利用 V8 深入理解 JavaScript 设计

    JavaScript 代码运行 以大家开发常用的 chrome 浏览器或 Node 举例,我们的 JavaScript 代码是通过 V8 运行的.但 V8 是怎么执行代码的呢?当我们输入 const ...

  7. string转char*/char[]

    转char* 主要有三种方法可以将str转换为char*类型,分别是:data(); c_str(); copy(); 1.data() data()仅返回字符串内容,而不含有结束符'\0' std: ...

  8. 96、linux之rpm包定制

    96.1.rpm包定制介绍: 编译安装软件,优点是可以定制化安装目录.按需开启功能等,缺点是需要查找并实验出适合的编译参数,诸如MySQL之类的软件编译耗时过长. yum安装软件,优点是全自动化安装, ...

  9. jquery combo.select. 下拉选择插件

    演示地址:http://www.dowebok.com/demo/179/index5.html 引入js.css 即可使用,效果如图所示: 这个插件的好处是可以在输入框里面输入数据 自动检索内容. ...

  10. CentOS-GitLab迁移(yum至Docker)

    yum备份迁移Docker版的GitLab 注:确保版本一致 1.yum备份 $ gitlab-rake gitlab:backup:create 2.执行完成后,在/var/opt/gitlab/b ...