

 本白皮书仅供历史参考。有些内容可能已过时，有些链接可能不可用。

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 架构模式示例
<a name="sample-architecture-patterns"></a>

 您可以使用 API Gateway 和 AWS Lambda 作为您的逻辑层来实现常用的架构模式。本白皮书包括利用 AWS Lambda基于逻辑层的最流行的架构模式：
+  **移动后端-** 移动应用程序与 API Gateway 和 Lambda 通信以访问应用程序数据。此模式可以扩展到不使用无服务器 AWS 资源托管演示层资源（例如桌面客户端、运行的 Web 服务器等）的通用 HTTPS 客户端。 EC2
+  **单页应用程序**-托管在 Amazon S3 中的单页应用程序， CloudFront 可与 API Gateway 通信并 AWS Lambda 访问应用程序数据。
+  **Web 应用程序** — Web 应用程序是一个通用、事件驱动的 Web 应用程序后端，其业务逻辑与 API AWS Lambda Gateway 配合使用。它还使用 DynamoDB 作为其数据库，使用 Amazon Cognito 进行用户管理。所有静态内容均使用 Amplify 托管。

 除了这两种模式外，本白皮书还讨论了 Lambda 和 API Gateway 对通用微服务架构的适用性。微服务架构是一种流行的模式，尽管它不是标准的三层架构，但它涉及解耦应用程序组件，并将它们部署为相互通信的无状态的独立功能单元。

# 移动后端
<a name="mobile-backend"></a>

![\[无服务器移动后端的架构模式\]](http://docs.aws.amazon.com/zh_cn/whitepapers/latest/serverless-multi-tier-architectures-api-gateway-lambda/images/arch-pattern-serverless-mobile-backend.png)


*无服务器移动后端的架构模式*

*表 1-移动后端层组件*


|  套餐  |  组件  | 
| --- | --- | 
|  演示  |  在用户设备上运行的移动应用程序。 | 
|  逻辑  |   带有 Amazon API Gateway AWS Lambda。  此架构显示了三个公开的服务（`/tickets``/shows`、和`/info`）。API Gateway 终端节点由 [Amazon Cognito 用户池](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools.html)保护。通过这种方法，用户登录到 Amazon Cognito 用户池（必要时使用联合第三方），并获得用于授权 API Gateway 调用的访问权限和 ID 令牌。  每个 Lambda 函数都被分配了自己的身份和访问管理 (IAM) 角色，以提供对相应数据源的访问权限。  | 
|  数据  |   DynamoDB 用于和服务。`/tickets` `/shows`  该`/info`服务使用亚马逊 RDS。此 Lambda 函数从 Secrets AWS Manager 检索 Amazon RDS 凭证，并使用弹性网络接口访问私有子网。  | 

# 单页应用程序
<a name="single-page-application"></a>

![\[AWS architecture diagram showing interactions between services like CloudFront, S3, Lambda, and DynamoDB.\]](http://docs.aws.amazon.com/zh_cn/whitepapers/latest/serverless-multi-tier-architectures-api-gateway-lambda/images/single-page-application.png)


*无服务器单页应用程序的架构模式*

*表 2-单页应用程序组件*


|  套餐  |  组件  | 
| --- | --- | 
|  演示  |   在 Amazon S3 中托管的静态网站内容，由分发 CloudFront。  AWS Certifice Manager 允许使用自定义 SSL/TLS 证书。  | 
|  逻辑  |   API Gateway 带有 AWS Lambda。  此架构显示了三个公开的服务（`/tickets``/shows`、和`/info`）。API Gateway 终端节点由 Lambda 授权机构保护。在此方法中，用户通过第三方身份提供商登录并获取访问权限和 ID 令牌。这些令牌包含在 API Gateway 调用中，Lambda 授权机构会验证这些令牌并生成包含 API 启动权限的 IAM 策略。  每个 Lambda 函数都被分配了自己的 IAM 角色，以提供对相应数据源的访问权限。  | 
|  数据  |   Amazon DynamoDB 用于和服务。`/tickets` `/shows`  该`/shows`服务使用Amazon ElastiCache 来提高数据库性能。缓存失误将发送到 DynamoDB。  Amazon S3 用于托管所使用的静态内容`/info service`。  | 

# Web 应用程序
<a name="web-application"></a>

![\[AWS 云 architecture diagram showing client interaction with various AWS 服务.\]](http://docs.aws.amazon.com/zh_cn/whitepapers/latest/serverless-multi-tier-architectures-api-gateway-lambda/images/web-application.png)


*Web 应用程序的架构模式*

*表 3-Web 应用程序组件*


|  套餐  |  组件  | 
| --- | --- | 
|  演示  |   前端应用程序是所有静态内容（HTML、CSS JavaScript 和图像），它们都是由 React 工具生成的，比如 create-react-app。Amazon CloudFront 托管了所有这些对象。使用 Web 应用程序时，会将所有资源下载到浏览器并从那里开始运行。Web 应用程序连接到后端，调用 APIs。  | 
|  逻辑  |   逻辑层是使用 API Gateway REST 前面的 Lambda 函数构建的。 APIs  此架构显示了多个公开的服务。有多个不同的 Lambda 函数，每个函数处理应用程序的不同方面。Lambda 函数位于 API Gateway 之后，可使用 API 网址路径进行访问。 用户身份验证是使用 Amazon Cognito 用户池或联合用户提供商来处理的。API Gateway 使用与亚马逊 Cognito 的开箱即用集成。只有在用户通过身份验证后，客户端才会收到 JSON Web 令牌 (JWT) 令牌，然后在调用 API 时应使用该令牌。 每个 Lambda 函数都被分配了自己的 IAM 角色，以提供对相应数据源的访问权限。  | 
|  数据  |   在此特定示例中，DynamoDB 用于数据存储，但可以根据用例和使用场景使用其他专门构建的 Amazon 数据库或存储服务。  | 

# 采用 Lambda 的微服务
<a name="microservices-with-lambda"></a>

![\[AWS 云 architecture with API Gateways and Lambda functions across two accounts.\]](http://docs.aws.amazon.com/zh_cn/whitepapers/latest/serverless-multi-tier-architectures-api-gateway-lambda/images/microservices-with-lambda.png)


*使用 Lambda 的微服务的架构模式*

 微服务架构模式并不局限于典型的三层架构；但是，这种流行的模式可以从使用无服务器资源中获得显著的好处。

 在这种架构中，每个应用程序组件都是分离的，并且是独立部署和运行的。构建微服务所需要的只是使用 Amazon API Gateway 创建的 API 以及随后由 AWS Lambda其启动的函数。您的团队可以使用这些服务将您的环境解耦并分割到所需的粒度级别。

 通常，微服务环境可能会带来以下困难：创建每项新微服务的重复开销、优化服务器密度和利用率方面的问题、同时运行多个微服务的多个版本的复杂性，以及与许多独立服务集成的客户端代码要求激增。

 当你使用无服务器资源创建微服务时，这些问题变得不那么难解决，在某些情况下甚至会消失。无服务器微服务模式降低了创建每个后续微服务的门槛（API Gateway 甚至允许克隆现有 APIs微服务并在其他账户中使用 Lambda 函数）。优化服务器利用率已不再与这种模式相关。最后，Amazon API Gateway 提供了多种常用语言以编程方式生成的客户端 SDKs ，以减少集成开销。