换个角度聊聊FaaS
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的更多相关文章
- WebAssembly正逐渐成为FaaS的主力
相信很多人都知道PaaS(平台即服务)和IaaS(基础设施即服务).而随着云计算时代的发展,逐渐出现了大量的XaaS形式的概念,这些技术从原先的硬件服务器,虚拟化服务,再到容器化逐渐转变.使得软件发布 ...
- 聊聊Unity项目管理的那些事:Git-flow和Unity
0x00 前言 目前所在的团队实行敏捷开发已经有了一段时间了.敏捷开发中重要的一个话题便是如何对项目进行恰当的版本管理.项目从最初使用svn到之后的Git One Track策略再到现在的GitFlo ...
- Mono为何能跨平台?聊聊CIL(MSIL)
前言: 其实小匹夫在U3D的开发中一直对U3D的跨平台能力很好奇.到底是什么原理使得U3D可以跨平台呢?后来发现了Mono的作用,并进一步了解到了CIL的存在.所以,作为一个对Unity3D跨平台能力 ...
- fir.im Weekly - 聊聊 Google 开发者大会
中国互联网的三大错觉:索尼倒闭,诺基亚崛起,谷歌重返中国.12月8日,2016 Google 开发者大会正式发布了Google Developers 中国网站 ,包含了Android Develope ...
- 聊聊asp.net中Web Api的使用
扯淡 随着app应用的崛起,后端服务开发的也越来越多,除了很多优秀的nodejs框架之外,微软当然也会在这个方面提供更便捷的开发方式.这是微软一贯的作风,如果从开发的便捷性来说的话微软是当之无愧的老大 ...
- 没有神话,聊聊decimal的“障眼法”
0x00 前言 在上一篇文章<妥协与取舍,解构C#中的小数运算>的留言区域有很多朋友都不约而同的说道了C#中的decimal类型.事实上之前的那篇文章的立意主要在于聊聊使用二进制的计算机是 ...
- 聊聊 C 语言中的 sizeof 运算
聊聊 sizeof 运算 在这两次的课上,同学们已经学到了数组了.下面几节课,应该就会学习到指针.这个速度的确是很快的. 对于同学们来说,暂时应该也有些概念理解起来可能会比较的吃力. 先说一个概念叫内 ...
- 聊聊 Apache 开源协议
摘要 用一句话概括 Apache License 就是,你可以用这代码,但是如果开源你必须保留我写的声明:你可以改我的代码,但是如果开源你必须写清楚你改了哪些:你可以加新的协议要求,但不能与我所 公布 ...
- 【原】聊聊js代码异常监控
在平时的工作,js报错是比较常见的一个情景,尤其是有一些错误可能我们在本地测试的时候测试不出来,当发布到线上之后才可以发现,如果抢救及时,那还好,假如很晚才发 现,那就可能造成很大的损失了.如果我们前 ...
随机推荐
- vue中路由懒加载实现amd加载文件
一般我们配置路由的时候是import引入: import log from '@/components/login': { path: '/login', component: log , hidde ...
- ip通信第七周
局域网的优点:1.具有较高的数据传输率 2.具有较低的误码率 3.具有较低的时延 4.能进行广播 网桥的基本特征:1.网桥在数据链录层上实现局域网互连 2.网桥能够互连两个采用不同数据链路层协议,不同 ...
- h5跳转
<!doctype html> <html lang="en" style="width:100%; height:100%"> < ...
- flutter 学习零碎知识点01
1.Expanded组件 占满可用空间 -----可以到达类似flex布局中 第一列占用大量空间,所以它必须包装在Expanded widget中. 写死的高度改成Expanded自动撑满屏幕如果还 ...
- Xcode 断点无用,也不打印输出
原来是在main.m里使用了ptrace进行反调试. ptrace是系统用来对运行中的进程进行调试和跟踪的工具,通过ptrace,可以对另一个进程实现调试跟踪.但是里面提供了一个非常有用的参数,就是P ...
- HDU 1754 线段树入门解题报告
---恢复内容开始--- 题意:给定区间,每个人的成绩, Q次询问,求每次询问区间中的最大值 思路:构造线段树 代码: #include<stdio.h> #include<algo ...
- linux centos7磁盘格式化挂载之parted
parted /dev/xvde mklabel gpt //划分为gpt分区 mkpart logical //创建逻辑分区 ext4 //开始大小 537G //结束大小 quit blkid l ...
- 2018-2019 20175232 实验二《Java面向对象程序设计》实验报告
一.实验内容及步骤 1熟练掌握Junit和TDD: TDD(Test Driven Devlopment, 测试驱动开发)我们是该“先写产品代码,然后再写测试代码,通过测试发现了一些Bugs,修改代码 ...
- js常用的400个特效
JavaScript实现可以完全自由拖拽的效果,带三个范例 http://www.sharejs.com/showdetails-501.aspx javascript实现可以自由拖动的树形列 ...
- 读HashMap 源码(jdk11)的见解
如果想系统详细的了解HashMap请移步各大佬博客.这篇文章只是个人的一些见解. 数组+链表 或 数组+红黑树.这种说法感觉有迷惑性. 之前看博客都说 HashMap 的存储是数组+链表(jdk6), ...