Serverless是什么?
CNCF给出的定义是:一种新的云原生计算模型,无需服务器管理而构建和运行应用程序的架构。一个或多个功能的应用上传到平台后执行、扩展和计费。听起来有些抽象,简单来说就是构建应用程序时不再需要管理服务器,由平台负责它的执行、扩展,并根据运行量计费。
信通院也给出了定义:即以应用为中心,无需关注基础设施的计算模式。FaaS不是其唯一的形态,Serverless是一整套能力的合集,越来越多的第三方服务演进为全托管的Serverless形态。
信通院的定义更多地强调在Serverless的落地形态上,包括现在已经广泛推出的FaaS产品-函数计算服务,还有近几年推出的Serverless容器,Serverless应用引擎,以及第三方的服务比如Serverless数据库。同时对这些产品还需要有配套的开发、测试以及CICD工具,保证可观测和安全。
针对Serverless带来的价值或者说好处,IBM对使用Serverless应用的用户做了一次调查,报告显示,36%的用户认为serverless降低了运维成本,34%的用户认为提升了性能,33%的用户认为带来了更好弹性,其他分别是提升了开发、上线效率和节省人力。BBVA对使用AWS函数计算服务lambda开发应用和直接使用服务器开发应用的收益做了对比,在请求频率不高时,lambda有很大成本的优势,同时,使用函数计算开发,交付的周期也由周提升到天甚至是小时级别。在未来,云上交付模式会逐步从Serverful为主转向Serverless为主。
FunctionGrap:三大应用场景开启Serverless新时代
为了帮助更多的用户享受 Serverless 技术红利,华为云在 Serverless 的基础设施上,以华为元戎为底座,推出了华为云 FunctionGraph。
- FunctionGraph是一项基于事件驱动的函数托管计算服务。通过函数工作流,只需编写业务函数代码并设置运行的条件,无需配置和管理服务器等基础设施,函数以弹性、免运维、高可靠的方式运行。
- FunctionGraph提供新一代Serverless函数计算与编排服务。函数计算是基于事件驱动的云托管计算服务,函数的执行靠云上各类事件触发,比如API网关触发的http请求,从消息中间件接收到的消息,对对象存储上的文件做增删操作等。编排服务方面,华为云以CNCF Serverless Workflow 规范为标准,联合2012实验室华为元戎团队共同打造了华为云FunctionGraph Workflow,为用户提供函数流管理功能,并支持可视化拖拽式的函数编排。
根据实际的业务实践FunctionGraph的适用场景可以分成三类:
第一类是数据处理,在移动互联网的浪潮下,我们都会面对大量的文本、图片、视频等数据处理诉求,主要特点是当流量不可预知或处理诉求比较低频时,函数毫秒级别自动弹性的特性,可以很好的削峰填谷,节省资源和运维的成本;而当数据量比较大时,也可以并发加快处理速度。
第二类是Web应用及后端,使用API网关作为函数的触发器,接收请求,触发函数执行。前端开发者使用函数开发,可以方便地实现传统后端技术栈才能实现的业务,让前端开发者成为全栈工程师,更聚焦业务,提升开发效率。
第三类是云服务粘合、能力扩展,随着各行各业智能化的深入,带来了更多的应用开发场景,通常需要集成各类服务快速的上线,这些服务提供了API或者SDK,使用函数可以灵活的转换数据,串联服务。
云视频作为FunctionGraph的种子用户,成功通过使用华为云FunctionGraph缩短版本上线周期。面对不同的终端,前端工程师在页面排版方面会有不同的定制化诉求,如果将数据请求的API全部交给后台来做,那么前端一旦发生变化后端的API都需要随之变化,这需要后端开发人员投入大量工作支持。使用FunctionGraph后,通过前端基于函数开发BFF层,实现前后端解耦,前端工程师有能力做全栈工作,大大提升工作效率。
作为典型的Serverless解决方案,凭借持续的实践与积累,FunctionGraph目前已经沉淀了多种应用模板。FunctionGraph可以帮助客户提升在开发、弹性、成本上能力提升,帮助各行各业的企业用户降本增效,满足了业务创新与发展的需求。
在在线教育业务中会面临不可预知的突发流量,如大规模直播活动、考前大规模练题等,需要不断向服务端提交请求,这类接口如果放在主服务中可能会对稳定性产生影响。将接口与主服务解耦用Serverless的方式来调用,并辅以消息队列来削峰填谷,可以大幅提升便利性和性能。
Serverless具有降本增效、低运维、高可用的优点。如实际业务中给对象存储增加离线下载场景,对于已有多个域名下的下载链接,需要下载后转存到对象存储,视频转码时将远程文件拉取到华为云处理。针对这类低频、异步并发的业务使用FunctionGraph可以很好的避免资源闲置,平稳度过流量高峰。