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. python中剔除字典重复项,可以使用集合(set)。

    使用集合(set)剔除字典中的重复项(value). 1)具体例子: #甲乙丙丁使用的编程语言programming_languages = { '甲':'java', '乙':'python', ' ...

  2. 刷榜中ASO优化中下载量与评论之间的对应比

    刷榜中ASO优化中下载量与评论之间是怎么样对应,我们都知道,在ASO优化的过程中,ASO优化师在做下载量后的二至三天,都会顺带着做一下评论.这时候问题就来了,下载量与评论的比例关系应该如何确定呢?最近 ...

  3. 常用的 jQuery 事件

    $(document).ready(): $(document).ready() 方法允许我们在文档完全加载完后执行函数. click(): click() 方法是当按钮点击事件被触发时会调用一个函数 ...

  4. Spring+Mybatis 复杂的分组查询

    1.需要的结果数据格式为 { "responseCode": "0000", "responseMsg": null, "data ...

  5. 虚拟机上不了网的 VMware Workstation 与 Device/Credential Guard 不兼容

    VMware Workstation 与 Device/Credential Guard 不兼容   和    虚拟机上不了网的问题  解决方法: VMware Workstation 与 Devic ...

  6. what's the 黑盒测试

    what's the 黑盒测试 黑盒测试是把测试对象看做一个黑盒子,利用黑盒测试法进行动态测试时,需要测试软件产品已经实现的功能是否符合功能设计要求,不需测试软件产品的内部结构和处理过程. 黑盒测试注 ...

  7. python处理Excel - xlrd xlwr openpyxl

    python处理Excel - xlrd xlwr openpyxl 1 xlrd和xlwt Todo: 使用xlrd和xlwt读写Excel文件的方法和示例代码,待续... 参考链接: Creati ...

  8. 详解Java内存区域?虚拟机类加载机制?

    一.Java运行时数据区域 1.程序计数器 “线程私有”的内存,是一个较小的内存空间,它可以看做当前线程所执行的字节码的行号指示器.Java虚拟机规范中唯一一个没有OutOfMemoryError情况 ...

  9. Java课堂测试——一维数组

    题目: 一个典型的流程是: 2. 用户这时候有两个选择2.1  按 单步执行 键, 在 GUI 看到你的程序是如何一步一步算出目前最大子数组的范围,当前计算到的临时子数组是在哪里,等等. 最好用不同的 ...

  10. 微信小程序底部弹窗动画

    第一步,在组件里编写弹窗的代码 <!-- 活动类型弹框 --> <view class='bottomModel' wx:if="{{modelFlag}}" c ...