Introducción a la aplicación de referencia eShopOnContainers
Sugerencia
Este contenido es un extracto del libro electrónico “Architecting Cloud Native .NET Applications for Azure” (Diseño de la arquitectura de aplicaciones .NET nativas en la nube para Azure), disponible en Documentos de .NET o como un PDF descargable y gratuito que se puede leer sin conexión.
Microsoft, en colaboración con los principales expertos de la comunidad, ha generado una completa aplicación de referencia de microservicios nativa de nube, eShopOnContainers. Esta aplicación está diseñada para presentarse mediante .NET y Docker, y opcionalmente Azure, Kubernetes y Visual Studio, para crear un escaparate en línea.
Figura 2-1. Captura de pantalla de la aplicación de ejemplo eShopOnContainers.
Antes de comenzar este capítulo, se recomienda descargar la aplicación de referencia eShopOnContainers. Si lo hace, debería serle más fácil seguir la información presentada.
Características y requisitos
Empecemos con una revisión de las características y los requisitos de la aplicación. La aplicación eShopOnContainers representa una tienda en línea que vende diversos productos físicos, como camisetas y café. Si ha comprado algo en línea antes, la experiencia de uso de la tienda debe ser relativamente familiar. Estas son algunas de las características básicas que implementa la tienda:
- Enumeración de elementos del catálogo
- Filtrar elementos por tipo
- Filtrar elementos por marca
- Agregar elementos a la cesta de la compra
- Editar o eliminar elementos de la cesta
- Restauración
- Registro de una cuenta
- Inicio de sesión
- Cerrar sesión
- Revisar pedidos
La aplicación también tiene los siguientes requisitos no funcionales:
- Debe tener alta disponibilidad y escalarse automáticamente para satisfacer el aumento del tráfico (y desescalar verticalmente una vez que el tráfico disminuya).
- Debe proporcionar una supervisión fácil de usar de sus registros de estado y diagnóstico para ayudar a solucionar cualquier incidencia que encuentre.
- Debe admitir un proceso de desarrollo ágil, incluyendo la compatibilidad con la integración e implementación continuas (CI/CD).
- Además de los dos servidores front-end web (tradicional y aplicación de página única), la aplicación también debe admitir aplicaciones cliente móviles que ejecuten diferentes tipos de sistemas operativos.
- Debe admitir el hospedaje multiplataforma y el desarrollo multiplataforma.
Figura 2-2. eShopOnContainers hace referencia a la arquitectura de desarrollo de aplicaciones.
La aplicación eShopOnContainers es accesible desde clientes web o móviles que acceden a la aplicación a través de HTTPS y tienen como destino la aplicación de servidor de ASP.NET Core MVC o una puerta de enlace de API adecuada. Las puertas de enlace de API ofrecen varias ventajas, como el desacoplado de servicios back-end de clientes front-end individuales y la mejora de la seguridad. La aplicación también usa un patrón relacionado conocido como Back-end para front-end (BFF), que recomienda crear puertas de enlace de API independientes para cada cliente front-end. La arquitectura de referencia muestra la separación de las puertas de enlace de API en función de si la solicitud viene de un cliente web o móvil.
La funcionalidad de la aplicación se divide en muchos microservicios distintos. Hay servicios responsables de la autenticación y la identidad, enumerar los elementos del catálogo de productos, administrar las cestas de la compra de los usuarios y realizar pedidos. Cada uno de estos servicios independientes tiene su propio almacenamiento persistente. No hay ningún almacén de datos principal único con el que interactúen todos los servicios. En su lugar, la coordinación y la comunicación entre los servicios se realizan según sea necesario y mediante un bus de mensajes.
Cada uno de los distintos microservicios está diseñado de forma diferente, en función de sus requisitos individuales. Este aspecto significa que su pila de tecnología puede diferir, aunque todas se hayan creado con .NET y estén diseñadas para la nube. Los servicios más sencillos proporcionan acceso básico Crear-Leer-Actualizar-Eliminar (CRUD) a los almacenes de datos subyacentes, mientras que los servicios más avanzados usan patrones y enfoques de diseño guiado por el dominio para administrar la complejidad de negocio.
Figura 2-3. Diferentes tipos de microservicios.
Información general del código
Dado que usa microservicios, la aplicación eShopOnContainers incluye varios proyectos y soluciones independientes en su repositorio de GitHub. Además de soluciones independientes y archivos ejecutables, los distintos servicios están diseñados para ejecutarse dentro de sus propios contenedores, tanto durante el desarrollo local como en tiempo de ejecución en producción. En la figura 2-4 se muestra la solución Visual Studio completa, en la que se organizan los distintos proyectos.
Figura 2-4. Solución de proyectos en Visual Studio.
El código está organizado para admitir los distintos microservicios y, dentro de cada microservicio, el código se divide en lógica de dominio, problemas de infraestructura e interfaz de usuario o punto de conexión de servicio. En muchos casos, los servicios de Azure en producción pueden satisfacer las dependencias de cada servicio y opciones alternativas para el desarrollo local. Examinemos cómo se asignan los requisitos de la aplicación a los servicios de Azure.
Descripción de los microservicios
Este libro se centra en las aplicaciones nativas de nube creadas con tecnología de Azure. Para obtener más información sobre los procedimientos recomendados de microservicios y cómo diseñar aplicaciones basadas en microservicios, lea el libro complementario ".NET Microservices: Architecture for Containerized .NET Applications" (Microservicios de .NET: Arquitectura para aplicaciones .NET contenedorizadas).