

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 設計考量
<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 Web Token 驗證程式庫和工具 
+  現有的 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 規則每分鐘會叫用 `PeriodicInlet` Lambda 函數，將服務計數器增加固定數量。週期性入口會參數化為事件開始時間、結束時間和增量量。或者，此策略也會檢查 CloudWatch 警示，如果警示處於 `OK` 狀態，則會執行增量，否則會略過警示。網站整合商可以將使用率指標連接到警示，並使用該警示來暫停定期入口。此策略只會在目前時間介於開始和結束時間之間，以及選擇性地變更指定的警示處於 `OK` 狀態時，變更服務位置。

## 自訂和擴展解決方案
<a name="customizing-and-extending-the-solution"></a>

 您組織的網站管理員必須決定與等候室搭配使用的整合方法。有兩個選項：

1.  直接使用 APIs和 API Gateway 授權方的基本整合。

1.  透過身分提供者進行 OpenID 整合。

 除了上述整合之外，您可能需要設定網域名稱重新導向。您也必須負責部署自訂的等待室網站頁面。

 Virtual Waiting Room on AWS 解決方案旨在透過兩種機制進行延伸：EventBridge 用於單向事件通知，而 REST APIs 用於雙向通訊。

## 配額
<a name="quotas"></a>

 虛擬等待室的主要規模限制 AWS 是已安裝 AWS 區域的 Lambda 限流限制。將 安裝在具有預設 Lambda 並行執行配額 AWS 的帳戶中時，虛擬等待室 AWS 解決方案每秒最多可以處理 500 個用戶端，請求佇列中的位置。每秒 500 個用戶端的速率是根據解決方案，該解決方案具有所有 Lambda 函數並行配額限制，僅供使用。如果帳戶中的區域與其他叫用 Lambda 函數的解決方案共用，則虛擬等待室解決方案 AWS 應至少有 1，000 個可用的並行叫用。您可以使用 CloudWatch 指標來繪製您帳戶中 Lambda 並行調用的圖表，以做出決定。您可以使用 [Service Quotas 主控台](https://console.aws.amazon.com/servicequotas/home)來請求增加。提高 Lambda 限流限制只會在實際發生其他調用時，才會提高每月帳戶費用。

 對於每秒每多 500 個用戶端，將限流限制增加 1，000。


|  **預期每秒傳入使用者數**  |  **建議的並行執行配額**  | 
| --- | --- | 
|  0-500  |  1，000 （預設）  | 
|  501-1，000  |  2,000  | 
|  1，001-1，500  |  3,000  | 

 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/)。