每日一书丨什么是Serverless,有哪些应用,终于有人讲明白了

Posted 《新程序员》编辑部

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了每日一书丨什么是Serverless,有哪些应用,终于有人讲明白了相关的知识,希望对你有一定的参考价值。

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,选择一个熟悉的编程语言,然后进行项目开发、测试(图中步骤1);

  • 完成之后将代码上传到FaaS平台(图中步骤2);

  • 上传完成之后,只需要通过API/SDK(图中步骤3)或者一些云端的事件源(图中步骤3)触发上传到FaaS平台的函数,FaaS平台就会根据触发的并发度等弹性执行对应的函数(图中步骤4),最后用户可以根据实际资源使用量进行按量付费(图中步骤5)。

▲图1-3 Serverless工作流程

 

我们来看一个Web应用的例子。如图1-4所示,通常情况下一些Web应用都是传统的三层C/S架构,例如一个常见的电子商务应用,假设它的服务端用Java,客户端用html/javascript

▲图1-4 传统Web应用三层C/S架构

在这个架构下,服务端仅为云服务器,其承载了大量业务功能和业务逻辑,例如,系统中的大部分逻辑(身份验证、页面导航、搜索、交易等)都在服务端实现。把它改造成Serverless应用形态,简图如图1-5所示。

▲图1-5 Serverless应用形态简图

  • 在Serverless应用形态下,移除了最初应用中的身份验证逻辑,换用一个第三方的BaaS服务(图中步骤1);

  • 允许客户端直接访问一部分数据库内容,这部分数据完全由第三方托管,会用一些安全配置来管理客户端访问相应数据的权限(图中步骤2);

  • 前面两点已经隐含了非常重要的第三点:先前服务端的部分逻辑已经转移到了客户端,如保持用户Session、理解应用的UX结构、获取数据并渲染出用户界面等。客户端实际上已经在逐步演变为单页应用(图中步骤3);

  • 还有一些任务需要保留在服务器上,比如繁重的计算任务或者需要访问大量数据的操作。这里以“搜索”为例,搜索功能可以从持续运行的服务端中拆分出来,以FaaS的方式实现,从API网关(后文做详细解释)接收请求并返回响应。这个服务端函数可以和客户端一样,从同一个数据库读取产品数据。原始的服务端是用Java写的,而AWS Lambda(假定用的这家FaaS平台)也支持Java,那么原先的搜索代码略作修改就能实现这个搜索函数(图中步骤4);

  • 还可以把“购买”功能改写为另一个FaaS函数,出于安全考虑,它需要在服务端而非客户端实现。它同样经由API网关暴露给外部使用(图中步骤5)。

在整个项目中,Serverless用户实际关心的也就只剩下函数中的业务逻辑,至于身份验证逻辑、API网关以及数据库等原先在服务端的一些产品/服务统统交给云厂商提供。

在整个项目开发、上线以及维护的过程中,用户并不需要关注服务器层面的维护,也无须为流量的波峰波谷进行运维资源的投入,这一切的安全性、弹性能力以及运维工作都交给云厂商来统一处理/调度,用户所需要关注的就是自己的业务代码是否符合自己的业务要求,同时在Serverless架构下,用户也无需为资源闲置进行额外的支出,Serverless架构的按量付费模型以及弹性伸缩能力、服务端低运维/免运维能力,可以让Serverless用户的资源成本、人力成本、整体研发效能得到大幅度提升,让项目的性能、安全性、稳定性得到极大的保障。

02 典型应用场景

Serverless架构自提出到现在经过若干年的发展,已经在很多领域中有着非常多的最佳实践。但是Serverless自身也有局限性,由于其无状态、轻量化等特性,Serverless在一部分场景下可以有非常优秀的表现,但是在另外一些场景下可能表现得并不理想。CNCF总结的Serverless架构所适合的用户场景如下。

  • 异步并发,组件可独立部署和扩展。

  • 突发或服务使用量不可预测。

  • 短暂、无状态的应用,对冷启动时间不敏感。

  • 需要快速开发迭代。

CNCF还列举了Serverless架构可以更好支持的领域。

  • 响应数据库更改(插入、更新、触发、删除)的执行逻辑;

  • 对物联网传感器输入消息(如MQTT消息)进行分析;

  • 处理流处理(分析或修改动态数据);

  • 管理单次提取、转换和存储需要在短时间内进行大量处理(ETL);

  • 通过聊天机器人界面提供认知计算(异步);

  • 调度短时间内执行的任务,例如CRON或批处理的调用;

  • 机器学习和人工智能模型;

  • 持续集成管道,按需为构建作业提供资源,而不是保持一个构建从主机池等待作业分派的任务。

CNCF基于Serverless架构的特点,从理论上描述了Serverless架构适合的场景或业务。云厂商则会站在自身的业务角度来描述Serverless架构的典型场景。不同云厂商描述的典型场景虽然可能有所不同,但是实际上整体思路或类型是类似的,不同云厂商/产品所提供的典型场景如下所示。

1)AWS | LAMBDA

  • 实时文件处理

  • 实时流处理

  • 机器学习

  • IoT后端

  • 移动应用后端

  • Web应用程序

2)阿里云 | 函数计算

  • Web应用

  • 实时数据处理

  • AI推理

  • 视频转码

3)华为云 | 函数工作流

  • 实时文件处理

  • 实时数据流处理

  • Web/移动应用后端

  • 人工智能场景

4)腾讯云 | 云函数

  • 实时文件处理

  • 数据ETL处理

  • 移动及Web应用后端

  • AI推理预测

1. 实时文件处理

视频应用、社交应用等场景下,用户上传的图片、音视频往往总量大、频率高,对处理系统的实时性和并发能力都有较高的要求。例如,对于用户上传的图片,可以使用多个函数对其分别处理,包括图片的压缩、格式转换、鉴黄鉴恐等,以满足不同场景下的需求,如图1-24所示。

▲图1-24 实时文件处理示例

2. 数据ETL处理

通常要对大数据进行处理,需要搭建Hadoop或Spark等相关大数据的框架,同时要有一个处理数据的集群。通过Serverless技术,只需要将获得的数据不断存储到对象存储,并且通过对象存储相关触发器触发数据拆分函数进行相关数据或任务的拆分,然后再调用相关处理函数,处理完成之后,存储到云数据库中。

函数计算近乎无限扩容的能力可以使用户轻松地进行大容量数据的计算。利用Serverless架构可以对源数据并发执行多个mapper和reducer函数,在短时间内完成工作,整个流程可以简化为如图1-25所示。相比传统的工作方式,使用Serverless架构更能避免资源的闲置浪费,从而节省成本。

▲图1-25 数据ETL处理示例

3. 实时数据处理

基于Serverless架构所支持的丰富的事件源和事件触发机制,可以通过几行代码和简单的配置对数据进行实时处理,例如对对象存储压缩包进行解压、对日志或数据库中的数据进行清洗、对MNS消息进行自定义消费等,如图1-26所示。

▲图1-26 实时数据处理示例

4. AI推理预测

AI模型完成训练后,在对外提供推理服务时,可以使用Serverless架构将数据模型包装在调用函数中,在实际用户请求到达时再运行代码。

相对于传统的推理预测,这样做的好处是,无论是函数模块、后端的GPU服务器,还是对接的其他相关的机器学习服务,都可以按量付费以及自动伸缩,从而在保证性能的同时确保服务的稳定,如图1-27所示。

▲图1-27 AI推理预测处理示例

5. IoT后端

目前很多厂商都推出了智能音箱产品。用户对智能音箱说话,智能音箱通过互联网将这句话传递给后端服务,然后得到反馈结果并返回给用户。

通过Serverless架构,可以将API网关、云函数以及数据库产品进行结合来替代传统的服务器或者虚拟机等。这样一方面可以确保资源的按量付费,只有在使用的时候,函数部分才会计费,另一方面当用户量增加之后,通过Serverless实现的智能音箱系统的后端也会进行弹性伸缩,可以保证用户侧的服务稳定。

另外,对其中某个功能进行维护相当于对单个函数进行维护,并不会对主流程产生额外风险,相对来说更安全、更稳定。处理流程示例,如图1-28所示。

▲图1-28 IoT后端处理示例

6. Web应用/移动应用后端

Serverless架构和云厂商所提供的其他云产品进行结合,开发者能够构建可弹性扩展的移动或Web应用程序,轻松创建丰富的无服务器后端,而且这些程序可在多个数据中心高可用运行,无须在可扩展性、备份冗余方面执行任何管理工作。Web应用后端处理示例如图1-29所示。

▲图1-29 Web应用后端处理示例

7. 音视频转码

在视频应用、社交应用等场景下,用户会上传一些视频,通常上传的视频会进行一些转码,包括转换为不同的清晰度。

Serverless技术与对象存储相关产品组合后,可利用对象存储相关触发器,即上传者将视频上传到对象存储中,触发Serverless架构的计算平台(FaaS平台)对其进行处理,处理之后将其重新存储到对象存储中,这个时候其他用户就可以选择编码后的视频进行播放,还可以选择不同的清晰度,如图1-30所示。

▲图1-30 音视频转码处理示例

综上所述,Serverless架构的典型应用场景更多是由Serverless架构的特点决定的。当然,随着时间的不断推移,Serverless架构也在不断演进,特点会更加突出,劣势会被弥补,适合的场景也会更丰富。

03 未来可期

Serverless架构的发展飞速,短短几年的时间,Serverless已经从“鲜为人知”到了“人尽皆知”。

大家对Serverless的态度褒贬不一,有的人认为Serverless架构是未来,是真正的云计算,可以引领云计算的下一个十年;也有的人认为Serverless架构会阻碍时代的发展、技术的进步,认为Serverless是一种倒退,甚至断言Serverless已死。

但是无论如何,Serverless的发展势不可挡。

Serverless、FaaS这些词的热度,在过去的几年内可以说是发生了翻天覆地的变化。纵观全球市场,有AWS带头率先将Serverless商业化,后面紧跟着Azure和Google Cloud的Serverless产品版图的建设,包括阿里云、华为云、腾讯云等在内的国内云厂商也争先恐后地布局Serverless领域。

在2020年的云栖大会上,阿里云研究员叔同断言:与其说Serverless是云计算的升华,不如说Serverless重新定义了云计算,将成为云时代新的计算范式,引领云的下一个十年。

不仅工业界对Serverless充满期待,学术界也对Serverless寄予厚望。伯克利团队认为,Serverless将会成为云时代默认的计算范式,将会取代Serverful计算,将终结服务器-客户端模式。

尽管Serverless仍面临一些挑战,但是不可否认,Serverless确实在不断成长。随着容器、IoT、5G、区块链等技术的快速发展,对去中心化、轻量虚拟化、细粒度计算等技术的需求也愈发强烈,Serverless必将借势迅速发展。未来Serverless将在云计算的舞台上大放异彩!

关于作者:刘宇(花名:江昱),国防科技大学电子信息专业博士,阿里云Serverless产品体验侧负责人,从事Serverless相关的工作多年,负责阿里云函数计算(FC)、Serverless工作流(FNF)等产品的体验工作,有丰富的实践经验。阿里云战略级开源项目Serverless Devs发起人和负责人,Serverless Framework、Kubevela等开源项目贡献者,社区项目Anycodes在线编程负责人。

本文摘编自《Serverless工程实践:从入门到进阶》,经出版方授权发布。

 声明:本文转自“华章计算机”公众号。

以上是关于每日一书丨什么是Serverless,有哪些应用,终于有人讲明白了的主要内容,如果未能解决你的问题,请参考以下文章

每日一书丨Serverless:微服务架构的终极模式

每日一书丨入行软件测试,零基础拿OFFER

每日一书丨迈向云原生:名企FreeWheel应用架构演进

每日一书丨为什么说Java程序员一定掌握Spring Boot?

每日一书丨从微不足道开始改变世界

每日一书丨微内核是什么?宏内核是什么?一文带你了解操作系统内核架构