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的发展方向更趋向于去中心化和分布式系统的发展。而这样的发展需求也可以从华为和苹果都提出搞一体化产业生态可以看出,但是这一切都需要我们开发者们不断地学习和思考,才能一起去逐步实现!
WebAssembly正逐渐成为FaaS的主力的更多相关文章
- WebAssembly 介绍
http://blog.csdn.net/zhangzq86/article/details/61195685 WebAssembly 的出现是不是意味着 Javascript 要完? https:/ ...
- WebAssembly,Web的新时代
在浏览器之争中,Chrome凭借JavaScript的卓越性能取得了市场主导地位,然而由于javascript的无类型特性,导致其运行时消耗大量的性能做为代价,这也是JavaScript的瓶颈之一.W ...
- 【转】JavaScript 简史
本文来自众成翻译.JavaScript 毋庸置疑是当今最重要的语言之一.Web 的兴起已经把 JavaScript 带到一个前所未有的地步.下面我们来看看 JavaScript 在其短短历史中是如何演 ...
- (函数即服务)Faas的现状与未来
刚看到jolestar一位从法律转行程序员的前辈写了一篇Faas现状与未来的文章,里面很多观点都很有启发,或许正如他说的那样,由于Faas能较好的解决资源利用率和开发效率问题,2018年Faas将变得 ...
- How Javascript works (Javascript工作原理) (六) WebAssembly 对比 JavaScript 及其使用场景
个人总结: 1.webassembly简介:WebAssembly是一种用于开发网络应用的高效,底层的字节码.允许在网络应用中使用除JavaScript的语言以外的语言(比如C,C++,Rust及其他 ...
- WebAssembly学习(四):AssemblyScript - 结构体系与内置函数
一.结构体系 1.编译 编译器的结构相对保守. 提供源文件,其文本被标记化并解析为抽象语法树. 这里执行语法级检查. 一旦解析了所有引用的源文件,就构造一个程序并从AST初始化. 在这里进行合理性检查 ...
- 正睿OI国庆DAY2:图论专题
正睿OI国庆DAY2:图论专题 dfs/例题 判断无向图之间是否存在至少三条点不相交的简单路径 一个想法是最大流(后来说可以做,但是是多项式时间做法 旁边GavinZheng神仙在谈最小生成树 陈主力 ...
- 荷畔微风 - 在函数计算FunctionCompute中使用WebAssembly
WebAssembly 是一种新的W3C规范,无需插件可以在所有现代浏览器中实现近乎原生代码的性能.同时由于 WebAssembly 运行在轻量级的沙箱虚拟机上,在安全.可移植性上比原生进程更加具备优 ...
- 春节前“摸鱼”指南——SCA命令行工具助你快速构建FaaS服务
春节将至,身在公司的你是不是已经完全丧失了工作的斗志? 但俗话说得好:"只要心中有沙,办公室也能是马尔代夫." 职场人如何才能做到最大效能地带薪"摸鱼",成为了 ...
随机推荐
- 解决使用Git找不到.ssh文件夹的办法
解决使用Git找不到.ssh文件夹的办法 首先生成git密钥 git config --global user.name "你的名字(最好是中文全名)" git config -- ...
- 从Vehicle-ReId到AI换脸,应有尽有,解你所惑
最近在做视频搜索的技术调研,已经初步有了一些成果输出,算法准确性还可以接受,基本达到了调研的预期.现将该技术调研过程中涉及到的内容总结一篇文章分享出来,内容比较多,初看起来可能关系不大,但是如果接触面 ...
- 【NX二次开发】三点画圆,三角形外心,已知三点求圆心
已知P1.P2.P3,求点O 算法:三点不在一条直线上时,通过连接任意两点,作中垂线.任意两条中垂线的交点是圆心.
- UF_CSYS 坐标系操作
Open C UF_CSYS_ask_csys_info 获取WCS坐标系的原点坐标和矩阵标识UF_CSYS_ask_matrix_of_object 获得对象 ...
- 『动善时』JMeter基础 — 48、使用JMeter自身代理录制测试脚本
目录 1.测试计划内包含的元件 2.HTTP代理服务器的设置内容 3.设置浏览器的代理服务器 4.录制脚本 5.查看录制的脚本 6.HTTP代理服务器的排除模式 7.保存脚本 录制脚本只不过是我们日常 ...
- Java小工具类
计时器(秒表),计算程序运行时间用的 public class Stopwatch { private static long startTime=0; private static long end ...
- 17、mysql主从同步Last_IO_Errno错误代码说明
登录mysql从库:mysql> show slave status\G; Last_IO_Errno:1005:创建表失败 1006:创建数据库失败 1007:数据库已存在,创建数据库失败 1 ...
- 题解 P5327 [ZJOI2019]语言
P5327 [ZJOI2019]语言 解题思路 暴力 首先讲一下我垃圾的 40pts 的暴力(其他 dalao 都是 60pts 起步): 当然评测机快的话(比如 LOJ 的),可以卡过 3,4 个点 ...
- 精尽Spring Boot源码分析 - 配置加载
该系列文章是笔者在学习 Spring Boot 过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring Boot 源码分析 GitHub 地址 进行阅读 Sprin ...
- Solon 1.5.11 发布,增加国际化插件
Solon 是一个轻量的Java基础开发框架.强调,克制 + 简洁 + 开放的原则:力求,更小.更快.更自由的体验.支持:RPC.REST API.MVC.Job.Micro service.WebS ...