百度 Serverless 架构揭秘与应用实践


【百度云原生导读】

1. 要作到真正的 Serverless 架构,需同时支持 FaaS 和 BaaS,作到快速上线、高弹性的优点,真正达成降本增效。git

2. 文中提到的函数计算引擎 EasyFaaS 已开源:github.com/baidu/EasyFaaSgithub

 

Distributed Cloud 2021全球分布式云大会·北京站于4月7日召开,在当天下午举办的分布式云报告会上,百度函数计算平台业务负责人史南胜发表了题为《百度Serverless架构揭秘与应用实践》的主题演讲。web

 

如下为演讲概要:算法

 

1. 为何要引入 Serverless?


为何要作 Serverless?Serverless 能给咱们带来什么?为何要引入 Serverless?咱们如今服务化不是作的挺好吗?PaaS 平台不是也作得挺好吗?为何要用 Serverless呢?对于全部的场景都适用降本增效一说吗?史南胜首先站在客户的角度发出了一连串的提问。数据库


金融领域、国有企业这样的领域,对于资源的利用率上不拘小节,没有像中小型客户那样应用资源很是的谨小慎微,因此对于金融领域,或者说一些对资源利用率要求不至于严苛的场景,主要提供人效开发,让开发成本下降。对于中小型客户,尤为是两三我的创业的场景,好比小程序的开发者,须要考虑到他们将产品推向市场的时间,以及业务布局的快速度,推荐他走 Serverless 的场景,这样的场景能够快速的提升他们的开发速度,以及下降运维的成本。小程序


哪些场景合适,哪些场景不合适呢?史南胜表示,Serverless 并非解决方案,并不能短时间内替代掉服务化,或者微服务化的技术,它是在服务化或微服务化发展到必定程度之后,基于容器计算的新技术。常常有客户问,咱们怎么从一个单边应用,或者从一个微服务架构应用迁移到 Serverless 场景呢?并非每一个场景都可以迁移的。因此说须要区分一些场景,将一些合适的场景咱们去探索。后端


史南胜分红三个部分解析这一问题:第一,事件的触发处理;第二,数据处理计算;第三,应用后端服务。缓存


探索和应用的场景主要包含如实时文件处理、图片裁剪添加水印等,这种场景为何适合呢?由于不是时时刻刻都有用户在上传图片,或者不是时时刻刻都有这样的事件在处理,这样的场景是否经过函数计算和 Serverless 场景去解决?还有数据计算场景,好比说像物联网网关和 P2P 里面的计算等,应用后端服务如今大规模使用的是智能小程序的开发,让他们经过 Serverless 的场景快速将本身的技能经过函数计算平台可以快速的开发、上线,将产品推向市场,产生收益。这样的技能又能够在小度音箱上面去产生售卖和调用,在调用支付的时候会给创业者带来必定的收益。安全


哪些场景不太适合呢?像延迟敏感高,对于稳定性级别很高的交易场景、支付场景,还有检索场景,不太推荐在现有的技术发展示状下去使用 Serverless 和函数计算。服务器


那么对于涉及隐私的场景适合用 Serverless 的架构方案去解决吗?在这里经过相应的实践和证实,隐私不是考量 Serverless 架构合适和不合适的一个很重要的因素,由于在任何的场景下都会去确保客户的隐私和数据(安全)问题。对于隐私高的场景,好比像金融领域咱们都会去作私有化的部署。


如今看 Serverless 从广义角度来说,按功能分为 FaaS 和 BaaS ,你们老生常谈的相对来讲是比较狭义的概念,这样狭义的概念指的是 FaaS 上面,就是关注于业务场景的逻辑处理。而对于底层的存储、缓存和对象级别的存储来讲,会依托于云上面的资源,或者自己本身的一些传统在微服务化下面的存储来去处理。


若是要作到真正的 Serverless 的架构方案,须要将 FaaS 和 BaaS 同时支持,这样支持之后才能真正拥有高弹性、高可扩容/可伸缩的优点,才能真正作到降本增效,否则的话 FaaS 流量上来之后,后台的 BaaS 技术若是跟不上,这样的弹性扩缩容是须要受到挑战的。可是今天史南胜主要从狭义的场景来介绍 FaaS 的基础,一般讲 Serverless 场景的时候指的是函数计算。


2. 百度的 Serverless 场景解决方案



为了知足客户和开发者,或者以及百度内部集团所使用的一些场景,百度提供了五个终端级产品对外输出:

  • CFC(Cloud Backend Development):面向公有云和集团内部云产品
  • CFC-Stack:以私有化部署为主的一站式解决方案
  • CFC@Edge:旨在将函数计算能力放在离用户更近的边缘侧,从而提升性能,下降延迟。目前咱们实现了集群版和单机版,用于知足不一样的场景。
  • EasyFaaS:是一个依赖轻、适配性强、资源占用少、无状态且高性能的函数计算服务引擎,目前正式对外开源,地址是https://github.com/baidu/EasyFaaS
  • CBD(Cloud Backend Development):面向开发而设计的平台,好比小程序开发场景


百度通过数年的打磨,在私有化和公有化领域里面,将开源和公有、私有,以及面向百度其余内部云支持的产品打磨成统一的公共的底层函数服务支持,这个可以知足整个函数计算的编写、上线、开发和运营,在大部分场景下可以提供相应的技术支持,而且百度还开发相应的工做链,提供了相应的 SDK 和插件,以及运行时可以供定制化的业务团队作二次开发。



史南胜对百度函数计算的总体架构进行了介绍,基于整个云端实践进行触发,整个函数计算的触发场景包含不少种,此处列举了6种::HTTP服务请求、消息队列、定时任务、BOS存储事件、DuerOS技能、CDN事件。


这些技能触发器均可以以同步或者异步的方式调用函数计算,这样的函数计算遵循 CFC 的租赁格式,并且跟 AWS 进行对标没有障碍。若是有客户在 AWS 上面去作的函数计算,也能够很方便的去作迁移和使用。右侧部分的配置服务,配置服务是离线管控模块,这组模块用来能够支撑代码的管控、包的上传,以及包括相应的原数据的管理。


函数的触发服务是咱们的一个关键录用模块,用来监听事件的请求、权限的管理、资源的调度申请、路由等等,资源的调度服务用来管控整个函数的运行资源池,函数的整个运行资源池是咱们第二大核心部分,函数运行引擎就是刚才的开源重要的代码模块,函数计算引擎提供了咱们在运行代码生命周期的管理。用户的空间会按照咱们在函数代码功能的执行和空间的大小会动态的调配相应的内存 CPU 占用空间。


左侧是作资源的释放,资源池的维护会经过相应的服务模块架构对资源进行管控。资源的调度服务就是用来去响应事件触发服务,对整个资源池的管理。函数计算的核心就是基于事件的处理调度,将用户的代码和函数的核心功能进行动态的加载空间容器,而且进行动态销毁的过程。


史南胜就百度近期开源的一个函数引擎——EasyFaaS 分三部分进行了介绍,这是一个依赖轻、适配性强、资源占用少、无状态且高性能的函数计算服务引擎。

【Github地址】:

https://github.com/baidu/EasyFaaS

 

 

 

 

第一部分是产品功能,EasyFaaS 提供了核心的函数信息管理、代码包管理、版本管理、灰度发布功能,知足了大部分场景下函数计算的核心诉求,用户拿到 EasyFaaS 就能够快速的去搭建一个基于百度函数计算引擎的计算平台,可以知足他在部分的业务场景下定制化的开发。这样的开发经过开源的方式可以让你们提交相应的功能,将这些功能可以共建起来;第二部分是请求控制与容器调度;第三部分是容器与网络技术,进一步将容器的利用资源最大化,而且提供多元的运行池。

 

 

 

 

EasyFaaS 开源的核心请求模式中,函数在请求的时候,冷启动是须要时间的,黄色的图标标识了整个事件请求之后过来的响应过程,能够支持用户本身主动的请求,以及经过云端事件触发的方式,原数据的管理对数据的代码包和信息权限验证进行管控,经过funclet 模块进行二次容器初始化和管控。

EasyFaaS 以单 Pod为最小服务单位,每一个Pod中包含3个容器,分别为 controller、funclet 和 runner-runtime。controller 负责流量调度及容器池状态管理,runtime 是用来加载多语言运行时的一些镜像环境,这些镜像和环境初始化之后它便退出了,因此核心部分是经过 funclet 管控资源,合理的调配函数计算能力。绿色的部分是热启动的,为了考虑在高并发场景下可以支撑业务场景的请求,因此支持热加载的模式,热加载的模式如今能够作到1毫秒之内。

 

3. 百度的 Serverless 场景解决方案


基于这样的核心引擎,能够在哪些地方去落地?又产生了哪些经验和教训呢?史南胜主要举了三个重要的案例场景。


单体应用,或者微服务应用怎么迁入到 Serverless?对于一些场景,好比说小程序场景经过 API 网关的模式,而后调度到百度智能云函数计算处理业务,而且发起相应的业务逻辑去调度相应的后端服务,能够将部分的业务代码迁移到函数计算平台。将原来核心的部分业务逻辑代码仍然以微服务这样的方式放在后端服务里面。若是面对中小型企业客户,原本在云上产生了相应的存储和计算资源,能够继续使用云数据库云缓存的方式使用,百度云上的资源能够一站式打通。


 

在微服务架构领域,服务与服务之间除了 IDC 方式调用之外,函数计算方式能够经过黄色的箭头去发消息,能够支持和集成,能够提早加载到函数计算平台,以镜像的方式进行加载,这个可让包下降不少。因此说消息队列能够监听完之后,百度函数计算的另外一个板块能够进行相应。你们能够将百度函数计算的方式以微服务化的理念来去开发和运做,而且还能够将这样的处理方式上传到云存储上面去。

业务方去处理什么呢?他们只须要聚焦在业务逻辑处理,编写相应的代码,百度的代码和插件层面提供了很好的工具开发,业务方能够在 web id,或者相应的代码 id 上面去开发,开发完了之后经过打包的方式,或者一站式插件集成的方式提交。对于复杂的场景,百度提供了编排方式,只须要编写 Serverless 的压缩文件就能够处理更复杂的分布式的业务处理逻辑。

这是一个比较典型的提供给一些相应的私有客户部署的能力,这个能力是用来作什么呢?是用来作整个大数据的处理,客户聚焦在中间这两部分,就是事件触发器定义和函数计算逻辑的编写。百度支持经过流失数据和批量数据镜像挂载的方式,能够支持 afs,而且能够支持消息队列流式数据的监听,经过这样的方式触发调起函数计算,执行业务,支持业务的逻辑计算,将相应的数据分发到其余的业务部门里面去。

用户基于百度的 Serverless 平台提交代码就能够定义事件、配置信息了,这样带来的好处架构上面的事情交给了平台方去作,业务平台上面的事情交给了业务方去作。

第三个案例,能够经过百度云的函数计算案例体验,这个体验能够给你们包括一些技能的开发者带来不少的一些像公积金的计算,或者天气的查询,史南胜表示本身也经过小程序和 OS 方式同时开发了两个技能,以小程序的方式和 OS 方式发布出来给别人使用,这样的技能能够直接调用天气的方式,好比调用开放接口的墨迹天气本身使用,而且能够将业务逻辑算法集成。这个产生什么收益呢?能够按技能付费,作成三步:云函数建立与自定义、技能建立与绑定技能、运行时请求路由,请求调度的资源统计,以及帐号的挂靠。经过这三步能够迅速的将一个新的家庭小度音箱的智能场景可以快速的链接起来。

除了这些场景,还能够在哪些场景去使用呢?包括应用分发的场景领域,像游戏包,分渠道的打包和运做过程,小程序的开发,以及在集团内部持续的CICD 和搜索图谱,包括百度的搜索阿拉丁卡片,以及在金融领域私有化部署,还有汽车、教育等领域的新技术联动,以及大数据处理,均可以去用函数计算的方式去处理。

 

4. 将来展望与延伸

百度函数计算从此还会围绕哪几个方面去运做呢?Serverless 场景之前你们都处于观望状态,如今开始在小规模场景使用,以后大规模场景使用。


百度函数计算重点是帮助客户转型,仍是围绕降本增效的理念为你们节省资源,而且提供更稳定的服务。在公有化、私有化和开源生态领域,百度会去造成一个组合拳,开源的部分也但愿你们与百度一块儿来来共建。



百度的云原生,除了 Serverless 函数计算,还有容器服务和微服务架构的治理,还有容器调度,以及效率云的 DevOps 的计算。百度在今年申请了一站式的技术栈,欢迎你们一块儿了解一下,不只提供 Serverless 的解决方案,还提供容器、微服务架构治理的解决方案,包括效率上面的解决方案。


近几年,百度在云原生方面得到了一系列的奖项和认证。其中包括:经过了 Kubernetes 一致性认证而且是国内首批 Kubernetes 认证服务提供商(kcsp);生态方面,百度是国内首批 CNCF 黄金会员,屡次高级别的 KubeCon 大会赞助,并参与信通院《云原生应用实践白皮书》、《无服务器架构技术白皮书》等文件撰写;上游贡献方面,百度主导了云原生 AI 工程项目 Paddle EDL;共同主导Kubernetes调度项目 Kube Batch等,百度期待与更多伙伴参与进开源社区的建设。

更多精彩内容欢迎关注百度开发者中心公众号。

相关文章
相关标签/搜索