Serverless/FaaS伴随着k8s的热度增加,也成为了热门话题。相关文章介绍了很多,这里笔者不一一赘述,而是从个人见解上聊聊关于FaaS的架构和意义。

FaaS可能的架构优化

从AppEngine到docker的演变启发

在笔者上学时,云计算刚刚火热,IaaS/PaaS/SaaS的基础概念已经逐渐深入人心。其中PaaS平台的代表形式就是App Engine,其中最知名的当属google的GAE。GAE可以说取得了一定的成功。但是与后来的docker的巨大成功相比,就略逊一筹了。docker中以镜像为代表的标准化交付方式,较之于GAE的源码式交付,可以得到更为灵活和广泛的应用,对使用各种语言和框架开发的应用也更加友好,许多运行环境的问题如依赖等也更容易得到解决。

谈FaaS为什么会谈到这个。主要是因为笔者看到目前的FaaS平台很多都是通过上传源码来进行支持的,比如支持python/java等。这不由得让笔者想起GAE的使用。诚然,这种方式更容易管理和标准化。但是如果考虑到很多应用已经使用不同的语言和框架进行了大量的开发。那么这样的方式很可能也会局限FaaS的应用范围,使得很多应用的迁移成本增加,甚至导致难以迁移。笔者认为,未来的一个可能方式就是参考docker,以镜像的方式进行function的交付。对其输入输出配置等进行规约标准,使得应用的迁移主要关注于架构的调整,而非代码的重构。同时,这样的交付方式也更容易摆脱对于平台或者厂商的依赖,得到更为广泛的支持。

镜像系统的优化

假使都使用镜像来进行交付,那么带来的一个问题就是镜像的种类多样、镜像拉取时间过长的问题。大量的镜像可能会带来一些管理方面的工作。另外,容器的启动时间也会严重依赖于镜像的拉取时间。使得镜像拉取成为需要重点优化的一个过程。

镜像拉取其实主要是两部分,一部分是从镜像仓库中将镜像文件下载下来,另一部分则是将镜像文件进行解压并拷贝到对应层的过程。在内网环境下,前者的速度其实非常快。而由于大量小文件的原因,后者的速度往往会成为实际的镜像拉取瓶颈。以笔者看来,可以考虑将镜像存储直接存储于分布式文件系统中。这样容器启动无需再去拉取镜像,而可以直接启动,将大大缩短容器的启动时间。分布式的镜像存储可以有多种实现方式,这个以后有时间再做专题讨论。

FaaS的调度意义

FaaS的优点如简化运维、提高开发效率等,在许多文章中都已经提到了。这里主要提的是在私有云中,FaaS对于提升数据中心的调度质量,也有巨大的意义。

通过FaaS的改造,应用的运行方式从long running的任务转变成为batch job。在原有的架构中,由于应用的负载难于预测(不确认任务会何时到来),出于安全方面等原因,会导致资源的空置。改造为FaaS后,可以实现资源的随取随用。且由于function的容器拥有计算资源需求较小、延迟不敏感等特点,可以将容器用以充塞各个节点上的资源碎片,加以充分利用。并辅以驱逐系统,可以充分保证业务的资源使用。这样以来,可以提升整个数据中心的资源使用效率,达到节约成本的目的。而且由于FaaS的延迟容忍、时间可控的特性,在调度规划方面也会有很大帮助。

至于FaaS的应用场景,在笔者接触的领域,目前其可以使用的范围较窄,主要集中于图片预处理等环节。以笔者的猜测,在一些延迟交互的领域,如短视频、AI等可能会有更为广阔的前景。

换个角度聊聊FaaS的更多相关文章

  1. WebAssembly正逐渐成为FaaS的主力

    相信很多人都知道PaaS(平台即服务)和IaaS(基础设施即服务).而随着云计算时代的发展,逐渐出现了大量的XaaS形式的概念,这些技术从原先的硬件服务器,虚拟化服务,再到容器化逐渐转变.使得软件发布 ...

  2. 聊聊Unity项目管理的那些事:Git-flow和Unity

    0x00 前言 目前所在的团队实行敏捷开发已经有了一段时间了.敏捷开发中重要的一个话题便是如何对项目进行恰当的版本管理.项目从最初使用svn到之后的Git One Track策略再到现在的GitFlo ...

  3. Mono为何能跨平台?聊聊CIL(MSIL)

    前言: 其实小匹夫在U3D的开发中一直对U3D的跨平台能力很好奇.到底是什么原理使得U3D可以跨平台呢?后来发现了Mono的作用,并进一步了解到了CIL的存在.所以,作为一个对Unity3D跨平台能力 ...

  4. fir.im Weekly - 聊聊 Google 开发者大会

    中国互联网的三大错觉:索尼倒闭,诺基亚崛起,谷歌重返中国.12月8日,2016 Google 开发者大会正式发布了Google Developers 中国网站 ,包含了Android Develope ...

  5. 聊聊asp.net中Web Api的使用

    扯淡 随着app应用的崛起,后端服务开发的也越来越多,除了很多优秀的nodejs框架之外,微软当然也会在这个方面提供更便捷的开发方式.这是微软一贯的作风,如果从开发的便捷性来说的话微软是当之无愧的老大 ...

  6. 没有神话,聊聊decimal的“障眼法”

    0x00 前言 在上一篇文章<妥协与取舍,解构C#中的小数运算>的留言区域有很多朋友都不约而同的说道了C#中的decimal类型.事实上之前的那篇文章的立意主要在于聊聊使用二进制的计算机是 ...

  7. 聊聊 C 语言中的 sizeof 运算

    聊聊 sizeof 运算 在这两次的课上,同学们已经学到了数组了.下面几节课,应该就会学习到指针.这个速度的确是很快的. 对于同学们来说,暂时应该也有些概念理解起来可能会比较的吃力. 先说一个概念叫内 ...

  8. 聊聊 Apache 开源协议

    摘要 用一句话概括 Apache License 就是,你可以用这代码,但是如果开源你必须保留我写的声明:你可以改我的代码,但是如果开源你必须写清楚你改了哪些:你可以加新的协议要求,但不能与我所 公布 ...

  9. 【原】聊聊js代码异常监控

    在平时的工作,js报错是比较常见的一个情景,尤其是有一些错误可能我们在本地测试的时候测试不出来,当发布到线上之后才可以发现,如果抢救及时,那还好,假如很晚才发 现,那就可能造成很大的损失了.如果我们前 ...

随机推荐

  1. 《ABCD组》第一次作业:团队亮相

    ABCD组:团队亮相 项目 内容 这个作业属于哪个课程 http://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nw ...

  2. Ubuntu 安装YouCompleteMe

    目录 材料 1,安装clang 2,安装YCM 使用Vundle安装 手动安装: 3,编译YCM,支持 C-family languages: 4,编辑vimrc YCM git repo https ...

  3. qs.stringify和JSON.stringify()

    var a = {name:'hehe',age:10}; qs.stringify(a) // 'name=hehe&age=10' JSON.stringify(a) // '{" ...

  4. 微信小程序样式旋转

    相关文档:http://www.w3school.com.cn/cssref/pr_transform.asp index.wxss文件 注意:如果是web前端,要注意浏览器的兼容性 .x1{ wid ...

  5. Vue.js中集成summernote

    首先引用summernote样式及js: <!--summernote css --> <link href="${ctxPath}/static/css/summerno ...

  6. 讨论mui 的 mui.init 与 mui.plusReady

    先来看一段代码 (function(m, doc) { mui.plusReady(function(){ var self = plus.webview.currentWebview(); olti ...

  7. Centos7 初始化硬盘分区、挂载

    1.通过命令fdisk-l查看硬盘信息 可以看到有两块硬盘/dev/vda和/dev/vdb,启动vda是系统盘vdb是我们新增的数据盘. 2.执行以下命令,进入fdisk模式,开始对新增数据盘执行分 ...

  8. mac 安装robot framework报错:No matching distribution found for Pywin32

    运行  pip install robotframework-ride  ,出现以下错误 解决办法:修改Python的运行方式,需要32位的python运行 defaults write com.ap ...

  9. 关于最小生成树(并查集)prime和kruskal

    适合对并查集有一定理解的人.  新手可能看不懂吧.... 并查集简单点说就是将相关的2个数字联系起来 比如 房子                      1   2    3   4  5   6 ...

  10. Linux批量结束、杀死进程

    ps aux|grep python|grep -v grep|cut -c 9-15|xargs kill -15 管道符“|”用来隔开两个命令,管道符左边命令的输出会作为管道符右边命令的输入.下面 ...