

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

# 设计注意事项
<a name="design-considerations"></a>

## 部署选项
<a name="deployment-options"></a>

 如果这是第一次安装，或者您不确定要安装什么，请部署`virtual-waiting-room-on-aws-getting-started.template`嵌套 CloudFormation模板，该模板将安装核心、授权者和等候室示例模板。这为您提供了一个最小的等候室，流程简单。

## 受支持的协议
<a name="supported-protocols"></a>

 AWS 解决方案上的虚拟等候室可以与以下内容集成：
+  JSON 网络令牌验证库和工具 
+  现有 API Gateway 部署 
+  REST API 客户端 
+  OpenID 客户和提供商 

## 等候室入口策略
<a name="waiting-room-inlet-strategies"></a>

 入口策略封装了将客户从等候室转移到网站所需的逻辑和数据。入口策略可以作为 Lambda 函数、容器、Amazon EC2 实例或任何其他计算资源来实现。只要它可以将等候室称为公用和私有即可，它就不必是云资源 APIs。入口策略接收有关等候室、网站或其他外部指标的事件，以帮助其决定何时可以发行代币并进入网站。入口策略有几种方法。你采用哪一种取决于你可用的资源以及受保护的网站设计的限制。

 入口策略采取的主要操作是调用 `increment_serving_num` Amazon API Gateway 私有 API，其相对值表示还有多少客户可以进入该网站。本节介绍两种样本入口策略。它们可以按原样使用，也可以自定义，也可以采用完全不同的方法。

### MaxSize
<a name="maxsize"></a>

 使用该 MaxSize 策略，将 `MaxSizeInlet` Lambda 函数配置为可以同时使用网站的最大客户数。这是一个固定值。客户发出 Amazon SNS 通知，该通知调用 `MaxSizeInlet` Lambda 函数以根据消息有效负载增加服务计数器。SNS 消息的来源可以来自任何地方，包括网站上的代码或观察网站利用率的监控工具。

 `MaxSizeInlet`Lambda 函数预计会收到一条消息，其中可能包括：
+  `exited :`已完成的交易数量 
+  待标记 IDs 为已完成的请求清单 
+  IDs 要标记为已放弃的请求清单 

 此数据用于确定服务计数器要增加多少。在某些情况下，根据当前的客户端数量，可能没有额外的容量来增加计数器。

### 定期
<a name="periodic"></a>

 使用周期策略时， CloudWatch 规则每分钟调用 Lambd `PeriodicInlet` a 函数，将发球计数器增加固定数量。定期入口使用事件开始时间、结束时间和增量进行参数化。或者，此策略还会检查 CloudWatch 警报，如果警报处于`OK`状态，则执行增量，否则会跳过警报。站点集成商可以将利用率指标连接到警报，并使用该警报来暂停定期入口。此策略仅在当前时间介于开始时间和结束时间之间时更改发球位置，并且可以选择指定警报处于`OK`状态。

## 定制和扩展解决方案
<a name="customizing-and-extending-the-solution"></a>

 贵组织的站点管理员必须决定在等候室中使用的集成方法。有两种方式：

1.  直接使用 APIs 和 API Gateway 授权方进行基本集成。

1.  通过身份提供商集成 OpenID。

 除了上述集成之外，您可能还需要配置域名重定向。您还负责部署自定义的等候室网站页面。

 虚拟等候室 AWS 解决方案旨在通过两种机制进行扩展：用于单向事件通知和 EventBridge 用于双向通信的 REST APIs 。

## 限额
<a name="quotas"></a>

 虚拟等候室开启的主要规模限制 AWS 是已安装区域的 Lambda 限制限制。 AWS 当安装到具有默认 Lambda 并发运行配额的 AWS 账户中时，虚拟等候室 AWS 解决方案每秒最多可以处理 500 个客户请求队列中的职位。每秒 500 个客户端的速率基于该解决方案，所有 Lambda 函数并发配额限制都是独家提供的。如果账户中的区域与其他调用 Lambda 函数的解决方案共享，则 AWS 解决方案的虚拟等候室应至少有 1,000 个可用的并发调用。您可以使用 CloudWatch 指标来绘制账户中随时间推移的 Lambda 并发调用次数来做出决定。您可以使用 S [ervice Quotas 控制台请求增加配额](https://console.aws.amazon.com/servicequotas/home)。提高 Lambda 限制仅在实际发生额外调用时才会提高每月账户费用。

 每秒每增加 500 个客户端，将您的油门限制提高 1,000。


|  **预计每秒传入用户数**  |  **建议的并发执行配额**  | 
| --- | --- | 
|  0-500  |  1,000（默认）  | 
|  501-1,000  |  2000  | 
|  1,001-1,500  |  3000  | 

 Lambda 的固定突发限制为 3,000 次并发调用。有关更多信息，请参阅 [Lambda 函数扩展](https://docs.aws.amazon.com/lambda/latest/dg/invocation-scaling.html)。如果返回的错误代码表明存在临时限制情况，则客户端代码应该预料并重试某些 API 调用。等候室客户端示例包含此代码，以此作为如何设计用于高容量和高突发事件的客户端的示例。

 此解决方案还兼容 Lambda *预留*和*预配置*并发以及自定义配置步骤。有关详细信息，请参阅[管理 Lambda 预留](https://docs.aws.amazon.com/lambda/latest/dg/configuration-concurrency.html)并发。

 可以进入等候室、接收令牌并继续进行交易的用户上限受到 Elasticache (Redis OSS) 计数器上限的限制。计数器用于等候室的服务位置和跟踪解决方案的摘要状态。Elasticache（Redis OSS）中使用的计数器的上限为 9,223,372,036,854,775,807。DynamoDB 表用于存储发放给等候室用户的每个令牌的副本。DynamoDB 对表格的大小没有实际限制。

## 区域部署
<a name="regional-deployments"></a>

 该解决方案使用的服务在所有 AWS 区域均受支持。有关按地区划分的最新 AWS 服务可用性，请参阅[AWS 区域服务列表](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/)。