导读:本文将介绍Serverless的定义、规范和应用场景,以及笔者对Serverless技术未来的展望。
作者:刘宇
来源:大数据DT(ID:hzdashuju)
01 Serverless的定义
1. 广义定义探索
云计算的十余年发展让整个互联网行业发生了翻天覆地的变化,而Serverless作为云计算的产物,或者说是云计算在某个时代的表现,被很多人认为是真正意义上的云计算,伯克利团队甚至断言Serverless将会引领云计算的下一个十年。那么Serverless到底是什么呢?是否有明确的定义或者规范呢?
关于“Serverless是什么”这个问题,其实是可以通过不同角度来分析的。Martin Fowler在“Serverless Architectures”一文中从Serverless组成角度给出了Serverless的定义,他认为Serverless实际上是BaaS与FaaS的组合,并针对BaaS和FaaS进行了详细的描述。
Serverless最早用于描述那些大部分或者完全依赖于第三方(云端)应用或服务来管理服务器端逻辑和状态的应用,这些应用通常是富客户端应用(单页应用或者移动端App),建立在云服务生态之上,包括数据库(Parse、Firebase)、账号系统(Auth0、AWS Cognito)等。这些服务最早被称为Baas(Backend as a Service,后端即服务)。
Serverless还可以指这种情况:应用的一部分服务端逻辑依然由开发者完成,但是和传统架构不同,它运行在一个无状态的计算容器中,由事件驱动,生命周期很短(甚至只有一次调用),完全由第三方管理。这种情况被称为FaaS(Functions as a service,函数即服务)。AWS Lambda是目前的热门FaaS实现之一。
通过Martin Fowler的描述可以总结出FaaS、BaaS以及Serverless之间的关系,如图1-1所示。
▲图1-1 Serverless架构的组成
云原生计算基金会(下文简称CNCF)则从Serverless的特征特性角度给出了Serverless的定义:
Serverless是指构建和运行不需要服务器管理的应用程序。它描述了一种更细粒度的部署模型,即将应用程序打包为一个或多个功能,上传到平台,然后执行、扩展和计费,以响应当时确切的需求。
同时CNCF也强调了,Serverless所谓的“无服务器”并不是“没有服务器”,而是说Serverless的用户不再需要在服务器配置、维护、更新、扩展和容量规划上花费时间和资源,可以将更多的精力放到业务逻辑本身,至于服务器,则“把更专业的事情交给更专业的人”去做,即由云厂商来提供统一的运维。
在信通院云原生产业联盟所发布的《云原生发展白皮书(2020年)》中对Serverless也有相关的描述:
Serverless是一种架构理念,其核心思想是将提供服务资源的基础设施抽象成各种服务,以API接口的方式供用户按需调用,真正做到按需伸缩、按使用收费。
这种架构消除了对传统的海量持续在线服务器组件的需求,降低了开发和运维的复杂性,降低了运营成本并缩短了业务系统的交付周期,使得用户能够专注在价值密度更高的业务逻辑的开发上。
如图1-2所示,从Serverless的结构上来看,Serverless = FaaS + BaaS是一个被普遍认可的概念;从Serverless的特性上来看,Serverless运行在无状态的计算容器中,由事件触发,并且拥有弹性伸缩以及按量付费等能力,让使用者不用花费更多的精力在服务器上,而是更加关注业务本身。
▲图1-2 不同角度上的Serverless的定义
2. Serverless工作流程
在实际生产中,Serverless架构通常都是FaaS与BaaS的结合,并且具备弹性伸缩和按量付费的特性。
如图1-3所示,当开发者想要开发一个项目的时候,通常只需要根据FaaS提供商所提供的Runtime,选