Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Sugerencia
Este contenido es un extracto del libro electrónico, Arquitectura de aplicaciones .NET nativas de nube para Azure, disponible en .NET Docs o como un PDF descargable gratuito que se puede leer sin conexión.
Microsoft, en asociación con expertos líderes de la comunidad, ha producido una aplicación de referencia completa de microservicios nativos en la nube, eShopOnContainers. Esta aplicación está diseñada para demostrar el uso de .NET y Docker, y opcionalmente Azure, Kubernetes y Visual Studio, para desarrollar una tienda en línea.
Figura 2-1. Captura de pantalla de la aplicación de ejemplo de eShopOnContainers.
Antes de iniciar este capítulo, se recomienda descargar la aplicación de referencia eShopOnContainers. Si lo hace, debería ser más fácil seguir la información presentada.
Características y requisitos
Comencemos con una revisión de las características y requisitos de la aplicación. La aplicación eShopOnContainers representa una tienda en línea que vende varios productos físicos como camisetas y tazas de café. Si has comprado algo en línea antes, la experiencia de usar la tienda debe ser relativamente familiar. Estas son algunas de las características básicas que implementa la tienda:
- Enumerar elementos de catálogo
- Filtrar elementos por tipo
- Filtrar elementos por marca
- Agregar artículos a la cesta de la compra
- Editar o quitar elementos de la cesta
- Restauración
- Registro de una cuenta
- Iniciar sesión
- Cerrar sesión
- Revisar pedidos
La aplicación también tiene los siguientes requisitos no funcionales:
- Debe tener alta disponibilidad y escalar automáticamente para satisfacer el aumento del tráfico (y desescalar automáticamente una vez que se reduzca el tráfico).
- Debe proporcionar una supervisión fácil de usar de sus registros de estado y diagnóstico para ayudar a solucionar los problemas que encuentre.
- Debe admitir un proceso de desarrollo ágil, incluida la compatibilidad con la integración e implementación continuas (CI/CD).
- Además de los dos front-end web (aplicación tradicional y de página única), la aplicación también debe admitir aplicaciones cliente móviles que ejecutan diferentes tipos de sistemas operativos.
- Debe admitir el hospedaje multiplataforma y el desarrollo multiplataforma.
Figura 2-2. La arquitectura de desarrollo de aplicaciones de referencia de eShopOnContainers.
La aplicación eShopOnContainers es accesible desde clientes web o móviles que acceden a la aplicación a través de HTTPS que tienen como destino la aplicación de servidor ASP.NET Core MVC o una puerta de enlace de API adecuada. Las puertas de enlace de API ofrecen varias ventajas, como desacoplar servicios back-end de clientes front-end individuales y proporcionar una mejor seguridad. La aplicación también usa un patrón relacionado conocido como backends-for-Frontends (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 procede 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 artículos del catálogo de productos, administrar las cestas de 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úan 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 diferentes 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 sobre el código
Dado que usa microservicios, la aplicación eShopOnContainers incluye bastantes 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 completa de Visual Studio, en la que se organizan los distintos proyectos.
Figura 2-4. Proyectos en la solución de Visual Studio.
El código se organiza para admitir los diferentes microservicios y, dentro de cada microservicio, el código se divide en lógica de dominio, problemas de infraestructura y interfaz de usuario o punto de conexión de servicio. En muchos casos, las dependencias de cada servicio pueden cumplirse mediante servicios de Azure en producción, así como 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 la nube creadas mediante la 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 Microservicios de .NET: Arquitectura para aplicaciones .NET en contenedor.