在 2022 年 6 月份我基于 AWS 构建了一个 BFF 服务:《<font style=color:rgb(18, 18, 18);>一顿操作猛如虎,部署一个万能 BFF - Jeff Tian的文章 - 知乎 》,详细列出了代码级别的操作步骤,今天再次梳理一下架构,以便为有兴趣的同学提供一个概览。

命名上,我称之为万能 BFF,因为让它干了太多事情。�这是我利用 AWS 免费资源构建一个 SFF 的实验场地,用于验证一些 Serverless 的想法。AWS 一共有 200 多个服务,目前这里使用的仅仅是一些 VPC 之外的服务。

在线演示

提供了 3 个 Playground 以供在线体验:

源代码

https://github.com/Jeff-Tian/serverless-space

架构图

客户端浏览器请求一个托管在 Amazon S3 或者其他静态托管服务上的静态网页,当网页中存在需要调用后端 API 的情况时,会通过 AWS API Gateway 对请求进行身份验证与授权,并调用 Lambda 函数与 DynamoDB 进行通信。通过 API Gateway 的缓存功能,可以有效减少 Lambda 函数的调用次数,从而减少后端负载,并在出现服务重复性请求时减少延迟。

1690456531414 8b27b3e8 31cf 4a0f 89c8 a09acbcae1a7

API Gateway 还将日志发送给 Amazon CloudWatch。API Gateway 可以针对 API 中的每个阶段或针对每个方法向 CloudWatch 发送日志。日志记录的详细程度(错误或信息),以及是否应记录完整的请求和响应数据都可以进行配置。

API Gateway 可以发送到 CloudWatch 的详细指标如下:

  • API 调用的数量

  • 延迟

  • 集成延迟

  • HTTP 400 或者 500 错误

还可以激活访问日志记录,以记录谁访问过 API,以及是如何访问的。

Cloud Formation

使用 serverless.yml 定义了一些资源,通过 serverless framework 生成了 Cloud Formation 模板,可以在 AWS 控制台中 查看。

1690456594072 ad122c3c 6128 44b7 86a8 b40c2937d529

自定义域名

API Gateway 可以绑定自定义域名

1690456620373 a875ebf1 09ff 4236 9992 3fc193da2865

API 映射

API Gateway 可以将请求映射到 Lambda 函数,这样就可以通过 API Gateway 来调用 Lambda 函数。

1690456648994 2de56e46 6499 45d4 adba bc4ed995bd70

API Dashboard

API Gateway 可以生成一个仪表盘来展示 API 的调用情况。

1690456672135 981adaa7 37a3 4776 8f8b ebe136b9092a