

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

# 為以儲存格為基礎的架構設定無伺服器儲存格路由器
<a name="serverless-cell-router-architecture"></a>

*Mian Tariq 和 Ioannis Lioupras，Amazon Web Services*

## 總結
<a name="serverless-cell-router-architecture-summary"></a>

做為全域儲存格型應用程式系統的進入點，儲存格路由器負責將使用者有效率地指派給適當的儲存格，並將端點提供給使用者。儲存格路由器會處理 函數，例如儲存user-to-cell的映射、監控儲存格容量，以及在需要時請求新的儲存格。在潛在中斷期間維護儲存格路由器功能非常重要。

此模式中的儲存格路由器設計架構著重於彈性、可擴展性和整體效能最佳化。模式使用靜態路由，其中用戶端會在初始登入時快取端點，並直接與儲存格通訊。此解耦透過協助確保在儲存格路由器受損期間，以儲存格為基礎的應用程式不中斷功能，來增強系統彈性。

此模式使用 AWS CloudFormation 範本來部署架構。如需範本部署內容的詳細資訊，或使用 部署相同的組態 AWS 管理主控台，請參閱[其他資訊](#serverless-cell-router-architecture-additional)一節。

**重要**  
此模式中顯示的示範、程式碼和 CloudFormation 範本僅供說明之用。提供的資料僅用於說明設計模式和協助理解。示範和程式碼尚未可供生產使用，不應用於任何即時生產活動。任何在生產環境中使用程式碼或示範的嘗試，都強烈建議您自行承擔風險。我們建議諮詢適當的專業人員，並在生產設定中實作此模式或其任何元件之前執行徹底的測試。

## 先決條件和限制
<a name="serverless-cell-router-architecture-prereqs"></a>

**先決條件**
+ 作用中的 Amazon Web Services (AWS) 帳戶
+ 最新版本的 [AWS Command Line Interface (AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html))
+ 具有建立 CloudFormation 堆疊、 AWS Lambda 函數和相關資源所需許可的 [AWS 登入](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html)資料

**產品版本**
+ Python 3.12

## Architecture
<a name="serverless-cell-router-architecture-architecture"></a>

下圖顯示儲存格路由器的高階設計。

![儲存格路由器的五個步驟程序。](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/patterns/images/pattern-img/fd2fbf9d-9ae4-4c27-bc32-cf117350137a/images/feb90b51-dd91-483b-b5a3-b0a5359686e3.png)


圖表會逐步完成下列工作流程：

1. 使用者聯絡 Amazon API Gateway，做為儲存格路由器 API 端點的前端。

1. Amazon Cognito 會處理身分驗證和授權。

1.  AWS Step Functions 工作流程包含下列元件：
   + **Orchestrator** ‒ `Orchestrator`使用 來 AWS Step Functions 建立工作流程或狀態機器。工作流程是由儲存格路由器 API 觸發。會根據資源路徑`Orchestrator`執行 Lambda 函數。
   + **Dispatcher** `Dispatcher`‒ Lambda 函數會識別並為每個註冊的新使用者指派一個靜態儲存格。函數會搜尋使用者數目最少的儲存格，將其指派給使用者，然後傳回端點。
   + **Mapper** ‒ `Mapper`操作會在 CloudFormation 範本建立的 `RoutingDB` Amazon DynamoDB 資料庫中處理user-to-cell的映射。觸發時， `Mapper`函數會提供已指派的使用者其端點。
   + **Scaler** ‒ `Scaler`函數會追蹤儲存格佔用和可用容量。如有需要，`Scaler`函數可以透過 Amazon Simple Queue Service (Amazon SQS) 將請求傳送至佈建和部署層，以請求新的儲存格。
   + **驗證器** ‒ `Validator`函數會驗證儲存格端點並偵測任何潛在問題。

1. `RoutingDB` 存放儲存格資訊和屬性 (API 端點、 AWS 區域狀態、指標）。

1. 當儲存格的可用容量超過閾值時，儲存格路由器會透過 Amazon SQS 請求佈建和部署服務，以建立新的儲存格。

建立新儲存格時， `RoutingDB`會從佈建和部署層更新。不過，該程序超出此模式的範圍。如需儲存格型架構設計內部部署的概觀，以及此模式中所用儲存格路由器設計的詳細資訊，請參閱[其他資訊](#serverless-cell-router-architecture-additional)一節。

## 工具
<a name="serverless-cell-router-architecture-tools"></a>

**AWS 服務**
+ [Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html) 可協助您建立、發佈、維護、監控和保護任何規模的 REST、HTTP 和 WebSocket APIs。
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) 可協助您設定 AWS 資源、快速且一致地佈建資源，以及在整個 AWS 帳戶 和 生命週期中管理資源 AWS 區域。
+ [Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/what-is-amazon-cognito.html) 為 Web 和行動應用程式提供身分驗證、授權和使用者管理。
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) 是一項全受管 NoSQL 資料庫服務，可提供快速、可預期且可擴展的效能。
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) 是一項運算服務，可協助您執行程式碼，無需佈建或管理伺服器。它只會在需要時執行程式碼並自動擴展，因此您只需按使用的運算時間付費。
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) 是一種雲端型物件儲存服務，可協助您儲存、保護和擷取任何數量的資料。
+ [Amazon Simple Queue Service (Amazon SQS)](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/welcome.html) 提供安全、耐用且可用的託管佇列，可協助您整合和分離分散式軟體系統和元件。
+ [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html) 是一種無伺服器協同運作服務，可協助您結合 Lambda 函數和其他 AWS 服務 來建置業務關鍵應用程式。

**其他工具**
+ [Python](https://www.python.org/) 是一種一般用途的電腦程式設計語言。

**程式碼儲存庫**

此模式的程式碼可在 GitHub [Serverless-Cell-Router](https://github.com/aws-samples/Serverless-Cell-Router/) 儲存庫中使用。

## 最佳實務
<a name="serverless-cell-router-architecture-best-practices"></a>

如需建置以儲存格為基礎的架構時的最佳實務，請參閱下列 AWS Well-Architected 指引：
+ [使用以儲存格為基礎的架構減少影響範圍](https://docs.aws.amazon.com/wellarchitected/latest/reducing-scope-of-impact-with-cell-based-architecture/reducing-scope-of-impact-with-cell-based-architecture.html)
+ [AWS Well-Architected Framework 可靠性支柱：REL10-BP04 使用大量架構來限制影響範圍](https://docs.aws.amazon.com/wellarchitected/latest/reliability-pillar/rel_fault_isolation_use_bulkhead.html)

## 史詩
<a name="serverless-cell-router-architecture-epics"></a>

### 準備來源檔案
<a name="prepare-source-files"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 複製範例程式碼儲存庫。 | 若要將 Serverless-Cell-Router GitHub 儲存庫複製到您的電腦，請使用下列命令：<pre>git clone https://github.com/aws-samples/Serverless-Cell-Router/</pre> | 開發人員 | 
| 設定 AWS CLI 臨時登入資料。 |  AWS CLI 使用 的登入資料來設定 AWS 帳戶。本演練使用 IAM Identity Center Command AWS 行或程式設計存取選項提供的臨時憑證。 ****這會設定具有適當登入資料的 `AWS_SECRET_ACCESS_KEY`、 `AWS_ACCESS_KEY_ID`和 `AWS_SESSION_TOKEN` AWS 環境變數，以便與 搭配使用 AWS CLI。 | 開發人員 | 
| 建立 S3 儲存貯體。 | 建立 S3 儲存貯體，用於存放和存取 Serverless-Cell-Router Lambda 函數，以供 CloudFormation 範本部署。若要建立 S3 儲存貯體，請使用下列命令：<pre>aws s3api create-bucket --bucket <bucket name> --region eu-central-1 --create-bucket-configuration LocationConstraint=eu-central-1</pre> | 開發人員 | 
| 建立 .zip 檔案。 | 為位於 [Functions ](https://github.com/aws-samples/Serverless-Cell-Router/tree/main/Functions)目錄中的每個 Lambda 函數建立一個 .zip 檔案。這些 .zip 檔案將用於部署 Lambda 函數。在 Mac 上，使用下列`zip`命令：<pre>zip -j mapper-scr.zip Functions/Mapper.py<br />zip -j dispatcher-scr.zip Functions/Dispatcher.py<br />zip -j scaler-scr.zip Functions/Scaler.py<br />zip -j cp validator-scr.zip Functions/Validator.py<br />zip -j dynamodbDummyData-scr.zip Functions/DynamodbDummyData.py</pre> | 開發人員 | 
| 將 .zip 檔案複製到 S3 儲存貯體。 | 若要將所有 Lambda 函數 .zip 檔案複製到 S3 儲存貯體，請使用下列命令：<pre>aws s3 cp mapper-scr.zip s3://<bucket name><br />aws s3 cp dispatcher-scr.zip s3://<bucket name><br />aws s3 cp scaler-scr.zip s3://<bucket name><br />aws s3 cp validator-scr.zip s3://<bucket name><br />aws s3 cp dynamodbDummyData-scr.zip s3://<bucket name></pre> | 開發人員 | 

### 建立 CloudFormation 堆疊
<a name="create-the-cfn-stack"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 部署 CloudFormation 範本。 | 若要部署 CloudFormation 範本，請執行下列 AWS CLI 命令：<pre>aws cloudformation create-stack --stack-name serverless.cell-router \<br />--template-body file://Serverless-Cell-Router-Stack-v10.yaml \<br />--capabilities CAPABILITY_IAM \<br />--parameters ParameterKey=LambdaFunctionMapperS3KeyParameterSCR,ParameterValue=mapper-scr.zip \<br />ParameterKey=LambdaFunctionDispatcherS3KeyParameterSCR,ParameterValue=dispatcher-scr.zip \<br />ParameterKey=LambdaFunctionScalerS3KeyParameterSCR,ParameterValue=scaler-scr.zip \<br />ParameterKey=LambdaFunctionAddDynamoDBDummyItemsS3KeyParameterSCR,ParameterValue=dynamodbDummyData-scr.zip \<br />ParameterKey=LambdaFunctionsS3BucketParameterSCR,ParameterValue=<S3 bucket storing lambda zip files> \<br />ParameterKey=CognitoDomain,ParameterValue=<Cognito Domain Name> \<br />--region <enter your aws region id, e.g. "eu-central-1"></pre> | 開發人員 | 
| 檢查進度。 | 登入 AWS 管理主控台，開啟位於 https：//[https://console.aws.amazon.com/cloudformation/]() 的 CloudFormation 主控台，並檢查堆疊開發的進度。當狀態為 時`CREATE_COMPLETE`，堆疊已成功部署。 | 開發人員 | 

### 評估和驗證
<a name="assess-and-verify"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 將儲存格指派給使用者。 | 若要啟動 `Orchestrator`，請執行下列 curl 命令：<pre>curl -X POST \<br />-H "Authorization: Bearer {User id_token}" \<br />https://xxxxxx.execute-api.eu-central-1.amazonaws.com/Cell_Router_Development/cells</pre><br />會`Orchestrator`觸發 `Dispatcher`函數的執行。`Dispatcher`然後， 會驗證使用者的存在。如果找到使用者， 會`Dispatcher`傳回相關聯的儲存格 ID 和端點 URLs。如果找不到使用者， 會將儲存格`Dispatcher`配置給使用者，並將儲存格 ID 傳送至 `Scaler`函數，以評估指派的儲存格剩餘容量。<br />`Scaler` 函數的回應如下：<br />`"cellID : cell-0002 , endPoint_1 : https://xxxxx.execute-api.eu-north-1.amazonaws.com/ , endPoint_2 : https://xxxxxxx.execute-api.eu-central-1.amazonaws.com/"` | 開發人員 | 
| 擷取使用者儲存格。 | 若要使用 `Orchestrator`執行 `Mapper`函數，請執行下列命令：<pre>curl -X POST \<br />-H "Authorization: Bearer {User id_token}" \<br />https://xxxxxxxxx.execute-api.eu-central-1.amazonaws.com/Cell_Router_Development/mapper</pre><br />`Orchestrator` 會搜尋指派給使用者的儲存格，並在下列回應中傳回儲存格 ID URLs：<br />`"cellID : cell-0002 , endPoint_1 : https://xxxxx.execute-api.eu-north-1.amazonaws.com/ , endPoint_2 : https://xxxxxxx.execute-api.eu-central-1.amazonaws.com/"` | 開發人員 | 

### 清除
<a name="clean-up"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 清除資源。 | 若要避免在您的帳戶中產生額外費用，請執行下列動作：[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/patterns/serverless-cell-router-architecture.html) | 應用程式開發人員 | 

## 相關資源
<a name="serverless-cell-router-architecture-resources"></a>

**參考**
+ [使用可用區域實現靜態穩定性](https://aws.amazon.com/builders-library/static-stability-using-availability-zones/)
+ [AWS 故障隔離界限：靜態穩定性](https://docs.aws.amazon.com/whitepapers/latest/aws-fault-isolation-boundaries/static-stability.html)

**影片**

[Physalia：在 Amazon EBS 上提供更高可用性的儲存格型架構](https://www.youtube.com/watch?v=6IknqRZMFic) 




[https://www.youtube-nocookie.com/embed/6IknqRZMFic?controls=0](https://www.youtube-nocookie.com/embed/6IknqRZMFic?controls=0)

## 其他資訊
<a name="serverless-cell-router-architecture-additional"></a>

**以儲存格為基礎的架構設計內部部署**

雖然此模式著重於儲存格路由器，但請務必了解整個環境。環境分為三個離散圖層：
+ 路由層，或包含儲存格路由器的精簡層
+ 儲存格層，包含各種儲存格
+ 佈建和部署層，可佈建儲存格和部署應用程式

即使影響其他 layer 的受損，每個 layer 也會維持功能。 AWS 帳戶 做為故障隔離界限。

下圖顯示高層級的圖層。儲存格層和佈建和部署層超出此模式的範圍。

![路由層、具有多個儲存格帳戶的儲存格層，以及佈建和部署層。](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/patterns/images/pattern-img/fd2fbf9d-9ae4-4c27-bc32-cf117350137a/images/137ac34d-43c3-42b6-95de-a365ff611ce8.png)


如需儲存格型架構的詳細資訊，請參閱[使用儲存格型架構降低影響範圍：儲存格路由](https://docs.aws.amazon.com/wellarchitected/latest/reducing-scope-of-impact-with-cell-based-architecture/cell-routing.html)。

**儲存格路由器設計模式**

儲存格路由器是跨儲存格的共用元件。為了減輕潛在的影響，路由層必須使用盡可能精簡且水平可擴展的設計。作為系統的進入點，路由層僅包含有效將使用者指派給適當儲存格所需的元件。此層中的元件不會參與儲存格的管理或建立。

此模式使用靜態路由，這表示用戶端會在初次登入時快取端點，然後與儲存格建立直接通訊。用戶端與儲存格路由器之間的定期互動會啟動，以確認目前狀態或擷取任何更新。此刻意解耦可在儲存格路由器停機時為現有使用者啟用不間斷的操作，並在系統內提供持續的功能和彈性。

在此模式中，儲存格路由器支援下列功能：
+ 從佈建和部署層中的儲存格資料庫擷取儲存格資料，以及儲存或更新本機資料庫。
+ 使用儲存格指派演算法，將儲存格指派給應用程式的每個新註冊使用者。
+ 將user-to-cells映射存放在本機資料庫中。
+ 在使用者指派期間檢查儲存格的容量，並將自動販賣機的事件引發至佈建和部署層以建立儲存格。
+ 使用儲存格建立條件演算法來提供此功能。
+ 透過提供靜態儲存格URLs 來回應新註冊的使用者請求。這些 URLs會以存留時間 (TTL) 快取在用戶端上。
+ 提供新的或更新的 URL，以回應無效 URL 的現有使用者請求。

若要進一步了解 CloudFormation 範本設定的示範儲存格路由器，請檢閱下列元件和步驟：

1. 設定 Amazon Cognito 使用者集區。

1. 設定和設定儲存格路由器的 API Gateway API。

1. 建立 DynamoDB 資料表。

1. 建立和設定 SQS 佇列。

1. 實作 `Orchestrator`。

1. 實作 Lambda 函數：`Dispatcher`、`Scaler`、`Mapper`、`Validator`。

1. 評估和驗證。

預先假設是佈建和部署層已建立。其實作詳細資訊超出此成品的範圍。

由於這些元件是由 CloudFormation 範本設定，因此下列步驟會以描述性和高層級顯示。假設您具備完成設定和組態所需的 AWS 技能。

*1。設定 Amazon Cognito 使用者集區*

登入 AWS 管理主控台，並在 [https://console.aws.amazon.com/cognito/]()：// 開啟 Amazon Cognito 主控台。使用應用程式整合`CellRouterPool`、託管 UI 和必要的許可，設定名為 的 Amazon Cognito 使用者集區。

*2. 設定和設定儲存格路由器的 API Gateway API*

在以下網址開啟 API Gateway 主控台：[https://console.aws.amazon.com/apigateway/]()。使用與 Amazon Cognito 使用者集區 整合的 Amazon Cognito 授權方`CellRouter`，設定名為 的 API`CellRouterPool`。實作下列元素：
+ `CellRouter` API 資源，包括`POST`方法
+ 與步驟 5 中實作的 Step Functions 工作流程整合
+ 透過 Amazon Cognito 授權方的授權
+ 整合請求和回應映射
+ 配置必要的許可

*3. 建立 DynamoDB 資料表*

在 [https://console.aws.amazon.com/dynamodb/]()：// 開啟 DynamoDB 主控台，並使用`tbl_router`下列組態建立名為 的標準 DynamoDB 資料表：
+ **分割區索引鍵** `marketId`‒
+ **排序索引鍵** `cellId`‒
+ **容量模式** ‒ 佈建
+ **Point-in-time(PITR)** ‒ 關閉

在**索引**索引標籤上，建立名為 的全域次要索引`marketId-currentCapacity-index`。`Scaler` Lambda 函數將使用 索引，對指派使用者數目最低的儲存格進行有效的搜尋。

使用下列屬性建立資料表結構：
+ `marketId` ‒ 歐洲
+ `cellId` ‒ cell-0002
+ `currentCapacity` ‒ 2
+ `endPoint_1` ‒ <第一個區域的端點>
+ `endPoint_2` ‒ <第二個區域的端點>
+ `IsHealthy` ‒ True
+ `maxCapacity` ‒ 10
+ `regionCode_1` ‒ `eu-north-1`
+ `regionCode_2` ‒ `eu-central-1`
+ `userIds` ‒ <您的電子郵件地址>

*4. 建立和設定 SQS 佇列*

在 [https://console.aws.amazon.com/sqs/]()：// 開啟 Amazon SQS 主控台，並建立名為 的標準 SQS 佇列，以 **Amazon SQS 金鑰**加密`CellProvisioning`設定。

*5. 實作協調器*

開發 Step Functions 工作流程，做為路由器`Orchestrator`的 。工作流程可透過儲存格路由器 API 呼叫。工作流程會根據資源路徑執行指定的 Lambda 函數。將步驟函數與儲存格路由器 的 API Gateway API 整合`CellRouter`，並設定呼叫 Lambda 函數所需的許可。

下圖顯示工作流程。選擇狀態會叫用其中一個 Lambda 函數。如果 Lambda 函數成功，工作流程會結束。如果 Lambda 函數失敗，則會呼叫失敗狀態。

![工作流程圖表，其中包含四個函數，並以失敗狀態結束。](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/patterns/images/pattern-img/fd2fbf9d-9ae4-4c27-bc32-cf117350137a/images/cfe8d029-6f30-49a1-aaad-cad503bdcbae.png)


*6. 實作 Lambda 函數*

實作 `Dispatcher`、`Scaler`、 `Mapper`和 `Validator`函數。當您在示範中設定每個函數時，請定義函數的角色，並指派在 DynamoDB 資料表 上執行必要操作的必要許可`tbl_router`。此外，將每個 函數整合到工作流程 `Orchestrator`。

*Dispatcher 函數*

`Dispatcher` 函數負責識別和指派每個新註冊使用者的單一靜態儲存格。當新使用者向 全域應用程式註冊時，請求會移至 `Dispatcher`函數。函數會使用預先定義的評估條件來處理請求，如下所示：

1. **區域** ‒ 選取使用者所在市場中的儲存格。例如，如果使用者從歐洲存取 全域應用程式，請選取 AWS 區域 在歐洲使用 的儲存格。

1. **鄰近性或延遲** ‒ 選取最接近使用者的儲存格 例如，如果使用者從荷蘭存取應用程式，則函數會考慮使用法蘭克福和愛爾蘭的儲存格。有關哪個儲存格最接近的決定是根據指標，例如使用者位置與儲存格區域之間的延遲。在此範例模式中，資訊會從佈建和部署層靜態饋送。

1. **運作**狀態 ‒ `Dispatcher`函數會根據提供的儲存格狀態檢查選取的儲存格是否正常運作 （運作狀態 = true 或 false)。

1. **容量** ‒ 使用者分佈是以*儲存格邏輯中最少的使用者數量*為基礎，因此會將使用者指派給擁有最少使用者數量的儲存格。

**注意**  
這些條件僅用於解釋此範例模式。對於實際的儲存格路由器實作，您可以定義更精簡和使用案例型條件。

會`Orchestrator`叫用 Dispatcher 函數，將使用者指派給儲存格。在此示範函數中，市場值是定義為 的靜態參數`europe`。

`Dispatcher` 函數會評估儲存格是否已指派給使用者。如果已指派儲存格，則`Dispatcher`函數會傳回儲存格的端點。如果未將儲存格指派給使用者，則函數會搜尋使用者數目最少的儲存格，將其指派給使用者，並傳回端點。使用全域次要索引來最佳化儲存格搜尋查詢的效率。

*Mapper 函數*

`Mapper` 函數會監督資料庫中user-to-cell映射的儲存和維護。單一儲存格會配置給每個已註冊的使用者。每個儲存格有兩個不同的 URLs每個 AWS 區域各一個。做為 API Gateway 上託管的 API 端點，這些 URLs 可做為全域應用程式的傳入點。

當`Mapper`函數從用戶端應用程式接收請求時，它會在 DynamoDB 資料表上執行查詢`tbl_router`，以擷取與提供的電子郵件 ID 相關聯的user-to-cell映射。如果找到指派的儲存格，`Mapper`函數會立即提供儲存格的兩個 URLs。該`Mapper`函數也會主動監控儲存格 URLs 的變更，並啟動使用者設定的通知或更新。

*Scaler 函數*

`Scaler` 函數會管理儲存格的剩餘容量。對於每個新的使用者註冊請求，`Scaler`函數會評估`Dispatcher`函數指派給使用者的儲存格的可用容量。如果儲存格已根據指定的評估條件達到其預定限制，則函數會透過 Amazon SQS 佇列向佈建和部署層啟動請求，請求佈建和部署新儲存格。儲存格的擴展可以根據一組評估條件執行，如下所示：

1. **使用者上限** ‒ 每個儲存格最多可有 500 個使用者。

1. **緩衝容量** ‒ 每個儲存格的緩衝容量為 20%，這表示每個儲存格可以隨時指派給 400 個使用者。剩餘的 20% 緩衝區容量會保留給未來的使用案例和非預期案例的處理 （例如，當儲存格建立和佈建服務無法使用時）。

1. **儲存格建立** – 只要現有儲存格達到容量的 70%，就會觸發 請求來建立額外的儲存格。

**注意**  
這些條件僅用於解釋此範例模式。對於實際的儲存格路由器實作，您可以定義更精簡和使用案例型條件。

示範`Scaler`程式碼會在 `Dispatcher`成功將儲存格指派給新註冊的使用者`Orchestrator`後，由 執行。從 收到儲存格 ID 時`Scaler`， 會根據預先定義的評估條件，`Dispatcher`評估指定的儲存格是否有足夠的容量可容納其他使用者。如果儲存格容量不足，`Scaler`函數會將訊息分派給 Amazon SQS 服務。佈建和部署層內的服務會擷取此訊息，以啟動新儲存格的佈建。

**驗證器函數**

此`Validator`函數可識別並解決與儲存格存取相關的問題。當使用者登入全域應用程式時，應用程式會從使用者設定檔設定擷取儲存格的 URLs，並將使用者請求路由到儲存格中兩個指派區域的其中之一。如果無法存取 URLs，應用程式可以將驗證 URL 請求分派至儲存格路由器。cell-router 會`Orchestrator`叫用 `Validator`。會`Validator`啟動驗證程序。除了其他檢查之外，驗證可能包括下列項目：
+ 請求中的交互參考儲存格 URLs 與存放在資料庫中URLs，以識別和處理潛在的更新
+ 執行深層運作狀態檢查 （例如，對儲存格端點的`HTTP GET`請求）

總之， `Validator`函數會回應用戶端應用程式請求，並提供驗證狀態以及任何必要的修補步驟。

`Validator` 旨在增強使用者體驗。假設某些使用者在存取全域應用程式時遇到困難，因為事件導致儲存格暫時無法使用。`Validator` 函數可以提供教學性的修復步驟，而不是呈現一般錯誤。這些步驟可能包括下列動作：
+ 將事件通知使用者。
+ 在服務可用性之前提供大約的等待時間。
+ 提供用於取得其他資訊的支援聯絡電話。

`Validator` 函數的示範程式碼會驗證請求中使用者提供的儲存格 URLs 是否符合`tbl_router`資料表中存放的記錄。`Validator` 函數也會檢查儲存格是否正常運作。