Serverless架构下的AI应用开发:入门、实战与性能优化
上QQ阅读APP看书,第一时间看更新

1.1 Serverless架构的概念

随着云服务的发展,计算资源被高度抽象化,从物理机到云服务器,再到容器服务,计算资源逐渐细腻化。

2012年,Iron.io的副总裁Ken Form在“Why The Future of Software and Apps is Serverless”一文中首次提出了无服务器的概念,并指出“即使云计算已经逐渐兴起,但是大家仍然在围绕着服务器转。不过,这不会持续太久,云应用正在朝着无服务器方向发展,这将对应用程序的创建和分发产生重大影响”。2019年,UC Berkeley发表论文“Cloud Programming Simplified: A Berkeley View on Serverless Computing”。在文章中,作者犀利断言“新的BaaS存储服务会被发明,以扩展在Serverless计算上能够运行更加适配的应用程序类型。这样的存储能够与本地块存储的性能相匹配,而且具有临时和持久可供选择特性。基于Serverless计算的价格将低于ServerFul计算,至少不会高于ServerFul计算。Serverless计算一旦取得技术上的突破,将会导致ServerFul服务的下滑。Serverless将会成为云时代默认的计算范式,将会取代ServerFul计算,这也意味着服务器——客户端模式的终结”。

Serverless架构从2012年首次走进大众视野到2019年成为UC Berkeley对云计算领域犀利断言的主角,完成了从一个“新的观点”向“万众瞩目的架构”转身。在这7年时间里,Serverless架构从鲜为人知到被商业化应用,再到头部云厂商纷纷布局Serverless架构作为云计算战略,逐渐成为人尽皆知的新技术范式。当然,在这7年间,Serverless不仅仅在技术架构方面逐渐升级和完善,概念也越来越明确,发展方向也逐渐清晰、明朗。

关于Serverless的定义,Martin Fowler在“Serverless Architectures”一文中指出Server-less实际上是BaaS与FaaS的组合。这个简单明了的定义为Serverless架构组成结构奠定了基础。

如图1-1所示,Martin Fowler认为,在Serverless架构中,应用的一部分服务器端逻辑依然由开发者完成,但是和传统架构不同,它运行在一个无状态的计算容器中,由事件驱动、生命周期很短(甚至只有一次调用)、完全由第三方管理,这种情况被称为Functions as a Service(FaaS)。除此之外,Serverless架构还要有部分依赖第三方(云端)应用或服务来管理服务器端逻辑和状态的应用,这些应用通常是富客户端应用(单页应用或者移动端App),建立在云服务生态之上,包括数据库(Parse、Firebase)、账号系统(Auth0、AWS Cognito)等,而这些服务最早被称为Backend as a Service(BaaS)。

图1-1 Serverless架构组成结构

同样认为Serverless是FaaS与BaaS结合而成的CNCF在CNCF WG-Serverless White-paper v1.0中对Serverless架构的定义进行了进一步完善:Serverless是指构建和运行不需要服务器管理的应用程序概念;它描述了一种更细粒度的部署模型,其中将应用程序打包为一个或多个功能模块,上传到平台,然后被执行、扩展和计费,以响应当时确切的需求。与此同时,2019年UC Berkeley的文章“Cloud Programming Simplified: A Berkeley View on Serverless Computing”中同样从Serverless架构特性角度,对什么是Serverless进行了补充描述和定义:简单地说,Serverless=FaaS+BaaS,必须具备弹性伸缩和按量付费的特点。在中国信息通信研究院(以下简称“信通院”)云原生产业联盟所发布的《云原生发展白皮书(2020年)》中对Serverless的概念也有相关的描述:无服务器(即Serverless)是一种架构理念,其核心思想是将提供服务资源的基础设施抽象成各种服务,以API接口的方式供给用户按需调用,真正做到按需伸缩、按使用收费。这种架构体系消除了对传统的海量持续在线服务器组件的需求,降低了开发和运维的复杂度,降低运营成本并缩短了业务系统的交付周期,使得用户能够专注在价值密度更高的业务逻辑开发上。至此,Serverless架构从结构、行为以及特性方面的定义可以总结为图1-2。

图1-2 从不同角度对Serverless架构进行定义