Serverless从入门到进阶:架构、原理与实践
上QQ阅读APP看书,第一时间看更新

2.1 Serverless架构概述

本节主要介绍Serverless架构的组成,并对Serverless架构和传统服务架构的区别和对应关系进行分析。

2.1.1 Serverless = FaaS + BaaS

根据第1章的介绍可知,Serverless包含了FaaS和BaaS两部分。为了更好地区分FaaS和BaaS,我们对构建一个软件应用所需的服务进行分析,如图2-1所示。

025-1

图2-1 构建应用所需的前后端服务划分

由图2-1可知,应用的前端服务更多是用户可见的,例如应用的界面、交互逻辑等,这些主要通过业务实现的API提供。而用户无法看到的后端逻辑部分则更为复杂,例如数据库的管理、数据的存储、用户鉴权逻辑、应用的推送,甚至静态资源加速等优化能力,都算作后端服务。这些复杂的后端逻辑构成了用户前端的体验,并且为软件提供稳定、高可用的服务。

回到FaaS和BaaS的概念区分,FaaS服务主要提供了计算相关的平台,用于实现应用的业务逻辑;而BaaS服务则更多侧重冰山底层的能力,例如数据库服务、存储服务、鉴权服务等。图2-2中对典型的FaaS服务和BaaS服务进行了划分。

025-2

图2-2 典型的FaaS服务和BaaS服务

一个完整的Serverless应用必然是FaaS服务和BaaS服务的结合,此外,该应用中所有FaaS服务和BaaS服务都是Serverless化的,即拥有弹性扩缩容、按需使用和付费的特点。

2.1.2 传统应用架构分析

在了解Serverless架构之前,我们先来了解,构建一个全栈服务,传统的架构应该是怎样的,如图2-3所示。

026-1

图2-3 全栈应用架构

可以看到,在传统的服务架构中,需要考虑以下几个方面。

  • 整体架构的高可用能力:单可用区故障时,是否具备容灾切换的策略。
  • 接入层的性能和安全性:针对接入层,需要考虑其传输性能。例如支持静态资源的缓存、负载均衡、多地域接入加速等。此外,要考虑对请求进行安全加密,并针对业务场景提供用户鉴权等能力。
  • 计算层扩缩容:在计算层,需要保证计算节点的资源分配、管理和弹性伸缩能力。例如,通过配置伸缩组,在突发流量时进行弹性扩缩容。
  • 数据库层的性能和高可用:在数据层面,需要考虑数据库的主备。为了防止出现过多连接导致数据库慢查询等问题,需要针对数据库做连接管理,维护连接池,实现复用。

如上所述,实现一个完备的应用架构,需要一定的运维人力对架构进行管理和维护,有较高的学习门槛。

2.1.3 典型Serverless应用架构

与2.1.2节传统应用架构对应,典型Serverless架构如图2-4所示。

027-1

图2-4 典型Serverless应用架构

因为当前架构全部运行在云端的PaaS服务上,所以架构本身的高可用性可以依赖对应的PaaS服务。进一步分析Serverless架构可以看出,用户通过多种客户端(Web端、App端、小程序端等)对服务进行访问,发起请求。

在接入层,通过网关服务对访问请求进行处理,并将请求转发到后端的Serverless计算(FaaS)节点中执行业务逻辑。在后端,可以连接多种多样的BaaS服务,例如涉及数据增删改查的业务,会在后端连接数据库、Redis缓存等;如果需要调用其他服务,可以直接连接第三方API快速实现,如图片识别、文字翻译等;如果需要对消息进行批量处理或再次计算,可以在后端连接消息队列实现解耦,并再次调用Serverless计算(FaaS)节点。

对比传统的服务架构可以看出,Serverless架构无须考虑底层的运维和调度,也不需要关心后端数据层的连接管理、复用等,为开发者提供了极大的便利,让其可以专注于业务逻辑的实现。

2.1.4 Serverless架构与传统架构

为了进行更直观的对比说明,下面整理了Serverless架构和传统架构中服务的对应关系,如表2-1所示。

表2-1 Serverless和传统架构中的服务对比

028-1

对比传统的服务架构,Serverless架构在成本、运维上都有较为显著的优势,因此也越来越受企业和开发者的喜爱。