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
Mian Tariq and Ioannis Lioupras, Amazon Web Services
Resumen
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.
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
Requisitos previos
Una cuenta de Amazon Web Services (AWS) activa
La última versión de AWS Command Line Interface (AWS CLI)
Credenciales de AWS con los permisos necesarios para crear la CloudFormation pila, AWS Lambda las funciones y los recursos relacionados
Versiones de producto
Python 3.12
Arquitectura
En el diagrama siguiente se muestra un diseño general del router de celdas.

En el diagrama se muestra el flujo de trabajo siguiente:
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.
Amazon Cognito gestiona la autenticación y la autorización.
El AWS Step Functions flujo de trabajo consta de los siguientes componentes:
Orchestrator: se
Orchestratorutiliza 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.Orchestratorejecuta funciones de Lambda según la ruta del recurso.Dispatcher: la función
Dispatcherde 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
Mapperoperación gestiona las user-to-cell asignaciones dentro de la base de datosRoutingDBAmazon DynamoDB creada por la plantilla. CloudFormation Cuando se desencadena, la funciónMapperproporciona sus puntos de conexión a los usuarios ya asignados.Scaler: la función
Scalerhace un seguimiento de la ocupación de las celdas y de la capacidad disponible. Cuando sea necesario, la funciónScalerpuede 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
Validatorvalida los puntos de conexión de las celdas y detecta problemas posibles.
RoutingDBAlmacena la información y los atributos de las celdas (puntos finales de la API, estado, Región de AWS métricas).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.
Tools (Herramientas)
Servicios de AWS
Amazon API Gateway le ayuda a crear, publicar, mantener, supervisar y proteger REST, HTTP y WebSocket APIs a cualquier escala.
AWS CloudFormationle 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 ofrece autenticación, autorización y administración de usuarios para aplicaciones móviles y web.
Amazon DynamoDB es un servicio de base de datos de NoSQL completamente administrado que ofrece un rendimiento rápido, predecible y escalable.
AWS Lambda 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) 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) ofrece una cola alojada segura, duradera y disponible que le permite integrar y desacoplar sistemas y componentes de software distribuidos.
AWS Step Functionses 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
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
Prácticas recomendadas
Para conocer las mejores prácticas a la hora de crear arquitecturas basadas en celdas, consulte la siguiente guía de Well-Architected AWS :
Epics
| 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:
| 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 | 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:
| Desarrollador |
Cree los archivos .zip. | Cree un archivo .zip para cada función de Lambda ubicada en el directorio Functions
| 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:
| Desarrollador |
| Tarea | Descripción | Habilidades requeridas |
|---|---|---|
Implemente la CloudFormation plantilla. | Para implementar la CloudFormation plantilla, ejecute el siguiente AWS CLI comando:
| 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 | Desarrollador |
| Tarea | Descripción | Habilidades requeridas |
|---|---|---|
Asigne celdas al usuario. | Para iniciar
La respuesta de la función
| Desarrollador |
Recupere las celdas de los usuarios. | Para utilizar
| Desarrollador |
| Tarea | Descripción | Habilidades requeridas |
|---|---|---|
Limpie los recursos. | Para evitar el cobro de otros cargos en su cuenta, haga lo siguiente:
| Desarrollador de aplicaciones |
Recursos relacionados
Referencias
Video
Physalia: Cell-based Architecture to Provide Higher Availability on Amazon EBS
https://www.youtube-nocookie.com/embed/6 ¿Iknq? RZMFic controles = 0
Información adicional
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.

Para más información sobre la arquitectura basada en celdas, consulte Reducing the Scope of Impact with Cell-Based Architecture: Cell routing.
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:
Defina y configure el grupo de usuarios de Amazon Cognito.
Defina y configure la API de API Gateway para el router de celdas.
Crear una tabla de DynamoDB.
Cree y configure una cola de SQS.
Implemente la función
Orchestrator.Implemente las funciones de Lambda:
Dispatcher,Scaler,Mapper,Validator.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étodosPOSTIntegració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 ‒
marketIdClave de clasificación ‒
cellIdModo 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: EuropecellId: cell-0002currentCapacity: 2endPoint_1: <su punto de conexión de la primera región>endPoint_2: <su punto de conexión de la segunda región>IsHealthy: truemaxCapacity: 10regionCode_1‒eu-north-1regionCode_2‒eu-central-1userIds: <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.

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:
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.
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.
Estado: la función
Dispatchercomprueba si es correcto el estado de la celda seleccionada según el estado de la celda proporcionado (Correcto = verdadero o falso).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:
Usuarios máximos: cada celda puede tener un número máximo de 500 usuarios.
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).
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 GETal 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.