换个角度聊聊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报错是比较常见的一个情景,尤其是有一些错误可能我们在本地测试的时候测试不出来,当发布到线上之后才可以发现,如果抢救及时,那还好,假如很晚才发 现,那就可能造成很大的损失了.如果我们前 ...
随机推荐
- [04-05]box框模型(Box Model)定义了元素框处理元素内容、内边距、边框和外边距的方式
实际占有的宽 = width + 2padding(内边距) + 2border(边框) + 2margin(外边距) 实际占有的高 = height + 2padding + 2border + 2 ...
- ide phpStorm管理远程主机
- 微信小程序样式旋转
相关文档:http://www.w3school.com.cn/cssref/pr_transform.asp index.wxss文件 注意:如果是web前端,要注意浏览器的兼容性 .x1{ wid ...
- Linux协议栈-netfilter-conntrack
原文连接:https://blog.csdn.net/jasonchen_gbd/article/details/44874321?utm_source=blogxgwz8
- VUE-001-在表格单元格(el-table-column)中添加超链接访问
在进行前端网页开发时,通常列表数据我们使用table展示.那么如何在 el-table-column 单元格中使用超链接呢? 如下即是解决方式的一种: 仅需要将如下代码: <el-table-c ...
- 创建一个vue项目()
1.打开cmd,选定路径 2. vue init webpack "项目名称“ 3.在项目路径下,安装一下项目依赖 cnpm install 4.运行 cnpm run dev 5.在浏 ...
- PHP jsonp ajax 跨域 实例
HTML代码 <html> <head> <title>跨域测试</title> <script src="http://code.jq ...
- 动态代理处理service
/* 动态代理处理service * 1.动态代理的核心是切面编程,去除重复代码: * 2.通过反射+注解可以灵活的获取传入对象内容: * 3.通过try+catch将多个操作包裹,实现事物的原子性: ...
- centos修改时区并同步时间
查看服务器时间及所在时区 [root@localhost ~]# date -R Fri, 07 Dec 2018 04:38:28 -0500 修改时区 先使用 tzselect 根据提示选择所在地 ...
- 在C#中,Newtonsoft.Json + dynamic动态解析jsonString,jsonString转实体
记录一下 引用 using Newtonsoft.Json; using Newtonsoft.Json.Linq; var jsonString = "{\"ApiResourc ...