备受关注的Distributed Cloud|2021全球分布式云大会·北京站于4月7日隆重召开,分布式云是2021年全球十大重要战略科技趋势,利用分布式架构技术创新,连接边缘节点、私有云和公有云的IT资源组成分布式混合云。
全球分布式云联盟力求打造分布式云计算旗舰级技术盛会,本次大会共设有分布式云报告会、边缘计算论坛、Serverless云原生论坛、分布式数据库论坛、分布式存储论坛,跨境SD-WAN咨询会等六大论坛,围绕分布式云、分布式算力、Serverless、云原生、HTAP、IPFS等技术与实践展开。联合阿里云、腾讯云、百度云、金山云等全栈技术引领者与全球分布式云联盟携手打造这场技术饕餮盛宴。
在4月7日下午举办的分布式云报告会上,百度函数计算平台业务负责人 史南胜发表了题为《百度Serverless架构揭秘与应用实践》的主题演讲。
01 为什么引入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场景的时候指的是函数计算。
02 百度的Serverless场景解决方案
百度提供了四个终端产品级的计算,为了满足客户和开发者,或者以及百度内部集团所使用的一些场景,包含CFC,在公有云上面面向中小客户,包括大型客户的部分场景;CFC-Stack主要在私有化领域专有云版统一的技术栈解决方案;CFC边缘计算的场景,主要面向的是用户在加载比较快,对地域要求比较高的一些场景;EasyFaaS是百度的开源产品,这个开源产品是昨天(4月6日)夜里12点钟的时候正好百度审批通过,在百度上有开源源代码,包含了百度在函数计算领域里面的核心引擎的代码部分,欢迎大家也可以跟我们一起共建。第五个解决方案是CBD,这是基于小程序,或者一站式的产品解决方案,可以支持开发者在小程序上面进行云开发、云调用和云存储。
百度经过数年的打磨,在私有化和公有化领域里面,将开源和公有、私有,以及面向百度其他内部云支持的产品打磨成统一的公共的底层函数服务支持,这个能够满足整个函数计算的编写、上线、开发和运营,在大部分场景下能够提供相应的技术支持,并且百度还开发相应的工作链,提供了相应的SDK和插件,以及运行时能够供定制化的业务团队做二次开发。
史南胜对百度函数计算的整体架构进行了介绍,基于整个云端实践进行触发,整个函数计算的触发场景包含很多种,此处列举了6种,包括CDN、BOS、消息通知的触发,以及小度技能的触发,这些技能触发器都可以以同步或者异步的方式调用函数计算,这样的函数计算遵循CFC的租赁格式,而且跟AWS进行对标没有障碍。如果有客户在AWS上面去做的函数计算,也可以很方便的去做迁移和使用。右侧部分的配置服务,配置服务是离线管控模块,这组模块用来可以支撑代码的管控、包的上传,以及包括相应的原数据的管理。
函数的触发服务是我们的一个关键录用模块,用来监听事件的请求、权限的管理、资源的调度申请、路由等等,资源的调度服务用来管控整个函数的运行资源池,函数的整个运行资源池是我们第二大核心部分,函数运行引擎就是刚才的开源重要的代码模块,函数计算引擎提供了我们在运行代码生命周期的管理。用户的空间会按照我们在函数代码功能的执行和空间的大小会动态的调配相应的内存CPU占用空间。
左侧是做资源的释放,资源池的维护会通过相应的服务模块架构对资源进行管控。资源的调度服务就是用来去响应事件触发服务,对整个资源池的管理。函数计算的核心就是基于事件的处理调度,将用户的代码和函数的核心功能进行动态的加载空间容器,并且进行动态销毁的过程。
史南胜就百度准备开源的一个函数引擎——EasyFaaS分三部分进行了介绍,这是一个轻量级运行相对来说比较快的函数计算服务引擎。
第一部分是产品功能,提供了核心的函数信息管理、代码包管理、版本管理、灰度发布,通过这样的能力满足了大部分场景下函数计算的核心诉求,用户拿到EasyFaaS就可以快速的去搭建一个基于百度函数计算引擎的计算平台,能够满足他在部分的业务场景下定制化的开发。这样的开发通过开源的方式能够让大家提交相应的功能,将这些功能能够共建起来;第二部分是请求控制与容器调度;第三部分是容器与网络技术,进一步将容器的利用资源最大化,并且提供多元的运行池。
EasyFaaS开源的核心请求模式中,函数在请求的时候,冷启动是需要时间的,黄色的图标标识了整个事件请求以后过来的响应过程,可以支持用户自己主动的请求,以及通过云端事件触发的方式,原数据的管理对数据的代码包和信息权限验证进行管控,通过funclet模块进行二次容器初始化和管控。一个pod里面有三个容器,有container和runtime,其中runtime是用来加载多语言运行时的一些镜像环境,这些镜像和环境初始化以后它便退出了,所以核心部分是通过funclet管控资源,合理的调配函数计算能力。绿色的部分是热启动的,为了考虑在高并发场景下能够支撑业务场景的请求,所以支持热加载的模式,热加载的模式现在可以做到1毫秒以内。
03 百度函数计算应用实践与经验介绍
我们基于这样的核心引擎,可以在哪些地方去落地?又产生了哪些经验和教训呢?史南胜主要举了三个重要的案例场景。
单体应用,或者微服务应用怎么迁入到Serverless?对于一些场景,比如说小程序场景通过API网关的模式,然后调度到百度智能云函数计算处理业务,并且发起相应的业务逻辑去调度相应的后端服务,可以将部分的业务代码迁移到函数计算平台。将原来核心的部分业务逻辑代码仍然以微服务这样的方式放在后端服务里面。如果面对中小型企业客户,本来在云上产生了相应的存储和计算资源,可以继续使用云数据库云缓存的方式使用,百度云上的资源可以一站式打通。
在微服务架构领域,服务与服务之间除了IDC方式调用以外,函数计算方式可以通过黄色的箭头去发消息,可以支持和集成,可以提前加载到函数计算平台,以镜像的方式进行加载,这个可以让包降低很多。所以说消息队列可以监听完以后,百度函数计算的另一个板块可以进行相应。大家可以将百度函数计算的方式以微服务化的理念来去开发和运作,并且还可以将这样的处理方式上传到云存储上面去。
业务方去处理什么呢?他们只需要聚焦在业务逻辑处理,编写相应的代码,百度的代码和插件层面提供了很好的工具开发,业务方可以在web id,或者相应的代码id上面去开发,开发完了以后通过打包的方式,或者一站式插件集成的方式提交。对于复杂的场景,百度提供了编排方式,只需要编写Serverless的压缩文件就可以处理更复杂的分布式的业务处理逻辑。
这是一个比较典型的提供给一些相应的私有客户部署的能力,这个能力是用来做什么呢?是用来做整个大数据的处理,客户聚焦在中间这两部分,就是事件触发器定义和函数计算逻辑的编写。百度支持通过流失数据和批量数据镜像挂载的方式,可以支持afs,并且可以支持消息队列流式数据的监听,通过这样的方式触发调起函数计算,执行业务,支持业务的逻辑计算,将相应的数据分发到其他的业务部门里面去。
用户基于百度的Serverless平台提交代码就可以定义事件、配置信息了,这样带来的好处架构上面的事情交给了平台方去做,业务平台上面的事情交给了业务方去做。
第三个案例,可以通过百度云的函数计算案例体验,这个体验可以给大家包括一些技能的开发者带来很多的一些像公积金的计算,或者天气的查询,史南胜表示自己也通过小程序和OS方式同时开发了两个技能,以小程序的方式和OS方式发布出来给别人使用,这样的技能可以直接调用天气的方式,比如调用开放接口的墨迹天气自己使用,并且可以将业务逻辑算法集成。这个产生什么收益呢?可以按技能付费,做成三步:云函数创建与自定义、技能创建与绑定技能、运行时请求路由,请求调度的资源统计,以及账号的挂靠。通过这三步可以迅速的将一个新的家庭小度音箱的智能场景能够快速的连接起来,PPT里面红色的字样是核心部分。
除了这些场景,还可以在哪些场景去使用呢?包括应用分发的场景领域,像游戏包,分渠道的打包和运作过程,小程序的开发,以及在集团内部持续的CICD和搜索图谱,包括百度的搜索阿拉丁卡片,以及在金融领域私有化部署,还有汽车、教育等领域的新技术联动,以及大数据处理,都可以去用函数计算的方式去处理。
04 未来展望与延伸
百度函数计算今后还会围绕哪几个方面去运作呢?Serverless场景以前大家都处于观望状态,现在开始在小规模场景使用,之后大规模场景使用。
百度函数计算重点是帮助客户转型,还是围绕降本增效的理念为大家节省资源,并且提供更稳定的服务。在公有化、私有化和开源生态领域,百度会去形成一个组合拳,开源的部分也希望大家与百度一起来来共建。
百度的云原生,除了Serverless函数计算,还有容器服务和微服务架构的治理,还有容器调度,以及效率云的DevOps的计算。百度在今年申请了一站式的技术栈,欢迎大家一起了解一下,不仅提供Serverless的解决方案,还提供容器、微服务架构治理的解决方案,包括效率上面的解决方案。
百度在近几年在云原生方面获得了一系列的奖项和认证,百度是K8S第一批认证厂商,也是在国内第一批和K8S建立起合作,能够提供服务的第一批公司,百度期待与更多伙伴参与进开源社区的建设。