

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Configuración de un router de celdas sin servidor para una arquitectura basada en celdas
<a name="serverless-cell-router-architecture"></a>

*Mian Tariq and Ioannis Lioupras, Amazon Web Services*

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

Como punto de entrada al sistema de una aplicación global basada en células, el enrutador de celdas es responsable de asignar de manera eficiente los usuarios a las celdas adecuadas y de proporcionar los puntos de conexión a los usuarios. El enrutador de celdas maneja funciones tales como almacenar user-to-cell mapeos, monitorear la capacidad de la celda y solicitar nuevas celdas cuando sea necesario. Es importante mantener la funcionalidad del router de celdas durante interrupciones posibles.

El marco de diseño de los enrutadores de celdas de este patrón se centra en la resiliencia, la escalabilidad y la optimización general del rendimiento. El patrón utiliza un enrutamiento estático, en el que los clientes almacenan en caché los puntos de conexión al iniciar sesión por primera vez y se comunican directamente con las celdas. Esta disociación mejora la resiliencia del sistema, ya que ayuda a garantizar la funcionalidad ininterrumpida de la aplicación basada en celdas durante una afectación del router de celdas.

Este patrón utiliza una AWS CloudFormation plantilla para implementar la arquitectura. Para obtener detalles sobre lo que implementa la plantilla o para implementar la misma configuración mediante el Consola de administración de AWS, consulte la sección de [información adicional](#serverless-cell-router-architecture-additional).

**importante**  
La demostración, el código y la CloudFormation plantilla que se presentan en este patrón tienen únicamente fines explicativos. El material proporcionado tiene la finalidad única de ilustrar el patrón de diseño y ayudar a la comprensión. La demostración y el código no están listos para la producción y no deben utilizarse para ninguna actividad de producción en directo. Se recomienda no utilizar el código o la demostración en un entorno de producción. Hacerlo será bajo su propia responsabilidad. Recomendamos consultar con los profesionales adecuados y hacer pruebas exhaustivas antes de implementar este patrón o sus componentes en un entorno de producción.

## Requisitos previos y limitaciones
<a name="serverless-cell-router-architecture-prereqs"></a>

**Requisitos previos **
+ Una cuenta de Amazon Web Services (AWS) activa
+ La última versión de [AWS Command Line Interface (AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html))
+ [Credenciales de AWS](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html) con los permisos necesarios para crear la CloudFormation pila, AWS Lambda las funciones y los recursos relacionados

**Versiones de producto**
+ Python 3.12

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

En el diagrama siguiente se muestra un diseño general del router de celdas.

![El proceso de cinco pasos del enrutador de celdas.](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/fd2fbf9d-9ae4-4c27-bc32-cf117350137a/images/feb90b51-dd91-483b-b5a3-b0a5359686e3.png)


En el diagrama se muestra el flujo de trabajo siguiente:

1. El usuario se pone en contacto con Amazon API Gateway, que sirve de interfaz para los puntos de conexión de la API del router de celdas.

1. Amazon Cognito gestiona la autenticación y la autorización.

1. El AWS Step Functions flujo de trabajo consta de los siguientes componentes:
   + **Orchestrator**: se `Orchestrator` utiliza AWS Step Functions para crear un flujo de trabajo o una máquina de estados. La API del router de celdas desencadena el flujo de trabajo. `Orchestrator` ejecuta funciones de Lambda según la ruta del recurso.
   + **Dispatcher**: la función `Dispatcher` de Lambda identifica y asigna una celda estática por cada usuario registrado nuevo. La función busca la celda con el menor número de usuarios, la asigna al usuario y devuelve los puntos de conexión.
   + **Mapper** ‒ La `Mapper` operación gestiona las user-to-cell asignaciones dentro de la base de datos `RoutingDB` Amazon DynamoDB creada por la plantilla. CloudFormation Cuando se desencadena, la función `Mapper` proporciona sus puntos de conexión a los usuarios ya asignados.
   + **Scaler**: la función `Scaler` hace un seguimiento de la ocupación de las celdas y de la capacidad disponible. Cuando sea necesario, la función `Scaler` puede enviar una solicitud a través de Amazon Simple Queue Service (Amazon SQS) a la capa de aprovisionamiento e implementación para solicitar celdas nuevas.
   + **Validator**: la función `Validator` valida los puntos de conexión de las celdas y detecta problemas posibles.

1. `RoutingDB`Almacena la información y los atributos de las celdas (puntos finales de la API, estado, Región de AWS métricas).

1. Cuando la capacidad disponible de las celdas supera un umbral, el router de celdas solicita servicios de aprovisionamiento e implementación a través de Amazon SQS para crear celdas nuevas.

Cuando se crean celdas nuevas, `RoutingDB` se actualiza desde la capa de aprovisionamiento e implementación. Sin embargo, ese proceso está fuera del ámbito de este patrón. Para obtener información general de las premisas de diseño de la arquitectura basada en celdas y detalles sobre el diseño del router de celdas que se utiliza en este patrón, consulte la sección [Información adicional](#serverless-cell-router-architecture-additional).

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

**Servicios de AWS**
+ [Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html) le ayuda a crear, publicar, mantener, supervisar y proteger REST, HTTP y WebSocket APIs a cualquier escala.
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)le ayuda a configurar AWS los recursos, aprovisionarlos de forma rápida y coherente y gestionarlos a lo largo de su ciclo de vida en todo el Cuentas de AWS mundo Regiones de AWS.
+ [Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/what-is-amazon-cognito.html) ofrece autenticación, autorización y administración de usuarios para aplicaciones móviles y web.
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) es un servicio de base de datos de NoSQL completamente administrado que ofrece un rendimiento rápido, predecible y escalable.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) es un servicio de computación que ayuda a ejecutar código sin necesidad de aprovisionar ni administrar servidores. Ejecuta el código solo cuando es necesario y amplía la capacidad de manera automática, por lo que solo pagará por el tiempo de procesamiento que utilice.
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) es un servicio de almacenamiento de objetos basado en la nube que lo ayuda a almacenar, proteger y recuperar cualquier cantidad de datos.
+ [Amazon Simple Queue Service (Amazon SQS)](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/welcome.html) ofrece una cola alojada segura, duradera y disponible que le permite integrar y desacoplar sistemas y componentes de software distribuidos.
+ [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html)es un servicio de organización sin servidor que le ayuda a combinar funciones de Lambda y otras Servicios de AWS para crear aplicaciones críticas para la empresa.

**Otras herramientas**
+ [Python](https://www.python.org/) es un lenguaje de programación informático de uso general.

**Repositorio de código**

[El código de este patrón está disponible en el repositorio Serverless-Cell-Router. GitHub ](https://github.com/aws-samples/Serverless-Cell-Router/) 

## Prácticas recomendadas
<a name="serverless-cell-router-architecture-best-practices"></a>

Para conocer las mejores prácticas a la hora de crear arquitecturas basadas en celdas, consulte la siguiente guía de Well-Architected AWS :
+ [Reducing the Scope of Impact with Cell-Based Architecture](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 Pilar de confiabilidad de un marco bien diseñado REL1: 0-BP04 Utilice arquitecturas de mamparo para limitar el alcance del impacto](https://docs.aws.amazon.com/wellarchitected/latest/reliability-pillar/rel_fault_isolation_use_bulkhead.html)

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

### Preparación del archivo de origen
<a name="prepare-source-files"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Clone el repositorio de código de muestra. | Para clonar el Serverless-Cell-Router GitHub repositorio en su ordenador, utilice el siguiente comando:<pre>git clone https://github.com/aws-samples/Serverless-Cell-Router/</pre> | Desarrollador | 
| Configure las credenciales AWS CLI temporales. | Configure el AWS CLI con las credenciales para su Cuenta de AWS. Este tutorial utiliza las credenciales temporales proporcionadas por la **línea de comandos de AWS IAM Identity Center o la opción de acceso programático**. Esto establece las variables de `AWS_SESSION_TOKEN` AWS entorno y `AWS_ACCESS_KEY_ID``AWS_SECRET_ACCESS_KEY`, con las credenciales adecuadas para su uso con. AWS CLI | Desarrollador | 
| Cree un bucket de S3. | Cree un bucket de S3 que se utilizará para almacenar y acceder a las funciones de Serverless-Cell-Router Lambda para su despliegue mediante la CloudFormation plantilla. Para crear el bucket de S3, utilice el comando siguiente: <pre>aws s3api create-bucket --bucket <bucket name> --region eu-central-1 --create-bucket-configuration LocationConstraint=eu-central-1</pre> | Desarrollador | 
| Cree los archivos .zip. | Cree un archivo .zip para cada función de Lambda ubicada en el directorio [Functions](https://github.com/aws-samples/Serverless-Cell-Router/tree/main/Functions). Estos archivos .zip se utilizarán para implementar las funciones de Lambda. En un equipo Mac, utilice los comandos `zip` siguientes:<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> | Desarrollador | 
| Copie los archivos .zip en el bucket de S3. | Para copiar todos los archivos .zip de la función de Lambda al bucket de S3, utilice los comandos siguientes:<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> | Desarrollador | 

### Cree la pila CloudFormation
<a name="create-the-cfn-stack"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Implemente la CloudFormation plantilla. | Para implementar la CloudFormation plantilla, ejecute el siguiente AWS CLI comando:<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> | Desarrollador | 
| Compruebe el progreso. | Inicia sesión en Consola de administración de AWS, abre la CloudFormation consola en [https://console.aws.amazon.com/cloudformation/]()y comprueba el progreso del desarrollo de la pila. Cuando el estado sea `CREATE_COMPLETE`, la pila se habrá implementado correctamente. | Desarrollador | 

### Evaluación y verificación
<a name="assess-and-verify"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Asigne celdas al usuario. | Para iniciar `Orchestrator`, ejecute el comando curl siguiente:<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` desencadena la ejecución de la función `Dispatcher`. `Dispatcher`, a su vez, verifica la existencia del usuario. Si se encuentra el usuario, `Dispatcher` devuelve el ID de celda y el punto final asociados URLs. Si no se encuentra al usuario, `Dispatcher` asigna una celda y envía el ID de celda a la función `Scaler` para evaluar la capacidad residual de la celda asignada.<br />La respuesta de la función `Scaler` es la siguiente:<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/"` | Desarrollador | 
| Recupere las celdas de los usuarios. | Para utilizar `Orchestrator` para ejecutar la función `Mapper`, ejecute el comando siguiente:<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`Busca la celda asignada al usuario y devuelve el ID de la celda y URLs obtiene la siguiente respuesta:<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/"` | Desarrollador | 

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


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Limpie los recursos. | Para evitar el cobro de otros cargos en su cuenta, haga lo siguiente:[See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/serverless-cell-router-architecture.html) | Desarrollador de aplicaciones | 

## Recursos relacionados
<a name="serverless-cell-router-architecture-resources"></a>

**Referencias**
+ [Estabilidad estática con zonas de disponibilidad](https://aws.amazon.com/builders-library/static-stability-using-availability-zones/)
+ [AWS Fault Isolation Boundaries: Static stability](https://docs.aws.amazon.com/whitepapers/latest/aws-fault-isolation-boundaries/static-stability.html)

**Video**

[Physalia: Cell-based Architecture to Provide Higher Availability on Amazon EBS](https://www.youtube.com/watch?v=6IknqRZMFic) 




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

## Información adicional
<a name="serverless-cell-router-architecture-additional"></a>

**Premisas de diseño de arquitectura basada en celdas**

Si bien este patrón se centra en el router de celdas, es importante comprender todo el entorno. El entorno está estructurado en tres capas discretas:
+ La capa de enrutamiento, o capa delgada, que contiene el enrutador de celdas
+ La capa de celdas, que comprende varias celdas
+ La capa de aprovisionamiento e implementación, que aprovisiona las celdas e implementa la aplicación

Cada capa mantiene su funcionalidad incluso en el caso de que las deficiencias afecten a otras capas. Cuentas de AWS sirven como límite de aislamiento de fallas.

En el diagrama siguiente se muestran las capas en un nivel general. La capa de celdas y la capa de aprovisionamiento e implementación quedan fuera del alcance de este patrón.

![La capa de enrutamiento, la capa de celdas con varias cuentas de celdas y la capa de aprovisionamiento e implementación.](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/fd2fbf9d-9ae4-4c27-bc32-cf117350137a/images/137ac34d-43c3-42b6-95de-a365ff611ce8.png)


Para más información sobre la arquitectura basada en celdas, consulte [Reducing the Scope of Impact with Cell-Based Architecture: Cell routing](https://docs.aws.amazon.com/wellarchitected/latest/reducing-scope-of-impact-with-cell-based-architecture/cell-routing.html).

**Patrón de diseño de router de celdas**

El enrutador de celdas es un componente compartido en las celdas. Para mitigar los impactos posibles, es importante que la capa de enrutamiento utilice un diseño simplista y escalable horizontalmente que sea lo más delgado posible. La capa de enrutamiento, que sirve como punto de entrada al sistema, consta solo de los componentes necesarios para asignar a los usuarios de manera eficiente a las celdas adecuadas. Los componentes de esta capa no participan en la administración ni en la creación de celdas.

Este patrón utiliza el enrutamiento estático, lo que significa que el cliente almacena los puntos de conexión en las memorias caché durante el inicio de sesión inicial y, posteriormente, establece una comunicación directa con la celda. Se inician interacciones periódicas entre el cliente y el router de celdas para confirmar el estado actual o recuperar las actualizaciones. Este desacoplamiento intencionado permite a los usuarios actuales operar sin interrupciones en caso de que haya tiempo de inactividad del router de celdas y proporciona una funcionalidad y resiliencia continuas al sistema.

En este patrón, el router de celdas admite las funcionalidades siguientes:
+ Recuperación de datos de celdas a partir de la base de datos de celdas en la capa de aprovisionamiento e implementación. Almacenamiento o actualización de la base de datos local.
+ Asignación de una celda a cada usuario registrado nuevo de la aplicación mediante el algoritmo de asignación de celdas.
+ Almacenar el user-to-cells mapeo en la base de datos local.
+ Comprobación de la capacidad de las celdas durante la asignación de usuarios. Generación de un evento para la máquina expendedora a la capa de aprovisionamiento e implementación para crear celdas.
+ Uso del algoritmo de criterios de creación de celdas para proporcionar esta funcionalidad.
+ Responder a las solicitudes de los usuarios recién registrados proporcionando URLs las celdas estáticas. Se URLs almacenarán en caché en el cliente con un tiempo de vida (TTL).
+ Respuesta a las solicitudes de los usuarios existentes sobre una URL no válida al proporcionar una URL nueva o actualizada.

Para comprender mejor el router celular de demostración que se configura mediante la CloudFormation plantilla, revise los siguientes componentes y pasos:

1. Defina y configure el grupo de usuarios de Amazon Cognito.

1. Defina y configure la API de API Gateway para el router de celdas.

1. Crear una tabla de DynamoDB.

1. Cree y configure una cola de SQS.

1. Implemente la función `Orchestrator`.

1. Implemente las funciones de Lambda: `Dispatcher`, `Scaler`, `Mapper`, `Validator`.

1. Evalúe y verifique.

El supuesto es que la capa de aprovisionamiento e implementación ya está establecida. Los detalles de su implementación quedan fuera del alcance de este artefacto.

Como estos componentes se configuran y configuran mediante una CloudFormation plantilla, los siguientes pasos se presentan de forma descriptiva y de alto nivel. Se supone que tiene los AWS conocimientos necesarios para completar la instalación y la configuración.

*1. Defina y configure el grupo de usuarios de Amazon Cognito*

Inicie sesión en y abra la Consola de administración de AWS consola de Amazon Cognito en. [https://console.aws.amazon.com/cognito/]() Defina y configure un grupo de usuarios de Amazon Cognito denominado `CellRouterPool`, con integración de aplicaciones, interfaz de usuario alojada y permisos necesarios.

*2. Defina y configure la API de API Gateway para el router de celdas*

Abra la consola de API Gateway en [https://console.aws.amazon.com/apigateway/](). Defina y configure una API denominada `CellRouter`, mediante un autorizador de Amazon Cognito integrado con el grupo de usuarios `CellRouterPool` de Amazon Cognito. Implemente los elementos siguientes:
+ Recursos de API `CellRouter`, tal como los métodos `POST`
+ Integración con el flujo de trabajo de Step Functions implementada en el paso 5
+ Autorización a través del autorizador de Amazon Cognito
+ Asignaciones de solicitudes y respuestas de integración
+ Asignación de los permisos necesarios

*3. Crear una tabla de DynamoDB*

Abra la consola de DynamoDB [https://console.aws.amazon.com/dynamodb/]()en y cree una tabla de DynamoDB estándar llamada con la siguiente configuración: `tbl_router`
+ **Clave de partición ‒** `marketId`
+ **Clave de clasificación** ‒ `cellId`
+ **Modo de capacidad**: provisioned
+ **Point-in-time recuperación (PITR) ‒ Desactivada**

En la pestaña **Índices**, cree un índice secundario global llamado `marketId-currentCapacity-index`. La función de Lambda `Scaler` utilizará el índice para hacer búsquedas eficaces en la celda con el menor número de usuarios asignados.

Cree la estructura de tabla con los atributos siguientes:
+ `marketId`: Europe
+ `cellId`: cell-0002
+ `currentCapacity`: 2
+ `endPoint_1`: <su punto de conexión de la primera región>
+ `endPoint_2`: <su punto de conexión de la segunda región>
+ `IsHealthy`: true
+ `maxCapacity`: 10
+ `regionCode_1` ‒ `eu-north-1`
+ `regionCode_2` ‒ `eu-central-1`
+ `userIds`: <su dirección de correo electrónico>

*4. Cree y configure una cola de SQS*

**Abra la consola de Amazon SQS en [https://console.aws.amazon.com/sqs/]()y cree una cola SQS estándar denominada configurada con cifrado de claves `CellProvisioning` Amazon SQS.**

*5. Implemente la función Orchestrator*

Desarrolle un flujo de trabajo de Step Functions que sirva de `Orchestrator` para el router. Se puede acceder al flujo de trabajo a través de la API del enrutador de celdas. El flujo de trabajo ejecuta las funciones de Lambda designadas según la ruta de recursos. Integre la función step con la API de API Gateway para el router de celdas `CellRouter` y configure los permisos necesarios para invocar las funciones de Lambda.

El siguiente diagrama muestra el flujo de trabajo. El estado de elección invoca una de las funciones de Lambda. Si la función de Lambda se ejecuta de manera correcta, el flujo de trabajo termina. Si se produce un error en la función de Lambda, se invoca el estado de error.

![Un diagrama del flujo de trabajo con las cuatro funciones y que termina en estado de error.](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/fd2fbf9d-9ae4-4c27-bc32-cf117350137a/images/cfe8d029-6f30-49a1-aaad-cad503bdcbae.png)


*6. Implemente las funciones de Lambda*

Implemente las funciones `Dispatcher`, `Mapper`, `Scaler` y `Validator`. Al definir y configurar cada función en la demostración, defina un rol para la función y asigne los permisos necesarios para realizar las operaciones necesarias en la tabla de DynamoDB `tbl_router`. Además, integre cada función en el flujo de trabajo `Orchestrator`.

*Función dispatcher*

La función `Dispatcher` se encarga de identificar y asignar una única celda estática para cada nuevo usuario registrado. Cuando un usuario nuevo se registra en la aplicación global, la solicitud se dirige a la función `Dispatcher`. La función procesa la solicitud mediante criterios de evaluación predefinidos, como los siguientes:

1. **Región**: seleccione la celda del mercado donde se encuentra el usuario. Por ejemplo, si el usuario accede a la aplicación global desde Europa, seleccione una celda que se utilice Regiones de AWS en Europa.

1. **Proximidad o latencia**: seleccione la celda más cercana al usuario. Por ejemplo, si el usuario accede a la aplicación desde Holanda, la función considerará una celda que utilice Fráncfort e Irlanda. La decisión sobre qué celda está más cerca se basa en métricas como la latencia entre la ubicación del usuario y las regiones de la celda. Para este patrón de ejemplo, la información se suministra de manera estática desde la capa de aprovisionamiento e implementación.

1. **Estado**: la función `Dispatcher` comprueba si es correcto el estado de la celda seleccionada según el estado de la celda proporcionado (Correcto = verdadero o falso).

1. **Capacidad**: la distribución de usuarios se basa en la lógica del *número mínimo de usuarios de una celda*, por lo que el usuario se asigna a la celda que tiene el menor número de usuarios.

**nota**  
Estos criterios se presentan solo para explicar este patrón de ejemplo. Para una implementación real de un router de celdas, puede definir criterios más refinados y basados en casos de uso.

La función `Orchestrator` invoca la función Dispatcher para asignar usuarios a las celdas. En esta función de demostración, el valor de mercado es un parámetro estático definido como `europe`.

La función `Dispatcher` evalúa si una celda ya está asignada al usuario. Si la celda ya está asignada, la función `Dispatcher` devuelve los puntos de conexión de la celda. Si no se asigna ninguna celda al usuario, la función busca la celda con el menor número de usuarios, la asigna al usuario y devuelve los puntos de conexión. La eficacia de la consulta de búsqueda de celdas se optimiza mediante el uso del índice secundario global.

*Función mapper*

La `Mapper` función supervisa el almacenamiento y el mantenimiento de las user-to-cell asignaciones en la base de datos. Se asigna una celda única a cada usuario registrado. Cada celda tiene dos celdas distintas URLs, una para cada región de AWS. Funcionan como puntos finales de API alojados en API Gateway y URLs funcionan como puntos de entrada a la aplicación global.

Cuando la `Mapper` función recibe una solicitud de la aplicación cliente, ejecuta una consulta en la `tbl_router` tabla de DynamoDB para recuperar user-to-cell la asignación asociada al ID de correo electrónico proporcionado. Si encuentra una celda asignada, la `Mapper` función proporciona inmediatamente las dos de la celda. URLs La `Mapper` función también monitorea activamente las alteraciones de la celda URLs e inicia notificaciones o actualizaciones de la configuración del usuario.

*Función scaler*

La función `Scaler` administra la capacidad residual de la celda. Para cada nueva solicitud de registro de usuario, la función `Scaler` evalúa la capacidad disponible de la celda que la función `Dispatcher` asignó al usuario. Si la celda ha alcanzado su límite predeterminado de acuerdo con los criterios de evaluación especificados, la función inicia una solicitud a través de una cola de Amazon SQS a la capa de aprovisionamiento e implementación, y solicita el aprovisionamiento y la implementación de celdas nuevas. El escalado de las celdas se puede ejecutar según un conjunto de criterios de evaluación, como los siguientes:

1. **Usuarios máximos**: cada celda puede tener un número máximo de 500 usuarios.

1. **Capacidad del búfer**: la capacidad del búfer de cada celda es del 20 %, lo que significa que cada celda se puede asignar a 400 usuarios en cualquier momento. El 20 % restante de la capacidad de búfer se reserva para futuros casos de uso y para la gestión de situaciones inesperadas (por ejemplo, cuando los servicios de creación y aprovisionamiento de celdas no están disponibles).

1. **Creación de celdas**: en cuanto una celda existente alcanza el 70 % de su capacidad, se activa una solicitud para crear una celda adicional.

**nota**  
Estos criterios se presentan solo para explicar este patrón de ejemplo. Para una implementación real de un router de celdas, puede definir criterios más refinados y basados en casos de uso.

El código `Scaler` de demostración es ejecutado por la función `Orchestrator` después de que la función `Dispatcher` ha asignado correctamente una celda al usuario recién registrado. La función `Scaler`, tras recibir el ID de la celda por parte de la función `Dispatcher`, evalúa si la celda designada tiene la capacidad adecuada para alojar a más usuarios, según los criterios de evaluación predefinidos. Si la capacidad de la celda es insuficiente, la función `Scaler` envía un mensaje al servicio Amazon SQS. El servicio recupera este mensaje en la capa de aprovisionamiento e implementación e inicia el aprovisionamiento de una celda nueva.

**Función validator**

La función `Validator` identifica y resuelve los problemas relacionados con el acceso a la celda. Cuando un usuario inicia sesión en la aplicación global, la aplicación recupera las celdas de la configuración del perfil URLs del usuario y dirige las solicitudes de los usuarios a una de las dos regiones asignadas dentro de la celda. Si no URLs se puede acceder a ellas, la aplicación puede enviar una solicitud de validación de URL al router móvil. El router de celdas de la función `Orchestrator` invoca a la función `Validator`. La función `Validator` inicia el proceso de validación. La validación puede incluir, entre otras comprobaciones, las siguientes:
+ Hacer una referencia cruzada de la celda URLs de la solicitud con la URLs almacenada en la base de datos para identificar y procesar posibles actualizaciones
+ Hacer una comprobación de estado exhaustiva (por ejemplo, una solicitud `HTTP GET` al punto de conexión de la celda)

En conclusión, la función `Validator` responde a las solicitudes de los clientes y proporciona el estado de la validación y las medidas correctivas necesarias.

La función `Validator` está diseñada para mejorar la experiencia del usuario. Imagine un escenario en el que usuarios determinados tengan dificultades para acceder a la aplicación global porque un incidente provoca que las celdas no estén disponibles temporalmente. En lugar de presentar errores genéricos, la función `Validator` puede proporcionar pasos de corrección instructivos. Entre estos pasos se pueden incluir los siguientes:
+ Informe a los usuarios acerca del incidente.
+ Proporcione un tiempo de espera aproximado antes de la disponibilidad del servicio.
+ Proporcione un número de contacto de asistencia para obtener información adicional.

El código de demostración de la `Validator` función verifica que la celda proporcionada por el usuario URLs en la solicitud coincida con los registros almacenados en la tabla. `tbl_router` La función `Validator` también comprueba si el estado de las celdas es correcto.