En este artículo se describe una solución para ejecutar un sistema de administración de pedidos con 10 microservicios en Azure Container Apps. La solución también usa procedimientos recomendados de microservicios a través de Dapr y el escalado controlado por eventos con KEDA.
Dapr y Traefik son marcas comerciales de sus respectivas empresas. El uso de estas marcas no implica ninguna aprobación.
Architecture
Descargue un archivo de PowerPoint de esta arquitectura.
Flujo de datos
Esta solución usa plantillas de Bicep para ejecutar la implementación del sistema de administración de pedidos de Reddog y su infraestructura de Azure auxiliar. La arquitectura se compone de un único entorno de Azure Container Apps que hospeda 10 aplicaciones de microservicios de .NET Core. Utilizará el SDK de .NET Core Dapr para integrarse con los recursos de Azure a través de los bloques de construcción publish-subscribe (pub/sub) y State and Binding. Aunque Dapr suele proporcionar flexibilidad al implementar componentes, esta solución se basa en una opinión. Los servicios también usan reglas de escalado de KEDA para permitir el escalado en función de desencadenadores de eventos y escalado a cero escenarios.
En la lista siguiente se describe cada microservicio y la configuración de Azure Container Apps con la que se implementa. Consulte el repositorio reddog-code en GitHub para ver el código.
Traefik: Proxy básico para enrutar las solicitudes de usuario de la interfaz de usuario a los servicios de contabilidad y Makeline para el panel interactivo.
UI: Un panel que muestra el pedido en tiempo real y los datos agregados de ventas para el sistema de administración de pedidos de Reddog.
Cliente virtual: Un programa de simulación de cliente que simula a los clientes que hacen pedidos a través del servicio de pedidos.
Servicio de pedido: Una API CRUD para realizar y administrar pedidos.
Servicio de contabilidad: Un servicio que procesa, almacena y agrega datos de pedidos. Transforma los pedidos de los clientes en métricas de ventas significativas que se muestran en la interfaz de usuario.
Servicio de recepción: Un programa de archivado que genera y almacena recibos de pedidos para fines históricos y de auditoría.
Servicio de fidelidad: Un servicio que administra el programa de fidelidad mediante el seguimiento de puntos de recompensa del cliente en función del gasto de pedidos.
Servicio Makeline: Un servicio responsable de administrar una cola de pedidos actuales a la espera del suministro. Realiza un seguimiento del procesamiento y finalización de los pedidos por parte del servicio de trabajo virtual.
Trabajo virtual: Un programa de simulación de trabajo que simula la finalización de pedidos de clientes.
Programa previo (no se muestra): Un servicio que usa Entity Framework Core para inicializar las tablas dentro de Azure SQL Database para su uso con el servicio de contabilidad.
Servicio | Entrada | Componentes de Dapr | Reglas de escalabilidad KEDA |
---|---|---|---|
Traefik | Externo | Dapr no habilitado | HTTP |
UI | Interno | Dapr no habilitado | HTTP |
Cliente virtual | Ninguno | Invocación de servicio a servicio | N/D |
Servicio de pedido | Interno | Pub/sub: Azure Service Bus | HTTP |
Servicio de contabilidad | Interno | Pub/sub: Azure Service Bus | Azure Service Bus longitud del tema, HTTP |
Servicio de recepción | Interno | Pub/sub: Azure Service Bus Enlace: Blob de Azure |
Azure Service Bus longitud del tema, HTTP |
Servicio de fidelidad | Interno | Pub/sub: Azure Service Bus Prueba de Azure Cosmos DB |
Azure Service Bus longitud del tema, HTTP |
Servicio Makeline | Interno | Pub/sub: Azure Service Bus Estado: Azure Redis |
Azure Service Bus longitud del tema, HTTP |
Trabajador virtual | Ninguno | Invocación de servicio a servicio Enlace: Cron |
N/D |
Nota
También puede ejecutar Bootstrapper en una aplicación contenedora. Sin embargo, este servicio se ejecuta una vez para realizar la creación de la base de datos y, a continuación, se escala a cero después de crear los objetos necesarios en Azure SQL Database.
Componentes
Esta solución usa los siguientes componentes:
- Los grupos de recursos de Azure son contenedores lógicos para recursos de Azure. Use un único grupo de recursos para estructurar todo lo relacionado con esta solución en el Azure Portal.
- Azure Container Apps es un servicio de contenedor sin servidor totalmente administrado que se usa para compilar e implementar aplicaciones modernas a escala. En esta solución, va a hospedar los 10 microservicios en Azure Container Apps e implementarlos en un único entorno de Container Apps. Este entorno actúa como un límite seguro alrededor del sistema.
- Azure Service Bus es un agente de mensajes empresarial totalmente gestionado, con colas y temas de publicación-suscripción. En esta solución, úsela para la implementación del componente pub/sub de Dapr. Varios servicios usan este componente. El servicio de pedidos publica mensajes en el bus, y los servicios de Makeline, contabilidad, fidelización y recepción se suscriben a estos mensajes.
- Azure Cosmos DB es un servicio de base de datos administrado de varios modelos NoSQL. Úselo como componente de almacén de estado de Dapr para el servicio de fidelidad para almacenar los datos de fidelidad del cliente.
- Azure Cache for Redis es una caché de Redis administrada distribuida, en memoria y escalable. Se utiliza como componente de almacenamiento de estado Dapr para que el servicio Makeline almacene datos sobre los pedidos que se están procesando.
- Azure SQL Database es un servicio de base de datos relacional inteligente y escalable creado para la nube. Créelo para el servicio de contabilidad, que usa Entity Framework Core para interactuar con la base de datos. El servicio Bootstrapper es responsable de configurar las tablas de SQL en la base de datos y, a continuación, se ejecuta una vez antes de establecer la conexión con el servicio de contabilidad.
- Azure Blob Storage almacena cantidades masivas de datos no estructurados, como archivos de texto o binarios. El servicio de recepción usa Blob Storage a través de un enlace de salida de Dapr para almacenar los recibos de pedido.
- Traefik es un proxy inverso moderno líder y equilibrador de carga que facilita la implementación de microservicios. En esta solución, utilice la función de configuración dinámica de Traefik para hacer el enrutamiento basado en la ruta desde la UI, que es una aplicación de una sola página (SPA) de Vue.js. Esta configuración también habilita llamadas API directas a los servicios back-end para realizar pruebas.
- Azure Monitor permite recopilar, analizar y actuar sobre los datos de contenido del cliente de los entornos de infraestructura de Azure. Lo usará con Application Ideas para ver los registros de contenedor y recopilar métricas de los microservicios.
Alternativas
En esta arquitectura, se despliega un proxy Traefik para habilitar el enrutamiento basado en rutas para la API de Vue.js. Hay muchos servidores proxy de código abierto alternativos que puede usar para este propósito. Otros dos proyectos populares son NGINX y HAProxy.
Toda la infraestructura de Azure, excepto Azure SQL Database, utiliza componentes Dapr para la interoperabilidad. Una de las ventajas de Dapr es que se pueden intercambiar todos estos componentes cambiando la configuración de despliegue de las aplicaciones del contenedor. En este caso, Azure Service Bus, Azure Cosmos DB, Cache for Redis y Blob Storage se eligieron para mostrar algunos de los más de 70 componentes de Dapr disponibles. Una lista de agentes alternativos de publicación/sub, almacenes de estado y enlaces de salida se encuentran en los documentos de Dapr.
Detalles del escenario
Los microservicios son un estilo de arquitectura cada vez más popular que puede tener muchas ventajas, como alta escalabilidad, ciclos de desarrollo más cortos y mayor simplicidad. Puede usar contenedores como mecanismo para implementar aplicaciones de microservicios y, a continuación, usar un orquestador de contenedores como Kubernetes para simplificar las operaciones. Hay muchos factores que se deben tener en cuenta en las arquitecturas de microservicios a gran escala. Normalmente, la plataforma de infraestructura requiere una comprensión significativa de tecnologías complejas, como los orquestadores de contenedores.
Azure Container Apps es un servicio de contenedores sin servidor totalmente administrado para ejecutar aplicaciones modernas a gran escala. Permite implementar aplicaciones en contenedor mediante la abstracción de la plataforma subyacente. De este modo, no tendrá que administrar una infraestructura complicada. Azure Container Apps cuenta con tecnología de código abierto.
Esta arquitectura usa la integración de Azure Container Apps con una versión administrada de Distributed Application Runtime (Dapr). Dapr es un proyecto de código abierto que ayuda a los desarrolladores con los desafíos inherentes en las aplicaciones distribuidas, como la administración de estados y la invocación de servicios.
Azure Container Apps también proporciona una versión administrada del escalado automático controlado por eventos de Kubernetes (KEDA). KEDA permite que los contenedores se escalen automáticamente en función de eventos entrantes de servicios externos, como Azure Service Bus y Azure Cache for Redis.
También puede habilitar la entrada HTTPS en Azure Container Apps sin crear más recursos de red de Azure. Puede usar el proxy de Envoy, que también permite escenarios de división de tráfico.
Para explorar la comparación de Azure Container Apps con otras plataformas de hospedaje de contenedores en Azure, consulte Comparación de Container Apps con otras opciones de contenedor de Azure.
En este artículo se describe una solución para ejecutar un sistema de administración de pedidos con 10 microservicios en Azure Container Apps. La solución también usa procedimientos recomendados de microservicios a través de Dapr y el escalado controlado por eventos con KEDA.
Posibles casos de uso
Esta solución se aplica a cualquier organización que use microservicios sin estado y con estado para sistemas distribuidos. La solución es la mejor para los productos empaquetados de consumo y las industrias manufactureras que tienen un sistema de pedidos y suministro.
Estas otras soluciones tienen diseños similares:
- Arquitectura de microservicios en Azure Kubernetes Service (AKS)
- Arquitectura de microservicios en Azure Functions
- Arquitectura basada en eventos
Consideraciones
Estas consideraciones implementan los pilares del Azure Well-Architected Framework, que es un conjunto de principios rectores que puede utilizar para mejorar la calidad de una carga de trabajo. Para más información, consulte Marco de buena arquitectura de Microsoft Azure.
Confiabilidad
La confiabilidad garantiza que la aplicación pueda cumplir los compromisos contraídos con los clientes. Para más información, consulte Resumen del pilar de fiabilidad.
Azure Container Apps se ejecuta en Kubernetes en segundo plano. Mecanismos de resiliencia están construidos en Kubernetes que monitor y reiniciar contenedores, o pods, si hay problemas. Los mecanismos de resistencia se combinan con el equilibrador de carga integrado para ejecutar varias réplicas de cada aplicación contenedora. Con esta redundancia, la solución puede tolerar que una instancia no esté disponible.
Puede usar Azure Monitor y Application Insights para supervisar Azure Container Apps. Para ver los registros de contenedor, vaya al portal al panel Registros de cada aplicación de contenedor y, a continuación, ejecute la siguiente consulta Kusto. Este ejemplo muestra los registros de la aplicación de servicio Makeline.
ContainerAppConsoleLogs_CL |
where ContainerAppName_s contains "make-line-service" |
project TimeGenerated, _timestamp_d, ContainerGroupName_s, Log_s |
order by _timestamp_d asc
El mapa de la aplicación en Application Insights también muestra cómo se comunican los servicios en tiempo real. De este modo, podrá utilizarlos para la depuración de escenarios. Vaya al mapa de la aplicación en el recurso Application Ideas para ver algo parecido a lo siguiente.
Para más información sobre la supervisión de Azure Container Apps, consulte Supervisión de una aplicación en Azure Container Apps.
Optimización de costos
Optimice costes buscando formas de reducir los gastos innecesarios y mejore las eficiencias operativas. Para más información, vea Información general del pilar de optimización de costos.
Use la calculadora de precios de Azure para calcular el costo de los servicios de esta arquitectura.
Eficiencia del rendimiento
La eficiencia del rendimiento es la capacidad de su carga de trabajo de escalar para satisfacer las demandas que usted le impone de manera eficiente. Para obtener más información, vea Resumen del pilar de eficiencia del rendimiento.
Esta solución se basa en gran medida en la implementación de KEDA en Azure Container Apps para el escalado controlado por eventos. Al implementar el servicio de atención al cliente virtual, éste realizará continuamente pedidos, lo que provocará que el servicio de pedidos se escale a través del escalador HTTP KEDA. A medida que el servicio de pedidos publica los pedidos en el bus de servicios, los escaladores KEDA del bus de servicios hacen que se escalen los servicios de contabilidad, recepción, Makeline y fidelización. Las aplicaciones de la interfaz de usuario y del contenedor Traefik también configuran los escaladores HTTP KEDA para que las aplicaciones escalen a medida que más usuarios acceden al tablero.
Cuando el cliente virtual no se está ejecutando, todos los microservicios de esta solución se escalan a cero, excepto los servicios de trabajo virtual y Makeline. El trabajo virtual no se reduce verticalmente, ya que está comprobando constantemente el suministro de pedidos. Para más información sobre el escalado en aplicaciones de contenedor, consulte Establecimiento de reglas de escalado en Azure Container Apps. Para obtener más información sobre los escaladores KEDA, lea la documentación de KEDA sobre scalers.
Implementación de este escenario
Para obtener instrucciones de implementación, consulte la Demostración de Red Dog: Implementación de Azure Container Apps en GitHub.
La integración de la demostración de Red Dog: microservicios es una plantilla de aplicación empaquetada que se basa en los recursos de código anteriores para demostrar la integración de Azure Container Apps, App Service, Functions y API Management y aprovisiona la infraestructura e implementa el código mediante Acciones de GitHub.
Colaboradores
Microsoft mantiene este artículo. Originalmente lo escribieron los siguientes colaboradores.
Autor principal:
- Alice Gibbons | Cinturón negro global nativo en la nube
Otros colaboradores:
- Kendall Roden | Gerente sénior del programa
- Lynn Orrell | Especialista en soluciones principales (GBB)
Para ver los perfiles no públicos de LinkedIn, inicie sesión en LinkedIn.
Pasos siguientes
- Documentos de Azure Container Apps
- Comparación de ofertas de contenedor en Azure
- Otras implementaciones del sistema de administración de pedidos de Reddog: