Skip to content

2.1.基本原理

技术实现

应用的前端服务更多是用户可见的,例如应用的界面、交互逻辑等,这些主要通过业务实现的API提供。

而用户无法看到的后端逻辑部分则更为复杂,例如数据库的管理、数据的存储、用户鉴权逻辑、应用的推送,甚至静态资源加速等优化能力,都算作后端服务。

FaaS服务主要提供了计算相关的平台,用于实现应用的业务逻辑;而BaaS服务则更多侧重冰山底层的能力,例如数据库服务、存储服务、鉴权服务等。

一个完整的Serverless应用必然是FaaS服务和BaaS服务的结合。也即 Serverless = FaaS + BaaS 。

应用架构

Faas架构

FaaS架构屏蔽了许多底层实现,可以让使用者更加专注于业务。总的来说,FaaS架构帮助开发者做了下面几件事:通过负载均衡进行请求调度和转发;通过集群调度实现计算资源的弹性扩缩容;对请求做错误处理;安全隔离不同租户的资源。

在通用的FaaS平台中,为了实现请求转发、扩缩容、租户隔离等能力,需要以下模块的支持:负载均衡器;请求处理模块;计数器;实例(worker);实例管理模块(worker manager);资源调度模块;

在请求进入FaaS平台后,请求处理模块会在实例管理模块中查询是否有可用(空闲状态)的实例。如有空闲实例,则将对应的请求调度到该实例中。

在业务突增的情况下,资源池中无可用实例。请求处理模块收到请求后,会先去实例管理模块查询是否有可用实例。如无可用实例,则去资源调度模块中申请扩容。资源调度模块会创建新的实例加入资源池。

分析请求的处理流程可知,因为FaaS平台屏蔽了许多底层的调度、扩缩容策略,所以内部的请求处理链路较长。

这一系列处理流程太久,就会造成“冷启动”的问题,即首次请求到达FaaS平台延时过长。

Baas服务

BaaS服务可提供一系列具备Serverless特点的服务端/后端能力,整体而言,可以分为以下几类:

接入层服务:最典型的是API网关服务,通过提供Serverless的接入层,请求弹性伸缩,转发到FaaS服务进行处理;

登录/鉴权服务:提供便捷接入的登录鉴权服务,典型的如AWS Cognito;

数据库服务:Serverless数据库不需要客户管理连接池、优化数据库性能,典型的关系型数据库如AWS Aurora Serverless、腾讯云PostgreSQL Serverless;非关系型数据库有AWS Dynamo DB等;

存储服务:用于提供数据的存储,通常用来存储静态资源、视频、图片等文件,能起到加速访问的作用。典型的存储服务如AWS S3、腾讯云COS对象存储等;

提醒推送服务:基于消息队列等技术,提供短信、邮件等提醒推送服务,经常用于短信验证、业务告警提醒等场景;

API服务:通过调用多种API服务,提供成熟的应用解决方案,如基于图像处理、机器学习的图片识别、文字识别、基于自然语言处理的NLP对话平台服务等;

服务构建思维

在构建Serverless服务时,开发者的思维方式也要有相应的转变。最重要的一点在于,要将思路从自底向上转为自顶向下。

传统的构建方式如下:

应用设计→容量预估→资源选型→架构设计验证→业务开发实现→测试及部署→应用交付

Serverless架构下的构建方式如下:

应用设计→选取对应模板→业务开发/改造→测试及部署→应用交付