

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Configura un router cellulare serverless per un'architettura basata su celle
<a name="serverless-cell-router-architecture"></a>

*Mian Tariq e Ioannis Lioupras, Amazon Web Services*

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

In quanto punto di accesso a un sistema globale di applicazioni basate su celle, il router cellulare è responsabile dell'assegnazione efficiente degli utenti alle celle appropriate e della fornitura degli endpoint agli utenti. Il router cellulare gestisce funzioni come la memorizzazione delle user-to-cell mappature, il monitoraggio della capacità delle celle e la richiesta di nuove celle quando necessario. È importante mantenere la funzionalità del router cellulare durante potenziali interruzioni.

Il framework di progettazione cell-router in questo modello si concentra su resilienza, scalabilità e ottimizzazione complessiva delle prestazioni. Il modello utilizza il routing statico, in cui i client memorizzano nella cache gli endpoint al momento dell'accesso iniziale e comunicano direttamente con le celle. Questo disaccoppiamento migliora la resilienza del sistema contribuendo a garantire la funzionalità ininterrotta dell'applicazione basata su celle in caso di problemi tra cellulare e router.

Questo modello AWS CloudFormation utilizza un modello per implementare l'architettura. Per informazioni dettagliate su ciò che viene distribuito dal modello o per distribuire la stessa configurazione utilizzando il Console di gestione AWS, consulta la sezione Informazioni [aggiuntive](#serverless-cell-router-architecture-additional).

**Importante**  
La dimostrazione, il codice e il CloudFormation modello presentati in questo modello hanno solo scopo esplicativo. Il materiale fornito ha il solo scopo di illustrare il modello di progettazione e di facilitarne la comprensione. La demo e il codice non sono pronti per la produzione e non devono essere utilizzati per attività di produzione dal vivo. Qualsiasi tentativo di utilizzare il codice o la demo in un ambiente di produzione è fortemente sconsigliato ed è a rischio dell'utente. Consigliamo di consultare i professionisti appropriati e di eseguire test approfonditi prima di implementare questo modello o uno qualsiasi dei suoi componenti in un ambiente di produzione.

## Prerequisiti e limitazioni
<a name="serverless-cell-router-architecture-prereqs"></a>

**Prerequisiti**
+ Un account Amazon Web Services (AWS) attivo
+ L'ultima versione di [AWS Command Line Interface (AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html))
+ [Credenziali AWS](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html) con le autorizzazioni necessarie per creare lo CloudFormation stack, AWS Lambda le funzioni e le risorse correlate

**Versioni del prodotto**
+ Python 3.12

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

Il diagramma seguente mostra un design di alto livello del router cellulare.

![\[Il processo in cinque fasi del router cellulare.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/fd2fbf9d-9ae4-4c27-bc32-cf117350137a/images/feb90b51-dd91-483b-b5a3-b0a5359686e3.png)


Il diagramma illustra il seguente flusso di lavoro:

1. L'utente contatta Amazon API Gateway, che funge da interfaccia per gli endpoint API cell-router.

1. Amazon Cognito gestisce l'autenticazione e l'autorizzazione.

1. Il AWS Step Functions flusso di lavoro è composto dai seguenti componenti:
   + **Orchestrator** ‒ Gli `Orchestrator` usi AWS Step Functions per creare un flusso di lavoro o una macchina a stati. Il flusso di lavoro viene attivato dall'API del router cellulare. `Orchestrator`Esegue le funzioni Lambda in base al percorso della risorsa.
   + **Dispatcher** ‒ La funzione `Dispatcher` Lambda identifica e assegna una cella statica per ogni nuovo utente registrato. La funzione cerca la cella con il minor numero di utenti, la assegna all'utente e restituisce gli endpoint.
   + **Mapper** ‒ L'`Mapper`operazione gestisce le user-to-cell mappature all'interno del database `RoutingDB` Amazon DynamoDB creato dal modello. CloudFormation Quando viene attivata, la `Mapper` funzione fornisce agli utenti già assegnati i propri endpoint.
   + **Scaler** ‒ La `Scaler` funzione tiene traccia dell'occupazione delle celle e della capacità disponibile. Se necessario, la `Scaler` funzione può inviare una richiesta tramite Amazon Simple Queue Service (Amazon SQS) al livello Provision and Deploy per richiedere nuove celle.
   + **Validator** ‒ La `Validator` funzione convalida gli endpoint delle celle e rileva eventuali problemi.

1. `RoutingDB`Memorizza le informazioni e gli attributi delle celle (endpoint API, stato Regione AWS, metriche).

1. Quando la capacità disponibile delle celle supera una soglia, il router cellulare richiede servizi di provisioning e distribuzione tramite Amazon SQS per creare nuove celle.

Quando vengono create nuove celle, `RoutingDB` viene aggiornato dal livello Provision and Deploy. Tuttavia, tale processo non rientra nell'ambito di questo modello. Per una panoramica dei presupposti di progettazione dell'architettura basata su celle e dettagli sul design cell-router utilizzato in questo modello, vedere la sezione Informazioni [aggiuntive](#serverless-cell-router-architecture-additional).

## Tools (Strumenti)
<a name="serverless-cell-router-architecture-tools"></a>

**Servizi AWS**
+ [Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html) ti aiuta a creare, pubblicare, gestire, monitorare e proteggere REST, HTTP e WebSocket APIs su qualsiasi scala.
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)ti aiuta a configurare AWS le risorse, fornirle in modo rapido e coerente e gestirle durante tutto il loro ciclo di vita attraverso Account AWS e. Regioni AWS
+ [Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/what-is-amazon-cognito.html) fornisce autenticazione, autorizzazione e gestione degli utenti per app Web e mobili.
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) è un servizio di database NoSQL interamente gestito che offre prestazioni elevate, prevedibili e scalabili.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) è un servizio di calcolo che consente di eseguire il codice senza gestire i server o effettuarne il provisioning. Esegue il codice solo quando necessario e si ridimensiona automaticamente, quindi paghi solo per il tempo di elaborazione che utilizzi.
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) è un servizio di archiviazione degli oggetti basato sul cloud che consente di archiviare, proteggere e recuperare qualsiasi quantità di dati.
+ [Amazon Simple Queue Service (Amazon SQS](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/welcome.html)) fornisce una coda ospitata sicura, durevole e disponibile che ti aiuta a integrare e disaccoppiare sistemi e componenti software distribuiti.
+ [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html)è un servizio di orchestrazione serverless che consente di combinare funzioni Lambda e altro Servizi AWS per creare applicazioni aziendali critiche.

**Altri strumenti**
+ [Python](https://www.python.org/) è un linguaggio di programmazione per computer generico.

**Deposito di codice**

Il codice per questo pattern è disponibile nel repository GitHub [Serverless-Cell-Router](https://github.com/aws-samples/Serverless-Cell-Router/). 

## Best practice
<a name="serverless-cell-router-architecture-best-practices"></a>

Per le migliori pratiche per la creazione di architetture basate su celle, consulta la seguente guida Well-Architected AWS :
+ [Ridurre l'ambito di impatto con l'architettura basata su celle](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 Reliability Pillar REL1: 0-BP04 Utilizza architetture bulkhead per limitare l'ambito dell'impatto](https://docs.aws.amazon.com/wellarchitected/latest/reliability-pillar/rel_fault_isolation_use_bulkhead.html)

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

### Prepara i file sorgente
<a name="prepare-source-files"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Clona il repository di codice di esempio. | Per clonare il Serverless-Cell-Router GitHub repository sul tuo computer, usa il seguente comando:<pre>git clone https://github.com/aws-samples/Serverless-Cell-Router/</pre> | Developer | 
| Imposta credenziali AWS CLI temporanee. | Configura il AWS CLI con le credenziali per il tuo. Account AWS Questa procedura dettagliata utilizza credenziali temporanee fornite dalla riga di **comando di AWS IAM Identity Center o dall'opzione di accesso programmatico**. In questo modo vengono impostate le variabili `AWS_ACCESS_KEY_ID``AWS_SECRET_ACCESS_KEY`, e di `AWS_SESSION_TOKEN` AWS ambiente con le credenziali appropriate da utilizzare con. AWS CLI | Developer | 
| Crea un bucket S3. | Crea un bucket S3 che verrà utilizzato per archiviare e accedere alle funzioni Serverless-Cell-Router Lambda per la distribuzione tramite il modello. CloudFormation Per creare il bucket S3, usa il seguente comando: <pre>aws s3api create-bucket --bucket <bucket name> --region eu-central-1 --create-bucket-configuration LocationConstraint=eu-central-1</pre> | Developer | 
| Crea file.zip. | [Crea un file.zip per ogni funzione Lambda che si trova nella directory Functions.](https://github.com/aws-samples/Serverless-Cell-Router/tree/main/Functions) Questi file.zip verranno utilizzati per distribuire le funzioni Lambda. Su un Mac, usa i seguenti comandi: `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> | Developer | 
| Copia i file.zip nel bucket S3. | Per copiare tutti i file.zip della funzione Lambda nel bucket S3, usa i seguenti comandi:<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> | Developer | 

### Crea lo stack CloudFormation
<a name="create-the-cfn-stack"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Implementa il CloudFormation modello. | Per distribuire il CloudFormation modello, esegui il comando seguente: 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> | Developer | 
| Verifica lo stato di avanzamento. | Accedi a Console di gestione AWS, apri la CloudFormation console all'indirizzo [https://console.aws.amazon.com/cloudformation/]()e controlla lo stato di avanzamento dello sviluppo dello stack. Quando lo stato è`CREATE_COMPLETE`, lo stack è stato distribuito correttamente. | Developer | 

### Valuta e verifica
<a name="assess-and-verify"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Assegna celle all'utente. | Per avviare il`Orchestrator`, esegui il seguente comando 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>`Orchestrator`Attiva l'esecuzione della funzione. `Dispatcher` A sua volta, verifica l'esistenza dell'utente. `Dispatcher` Se l'utente viene trovato, `Dispatcher` restituisce l'ID della cella e l'endpoint URLs associati. Se l'utente non viene trovato, gli `Dispatcher` assegna una cella e invia l'ID della cella alla `Scaler` funzione per la valutazione della capacità residua della cella assegnata.La risposta della `Scaler` funzione è la seguente:`"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/"` | Developer | 
| Recupera le celle utente. | Per utilizzare la funzione `Orchestrator` per eseguire la `Mapper` funzione, esegui il comando seguente:<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>`Orchestrator`Cerca la cella assegnata all'utente e restituisce l'ID della cella e URLs nella seguente risposta:`"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/"` | Developer | 

### Eliminazione
<a name="clean-up"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Elimina le risorse. | Per evitare di incorrere in costi aggiuntivi sul tuo account, procedi come segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/serverless-cell-router-architecture.html) | Sviluppatore di app | 

## Risorse correlate
<a name="serverless-cell-router-architecture-resources"></a>

**Riferimenti**
+ [Stabilità statica con le zone di disponibilità](https://aws.amazon.com/builders-library/static-stability-using-availability-zones/)
+ [Limiti dell'isolamento dei guasti di AWS: stabilità statica](https://docs.aws.amazon.com/whitepapers/latest/aws-fault-isolation-boundaries/static-stability.html)

**Video**

[Physalia: architettura basata su celle per fornire una maggiore disponibilità su Amazon EBS](https://www.youtube.com/watch?v=6IknqRZMFic) 




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

## Informazioni aggiuntive
<a name="serverless-cell-router-architecture-additional"></a>

**Premesse di progettazione dell'architettura basata su celle**

Sebbene questo modello si concentri sul router cellulare, è importante comprendere l'intero ambiente. L'ambiente è strutturato in tre livelli distinti:
+ Il livello di routing, o Thin layer, che contiene il router cellulare
+ Lo strato cellulare, che comprende varie celle
+ Il livello Provision and Deploy, che effettua il provisioning delle celle e distribuisce l'applicazione

Ogni livello mantiene la funzionalità anche in caso di alterazioni che interessano altri livelli. Account AWS fungono da limite di isolamento dei guasti.

Il diagramma seguente mostra i livelli ad alto livello. Il livello Cell e il livello Provision and Deploy non rientrano nell'ambito di questo modello.

![\[Il livello Routing, il livello Cell con più account di celle e il livello Provision and Deploy.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/fd2fbf9d-9ae4-4c27-bc32-cf117350137a/images/137ac34d-43c3-42b6-95de-a365ff611ce8.png)


Per ulteriori informazioni sull'architettura basata su celle, vedere [Riduzione dell'ambito di impatto con l'architettura basata su celle: routing delle celle](https://docs.aws.amazon.com/wellarchitected/latest/reducing-scope-of-impact-with-cell-based-architecture/cell-routing.html).

**Modello di progettazione Cell-router**

Il router cellulare è un componente condiviso tra le celle. Per mitigare i potenziali impatti, è importante che il livello di routing utilizzi un design semplicistico e scalabile orizzontalmente che sia il più sottile possibile. Il livello di routing, che funge da punto di ingresso del sistema, è costituito solo dai componenti necessari per assegnare in modo efficiente gli utenti alle celle appropriate. I componenti di questo livello non si occupano della gestione o della creazione di celle.

Questo modello utilizza il routing statico, il che significa che il client memorizza nella cache gli endpoint all'accesso iniziale e successivamente stabilisce una comunicazione diretta con la cella. Vengono avviate interazioni periodiche tra il client e il router cellulare per confermare lo stato corrente o recuperare eventuali aggiornamenti. Questo disaccoppiamento intenzionale consente operazioni ininterrotte per gli utenti esistenti in caso di inattività del router e fornisce funzionalità e resilienza continue all'interno del sistema.

In questo modello, il router cellulare supporta le seguenti funzionalità:
+ Recupero dei dati delle celle dal database delle celle nel livello Provision and Deploy e archiviazione o aggiornamento del database locale.
+ Assegnazione di una cella a ogni nuovo utente registrato dell'applicazione utilizzando l'algoritmo di assegnazione delle celle.
+ Memorizzazione della user-to-cells mappatura nel database locale.
+ Verifica della capacità delle celle durante l'assegnazione dell'utente e trasmissione di un evento per il distributore automatico al livello Provision and Deploy per creare celle.
+ Utilizzo dell'algoritmo dei criteri di creazione delle celle per fornire questa funzionalità.
+ Rispondere alle richieste degli utenti appena registrati fornendo le URLs celle statiche. Queste URLs verranno memorizzate nella cache del client con un time to live (TTL).
+ Rispondere alle richieste degli utenti esistenti di un URL non valido fornendo un URL nuovo o aggiornato.

Per comprendere meglio il router cellulare dimostrativo configurato dal CloudFormation modello, esamina i seguenti componenti e passaggi:

1. Configura e configura il pool di utenti di Amazon Cognito.

1. Configura e configura l'API API Gateway per il router cellulare.

1. Crea una tabella DynamoDB.

1. Crea e configura una coda SQS.

1. Implementa il. `Orchestrator`

1. Implementa le funzioni Lambda:`Dispatcher`,,`Scaler`,`Mapper`. `Validator`

1. Valuta e verifica.

Il presupposto è che il livello Provision and Deploy sia già stabilito. I dettagli di implementazione non rientrano nell'ambito di questo artefatto.

Poiché questi componenti sono impostati e configurati da un CloudFormation modello, i passaggi seguenti vengono presentati a un livello descrittivo e di alto livello. Il presupposto è che l'utente disponga delle AWS competenze necessarie per completare l'installazione e la configurazione.

*1. Imposta e configura il pool di utenti di Amazon Cognito*

Accedi a e apri Console di gestione AWS la console Amazon Cognito all'indirizzo. [https://console.aws.amazon.com/cognito/]() Configura e configura un pool di utenti Amazon Cognito denominato`CellRouterPool`, con integrazione di app, interfaccia utente ospitata e le autorizzazioni necessarie.

*2. Configurare e configurare l'API API Gateway per il router cellulare*

Apri la console API Gateway all'indirizzo [https://console.aws.amazon.com/apigateway/](). Configura e configura un'API denominata`CellRouter`, utilizzando un autorizzatore Amazon Cognito integrato con il pool di utenti di Amazon Cognito. `CellRouterPool` Implementa i seguenti elementi:
+ `CellRouter`Risorse API, inclusi `POST` i metodi
+ Integrazione con il flusso di lavoro Step Functions implementato nella fase 5
+ Autorizzazione tramite l'autorizzatore Amazon Cognito
+ Mappature delle richieste di integrazione e delle risposte
+ Assegnazione delle autorizzazioni necessarie

*3. Creare una tabella DynamoDB*

Apri la console DynamoDB [https://console.aws.amazon.com/dynamodb/]()all'indirizzo e crea una tabella DynamoDB standard chiamata con la seguente configurazione: `tbl_router`
+ **Chiave di partizione ‒** `marketId`
+ **Chiave di ordinamento ‒** `cellId`
+ **Modalità di capacità** ‒ Fornito
+ **Point-in-time recovery (PITR) ‒ Disattivato**

Nella scheda **Indici**, crea un indice secondario globale chiamato. `marketId-currentCapacity-index` La funzione `Scaler` Lambda utilizzerà l'indice per condurre ricerche efficienti per la cella con il minor numero di utenti assegnati.

Crea la struttura della tabella con i seguenti attributi:
+ `marketId`‒ Europa
+ `cellId`‒ cell-0002
+ `currentCapacity`‒ 2
+ `endPoint_1`‒ <your endpoint for the first Region>
+ `endPoint_2`‒ <your endpoint for the second Region>
+ `IsHealthy`‒ Vero
+ `maxCapacity`‒ 10
+ `regionCode_1` ‒ `eu-north-1`
+ `regionCode_2` ‒ `eu-central-1`
+ `userIds`‒ <your email address>

*4. Creare e configurare una coda SQS*

**Apri la console Amazon SQS all'indirizzo [https://console.aws.amazon.com/sqs/]()e crea una coda SQS standard chiamata crittografia a chiave Amazon SQS configurata con `CellProvisioning` Amazon SQS.**

*5. Implementa l'Orchestrator*

Sviluppa un flusso di lavoro Step Functions che funga da flusso di lavoro `Orchestrator` per il router. Il flusso di lavoro è richiamabile tramite l'API del router cellulare. Il flusso di lavoro esegue le funzioni Lambda designate in base al percorso della risorsa. Integra la funzione step con l'API Gateway API per il router `CellRouter` cellulare e configura le autorizzazioni necessarie per richiamare le funzioni Lambda.

Il diagramma seguente mostra il flusso di lavoro. Lo stato di scelta richiama una delle funzioni Lambda. Se la funzione Lambda ha esito positivo, il flusso di lavoro termina. Se la funzione Lambda fallisce, viene chiamato lo stato fail.

![\[Un diagramma del flusso di lavoro con le quattro funzioni e che termina con uno stato di errore.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/fd2fbf9d-9ae4-4c27-bc32-cf117350137a/images/cfe8d029-6f30-49a1-aaad-cad503bdcbae.png)


*6. Implementa le funzioni Lambda*

Implementa le `Validator` funzioni `Dispatcher` `Mapper``Scaler`,, e. Quando imposti e configuri ciascuna funzione nella dimostrazione, definisci un ruolo per la funzione e assegna le autorizzazioni necessarie per eseguire le operazioni richieste sulla tabella DynamoDB. `tbl_router` Inoltre, integra ogni funzione nel flusso di lavoro. `Orchestrator`

*Funzione Dispatcher*

La `Dispatcher` funzione è responsabile dell'identificazione e dell'assegnazione di una singola cella statica per ogni nuovo utente registrato. Quando un nuovo utente si registra con l'applicazione globale, la richiesta viene inviata alla `Dispatcher` funzione. La funzione elabora la richiesta utilizzando criteri di valutazione predefiniti come i seguenti:

1. **Regione** ‒ Seleziona la cella nel mercato in cui si trova l'utente. Ad esempio, se l'utente accede all'applicazione globale dall'Europa, seleziona una cella che utilizza Regioni AWS in Europa.

1. **Prossimità o latenza** ‒ Seleziona la cella più vicina all'utente Ad esempio, se l'utente accede all'applicazione dall'Olanda, la funzione considera una cella che utilizza Francoforte e l'Irlanda. La decisione relativa alla cella più vicina si basa su metriche come la latenza tra la posizione dell'utente e le regioni della cella. Per questo modello di esempio, le informazioni vengono alimentate staticamente dal livello Provision and Deploy.

1. **Health** ‒ La `Dispatcher` funzione verifica se la cella selezionata è integra in base allo stato della cella fornito (Healthy = true o false).

1. **Capacità** ‒ La distribuzione degli utenti si basa sul *numero minimo di utenti in una logica cellulare*, quindi l'utente viene assegnato alla cella con il minor numero di utenti.

**Nota**  
Questi criteri vengono presentati solo per spiegare questo modello di esempio. Per un'implementazione di un router cellulare nella vita reale, è possibile definire criteri più raffinati e utilizzare criteri basati su casi.

`Orchestrator`Richiama la funzione Dispatcher per assegnare gli utenti alle celle. In questa funzione demo, il valore di mercato è un parametro statico definito come. `europe`

La `Dispatcher` funzione valuta se una cella è già assegnata all'utente. Se la cella è già assegnata, la `Dispatcher` funzione restituisce gli estremi della cella. Se all'utente non è assegnata alcuna cella, la funzione cerca la cella con il minor numero di utenti, la assegna all'utente e restituisce gli endpoint. L'efficienza della query di ricerca delle celle è ottimizzata utilizzando l'indice secondario globale.

*Funzione Mapper*

La `Mapper` funzione sovrintende alla memorizzazione e alla manutenzione delle user-to-cell mappature nel database. Una singola cella viene assegnata a ciascun utente registrato. Ogni cella ne ha due distinte URLs, una per ogni regione AWS. Fungendo da endpoint API ospitati su API Gateway, URLs funzionano come punti in entrata verso l'applicazione globale.

Quando la `Mapper` funzione riceve una richiesta dall'applicazione client, esegue una query sulla `tbl_router` tabella DynamoDB per recuperare user-to-cell la mappatura associata all'ID e-mail fornito. Se trova una cella assegnata, la `Mapper` funzione fornisce prontamente le due della cella. URLs La `Mapper` funzione monitora inoltre attivamente le modifiche alla cella URLs e avvia notifiche o aggiornamenti alle impostazioni dell'utente.

*Funzione Scaler*

La `Scaler` funzione gestisce la capacità residua della cella. Per ogni nuova richiesta di registrazione utente, la `Scaler` funzione valuta la capacità disponibile della cella assegnata dalla `Dispatcher` funzione all'utente. Se la cella ha raggiunto il limite predeterminato in base ai criteri di valutazione specificati, la funzione avvia una richiesta tramite una coda Amazon SQS al livello Provision and Deploy, richiedendo il provisioning e l'implementazione di nuove celle. Il ridimensionamento delle celle può essere eseguito in base a una serie di criteri di valutazione come i seguenti:

1. **Numero massimo di utenti** ‒ Ogni cella può avere un numero massimo di utenti 500.

1. **Capacità buffer** ‒ La capacità buffer di ogni cella è del 20 percento, il che significa che ogni cella può essere assegnata a 400 utenti in qualsiasi momento. Il restante 20% della capacità buffer è riservato a casi d'uso futuri e alla gestione di scenari imprevisti (ad esempio, quando i servizi di creazione e provisioning delle celle non sono disponibili).

1. **Creazione di celle** ‒ Non appena una cella esistente raggiunge il 70 percento della capacità, viene attivata una richiesta per creare una cella aggiuntiva.

**Nota**  
Questi criteri vengono presentati solo per spiegare questo modello di esempio. Per un'implementazione di un router cellulare nella vita reale, è possibile definire criteri più raffinati e utilizzare criteri basati su casi.

Il `Scaler` codice dimostrativo viene eseguito da `Orchestrator` after che assegna `Dispatcher` correttamente una cella all'utente appena registrato. Al ricevimento dell'ID della cella da`Dispatcher`, valuta se la cella designata ha una capacità adeguata per ospitare utenti aggiuntivi, sulla base di criteri di valutazione predefiniti. `Scaler` Se la capacità della cella è insufficiente, la `Scaler` funzione invia un messaggio al servizio Amazon SQS. Questo messaggio viene recuperato dal servizio all'interno del livello Provision and Deploy, avviando il provisioning di una nuova cella.

**Funzione di validazione**

La `Validator` funzione identifica e risolve i problemi relativi all'accesso alle celle. Quando un utente accede all'applicazione globale, l'applicazione recupera le celle URLs dalle impostazioni del profilo utente e indirizza le richieste degli utenti a una delle due regioni assegnate all'interno della cella. Se URLs sono inaccessibili, l'applicazione può inviare una richiesta URL di convalida al router cellulare. Il `Orchestrator` cell-router richiama il. `Validator` `Validator`Avvia il processo di convalida. La convalida può includere, tra gli altri controlli, quanto segue:
+ Cella con riferimenti incrociati URLs nella richiesta e URLs memorizzata nel database per identificare ed elaborare potenziali aggiornamenti
+ Esecuzione di un controllo approfondito dello stato (ad esempio, una `HTTP GET` richiesta all'endpoint della cella)

In conclusione, la `Validator` funzione fornisce risposte alle richieste delle applicazioni dei clienti, fornendo lo stato di convalida e le eventuali misure correttive necessarie.

`Validator`È progettato per migliorare l'esperienza dell'utente. Prendiamo in considerazione uno scenario in cui alcuni utenti incontrano difficoltà ad accedere all'applicazione globale perché un incidente causa la temporanea indisponibilità delle celle. Invece di presentare errori generici, la `Validator` funzione può fornire istruzioni per la correzione. Questi passaggi potrebbero includere le seguenti azioni:
+ Informare gli utenti sull'incidente.
+ Fornisci un tempo di attesa approssimativo prima della disponibilità del servizio.
+ Fornisci un numero di contatto dell'assistenza per ottenere ulteriori informazioni.

Il codice demo della `Validator` funzione verifica che la cella fornita dall'utente URLs nella richiesta corrisponda ai record memorizzati nella `tbl_router` tabella. La `Validator` funzione verifica anche se le cellule sono sane.