百度云原生导读:近日,由开放原子开源基金会与Linux基金会联合开源中国发起的GOTC全球开源技术峰会在深圳会展中心召开,百度云原生团队的高级研发工程师何守芬带来了《 EasyFaaS:从一个函数计算单机引擎说起》为主题的演讲,引发了与会者的广泛关注。
此次演讲主要分为三个部分:
1. 为什么要开源 EasyFaaS
2.EasyFaaS 的前世今生
3.未来规划
1. 为什么要开源 EasyFaaS
随着云计算技术演进,Serverless 因其在降低运营成本,提升研发效率方面的优势越来越受到关注。Serverless 技术一般被定义为 FaaS(函数即服务) + BaaS(后端即服务)。百度于2017年开始进行 Serverless 布局,发布了公有云的函数计算产品 CFC,经过3年多的发展,CFC 支撑了公司内网多个业务场景,如小度 Dueros 自定义技能服务,百度小程序等等,同时在私有化领域也展开始露头脚,在金融等领域完成了落地。
为了推广Serverless技术,百度云原生团队于今年4月份开源了一款单机函数计算引擎:EasyFaaS。
何为函数计算?函数计算就是上文中提到的FaaS(Function as a Service),它提供一种基于事件触发的、高可用的、弹性伸缩的、按需使用、按需付费的无服务器云端计算能力。
对于开发者而言,无需再关注物理服务器或者容器资源等等的申请扩容等运维工作,只需要使用自己熟悉的编程语言编写业务代码逻辑成一个个函数,在函数计算平台上配置好相应的触发器即可,比如需要定时执行一个函数,那么配置好定时任务触发器就好,函数计算平台会负责定时触发执行函数任务。
函数计算是事件触发的,按需加载按需付费,因此当用户的函数不使用时,资源被其他用户使用,降低了运营的成本;同时开发者无需关注服务器部署,资源扩容缩容,减少了运维工作;当然研发效率也会极大提升: 函数本身已经是最小的功能粒度,业务将功能拆分成函数会更方便功能迭代。
2. EasyFaaS 的前世今生
2.1 EasyFaaS 的设计初衷
据何守芬介绍,EasyFaaS 来源于百度云原生团队对 CDN 边缘计算的一些业务场景探索。在 CDN 节点上,有很多关于在边缘上基于用户自定义的一些请求的裁剪,视频编解码等这样需要将算力放到边缘的需求,非常适合使用函数计算来满足用户这样的需求。
团队之前在做的时候首先想到的是直接将云上我们已有的函数计算服务部署在边缘,但在调研过程中发现边缘计算场景与云端IDC机房有很大差别,它的集群环境更加复杂,中心与边缘节点之间的通信容易受到网络质量影响,同时公有云上函数计算产品有很多依赖比如ETCD,中心的K8S等服务,中心组件的运维成本比较高,因此团队想要设计适合边缘计算场景的函数计算引擎,拥有适配性强,资源占用少,依赖轻,能是无状态和自治的,因此就有了 EasyFaaS。
EasyFaaS是一款小而美的函数计算引擎,能够很方便使用它构建自己的函数计算平台方案,主要优势包括:
-
降低成本:体现在降低运维成本,资源成本,研发成本上。EasyFaaS支持一键式安装,能够使用Docker/Docker compose/K8S 进行部署;EasyFaaS的核心系统模块只有三个,占用资源少,同时EasyFaaS 的代码都是模块化的,易插拔,易于开发者进行二次开发。
-
提升效能:EasyFaaS是核心函数计算功能集,用户能够很容易使用它构建 Serverless 解决方案;热启动性能能在1ms左右;轻量体现依赖比较少,系统资源占用少;EasyFaaS 也是标准化的,积极拥抱开源遵循社区标准。
2.2 EasyFaaS 的功能及架构优势
在产品功能方面能够支持基本的函数信息管理,代码包管理,版本管理等;请求与资源调度方面支将请求调度到函数实例,并发控制,错误重试等,当然底层还依赖容器与容器技术,如运行时动态挂载,多语言运行时支持等等。
EasyFaaS 的核心组件都部署在 K8S 最小资源单位 pod 中,外侧是一个函数元信息和代码的管理服务。上面的部分是函数调用请求端,可以是直接发起的请求,也可以是云端各种触发器发起的请求。
再来看一下 EasyFaaS 的核心组件,包含2个常驻工作容器,首先是 controller 容器,负责流量转发,并发控制等,其次是 Funclet 容器,主要负责二层工作容器池的维护,包括 warmup 工作容器及回收工作容器;以及 runner-runtime 的容器,它作为一个 init 容器,负责准备工作容器的 rootfs 及多语言运行时 runtime 的准备工作,准备工作完成后该容器就退出。
EasyFaaS 的核心技术,主要体现为:高内聚,高弹性,高性能
高内聚体现在了上文所述的设计要点,不再多赘述;高弹性是指能够动态调整函数实例的容量,动态挂载运行时和代码等相关资源;高性能主要使用了多层缓存机制,预先启动资源池,来降低冷启动的延时问题。
2.3 基于 EasyFaaS 搭建自己的函数计算平台
如何使用EasyFaaS搭建函数计算平台?上图展示一个基于 K8S 集群环境搭建函数计算平台的方案。
首先函数计算服务本身可以通过使用K8S deployment 这种工作负载进行多副本部署,构建函数实例资源池,通过使用 K8S service 在集群内暴露服务;func-registry提供函数元信息及代码的管理,可以替换成更合适的或者已有的存储;当然函数触发服务除了常用的触发器,还可以开发自定义的触发器,满足更多样的触发场景。
用户也可以基于现有函数计算服务之上搭建工作流服务,支持函数编排;作为平台服务本身,可以借助开源已有的解决方案构建平台的公共服务,如日志使用经典ELK,监控使用Peomethus等等。
最上面这里是客户端即控制面数据面的入口,包含控制台,接下来是Gateway,用来做路由等,这里可以用Nginx ingress等等,这样就搭建好了一个函数计算平台服务。
会上,何守芬还介绍了两个在金融行业使用这套函数计算平台的典型应用场景。
一是后端服务SSR的一个场景,解决的痛点是能够提升开发者效率。
第二个是批量任务的场景,解决的痛点是能够高效弹性地使用资源。
3. EasyFaaS 的后续规划
未来 EasyFaaS 会引入一个 gateway ,提供更全的资源池视角,做更全面的资源调度和资源控制;开源一个更高效更快更符合函数触发场景的自动扩缩容组件。
在基于通用云端事件规范的基础之上开源更丰富的通用触发器,满足更多样的触发场景;基于通用函数编排规范支持函数工作流,满足函数编排需求等等。
欢迎广大开发者一起加入,一起打磨 EasyFaaS。
{{m.name}}
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/103776.html