换个角度聊聊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报错是比较常见的一个情景,尤其是有一些错误可能我们在本地测试的时候测试不出来,当发布到线上之后才可以发现,如果抢救及时,那还好,假如很晚才发 现,那就可能造成很大的损失了.如果我们前 ...
随机推荐
- python基础知识巩固(os.walk)
python 3 os.walk语法 os.walk() 方法用于通过在目录树种游走输出在目录中的文件名,向上或者向下 os.walk(top,[, topdown=True],[, onerror= ...
- scrapy学习笔记(1)
初探scrapy,发现很多入门教程对应的网址都失效或者改变布局了,走了很多弯路.于是自己摸索做一个笔记. 环境是win10 python3.6(anaconda). 安装 pip install sc ...
- Hint: Fallback method 'public java.lang.String queryUserByIdFallback(java.lang.Long)' must return: User or its subclass
1.错误日志 熔断器添加错误方法返回时,报了一个 error. com.netflix.hystrix.contrib.javanica.exception.FallbackDefinitionExc ...
- oracle树形结构全路径查询
很实用的语法,父子节点通过id与patientId来关联,知道子节点的id,想查出所有的父节点: START WITH ...CONNECT BY ... SELECT T2.ORG_FULLNAME ...
- git reset与git revert的区别
http://alpha-blog.wanglianghome.org/2010/07/30/git-partial-rollback/ reset(版本撤回) 格式 git reset [-q] [ ...
- 【JVM】-NO.113.JVM.1 -【JDK11 HashMap详解-4-resize()】
Style:Mac Series:Java Since:2018-09-10 End:2018-09-10 Total Hours:1 Degree Of Diffculty:5 Degree Of ...
- 白话skynet第二篇:skynet的通信调试pack和sprotol
今天来说说Skynet客户端和服务端网络通信的基础部分. Skynet当前版本.lua是skynet自带的5.3版本. 根据示例,我们可以知道.通信的步骤如下. 客户端按大小端打包成二进制. sock ...
- Oracle游标介绍
Oracle游标使用详解: 游标: 用来查询数据库,获取记录集合(结果集)的指针,我们所说的游标通常是指显式游标,因此从现在起没有特别指明的情况,我们所说的游标都是指显式游标.要在程序中使用游标,必须 ...
- 网络编程之实现server端并发聊天
程序如下: import socketserver class MyServer(socketserver.BaseRequestHandler): #自己定义一个类,继承BaseRequestHan ...
- winsock I/O模型的分析
几种winsock I/O模型的分析 套接字是通信的基础,是支持网络协议数据通信的基本接口.Winsocket 提供了一些有趣的I/O模型,有助于应用程序通过一种“异步”方式,一次对一个或者多个套接字 ...