¿Qué es .NET Aspire?
Los ecosistemas en la nube como Microsoft Azure y Amazon Web Services (AWS) están profundamente integrados en el sector de TI y en soluciones de hospedaje populares para aplicaciones web y servicios web. Es probable que un sistema de hospedaje en la nube sea la opción predeterminada para las aplicaciones, por lo que debe asegurarse de que las aplicaciones que cree están diseñadas para aprovechar al máximo sus ventajas.
Una aplicación nativa de nube es una que se diseña específicamente para ejecutarse en la nube. Las aplicaciones suelen mostrar ciertos patrones arquitectónicos para que el rendimiento, la escalabilidad y la confiabilidad sean óptimos.
Imagine que trabaja para una empresa de ropa y equipos al aire libre. La junta directiva le ha pedido que desarrolle una nueva aplicación web de eShop para el sitio principal de la empresa orientada al cliente. Su equipo está familiarizado con el modelo de microservicios y quiere saber si el uso de .NET Aspire facilitará el proyecto.
En esta unidad, obtendrá más información sobre las arquitecturas nativas de la nube y verá los desafíos que pueden implicar su creación. También verá cómo .NET Aspire puede abordar esos desafíos.
¿Qué es una aplicación nativa de nube?
Una aplicación nativa de nube es una diseñada para hacer un uso óptimo de las infraestructuras en la nube para ofrecer el mejor rendimiento, disponibilidad y resistencia. Hay seis pilares de las arquitecturas de software nativas de la nube:
- Infraestructura en la nube. Las aplicaciones nativas de nube se implementan en soluciones de hospedaje en la nube y no en granjas de servidores locales.
- Microservicios. Las aplicaciones nativas de la nube se implementan como un conjunto de microservicios, cada uno de los cuales implementa una pequeña parte de la funcionalidad empresarial.
- Contenedores. Los microservicios y otras partes de la aplicación se desarrollan e implementan en contenedores para garantizar un entorno de ejecución coherente.
- Servicios de respaldo. Los recursos auxiliares, como bases de datos y servicios de almacenamiento en caché, se pueden usar para proporcionar funcionalidad común a los microservicios.
- Diseño moderno. Las aplicaciones nativas de nube se ajustan a la metodología de aplicación de Doce Factores, que incluye principios como la integración continua/implementación continua (CI/CD), la disposición, el enlace de puertos, etc.
- Automatización. Las aplicaciones nativas de la nube usan infraestructura como código (IaC) para automatizar el aprovisionamiento y la implementación de plataformas.
Para proporcionar agilidad, una aplicación nativa de la nube se compone de un conjunto de microservicios. Cada microservicio:
- Implementa una parte de la funcionalidad completa.
- Se ejecuta en su propio proceso y está aislado de los demás, con frecuencia en un contenedor dedicado.
- Se crea mediante un equipo independiente.
- Se comunica con los demás, pero está acoplado de forma flexible.
Cada equipo elige los lenguajes y las tecnologías en las que prefieren implementar su microservicio. Cada microservicio se implementa y se escala independientemente de los demás.
En el diagrama siguiente se muestran las diferencias entre una aplicación web monolítica tradicional y una aplicación web compuesta por microservicios.
Las aplicaciones nativas de la nube pueden obtener muchas ventajas para su negocio. Por ejemplo:
- Al hospedar la aplicación en la nube, no es necesario compilar ni mantener infraestructura como servidores de hospedaje, sistemas operativos y servicios auxiliares.
- Dado que cada microservicio se desarrolla de forma independiente, puede implementar continuamente nuevas funcionalidades en ellos sin tener que esperar a otros equipos o hitos de la versión principal.
- Dado que cada microservicio se ejecuta en uno o varios contenedores, sabe que el entorno será el mismo en todos los entornos de prueba, ensayo y producción.
- Puede usar un sistema de orquestación de contenedores, como Kubernetes, para implementar instancias adicionales rápidamente para responder a la demanda adicional.
Desafíos presentados por aplicaciones nativas de la nube
Una aplicación nativa de la nube que consta de varios microservicios y con muchas características puede ser compleja y presentar desafíos que no surgen con aplicaciones monolíticas. Por ejemplo:
- Definición de la aplicación. A menos que se documente cuidadosamente, puede ser difícil que los desarrolladores comprendan qué componentes componen la aplicación nativa de nube completa.
- Comunicación. Cada microservicio puede necesitar intercambiar mensajes o datos con otros microservicios para formular una respuesta a una solicitud de usuario. Aunque debe habilitar esta comunicación, debe hacerlo de una manera que no se acopla estrechamente un microservicio a otro. También necesita que la comunicación permanezca confiable en momentos de alta demanda o durante errores de servicio.
- Resistencia. Ningún servicio de hospedaje puede estar disponible al 100 %. Debe asegurarse de que, en raras ocasiones, cuando un microservicio no está disponible, la aplicación controla los errores de forma sólida y mantiene las solicitudes hasta que el servicio vuelva.
- Datos distribuidos. Cada microservicio implementa su propia capa de almacenamiento de datos y puede no usar el mismo servidor de base de datos que los demás. Debe tener en cuenta cómo consultará los datos de varios microservicios y cómo implementará las transacciones.
- Secretos. Si la aplicación controla cualquier tipo de datos confidenciales, cada microservicio debe autenticar cada solicitud que reciba antes de devolver una respuesta. A menudo, se usan secretos como claves de cifrado asimétricas y simétricas para proteger los datos e identificar positivamente a los usuarios y microservicios que llaman. Debe tener en cuenta cómo se almacenan e intercambian estos secretos en la aplicación nativa de nube.
- Incorporación de desarrolladores. Los nuevos desarrolladores deben poder comprender la arquitectura de la aplicación y cómo trabajar con ella rápidamente. Debe asegurarse de que los nuevos desarrolladores puedan ponerse al día sin un montón de conocimientos entre dominios o configuración local.
Recientemente, el diseño de aplicaciones nativas de la nube ha ganado popularidad, pero los desafíos como los de esta sección desaconsejan que algunos equipos adopten este patrón. .NET, por ejemplo, tiene todas las características necesarias para resolver estos problemas, pero las soluciones pueden necesitar una inversión significativa en el entrenamiento y el código personalizado.
¿Qué es .NET Aspire?
.NET Aspire es una nueva pila lista para la nube creada para .NET diseñada para permitir a los desarrolladores crear aplicaciones nativas de nube de forma rápida y sencilla. Echemos un vistazo a las características de .NET Aspire que abordan los desafíos que hemos visto.
Orquestación
Los microservicios y su naturaleza acoplada flexible aumentan la flexibilidad de la aplicación implementada, pero pueden dificultar la configuración. La lista de servicios que componen la aplicación puede quedar poco clara y el punto de conexión en el que está disponible un microservicio puede ser difícil de identificar. .NET Aspire proporciona funcionalidad de orquestación para:
- Poder especificar claramente para todos los equipos los proyectos, contenedores, ejecutables y recursos en la nube de .NET que componen la aplicación.
- Los microservicios pueden detectar automáticamente puntos de conexión para todos los componentes de la aplicación. .NET Aspire realiza esta detección de servicios mediante la administración de cadenas de conexión y su inserción en microservicios cuando sea necesario.
Al crear una aplicación .NET Aspire, verá un nuevo proyecto en la solución denominada <SolutionName>. AppHost. Este proyecto implementa la orquestación de la aplicación y debe asegurarse de que es el proyecto de inicio de la solución.
Componentes
Los microservicios suelen tener requisitos funcionales para servicios de respaldo complejos que respaldan sus características. Por ejemplo:
- Almacenamiento de datos. Para conservar los datos para admitir catálogos de productos, carros de compra, tiendas de identidades y otras características, los microservicios deben almacenar datos en almacenes estructurados o semiestructurados.
- Almacenamiento en caché. Para maximizar el rendimiento, los microservicios pueden almacenar respuestas parciales o completas en una memoria caché para que las solicitudes similares posteriores se puedan satisfacer más rápidamente.
- Mensajería. Los microservicios acoplados de forma flexible deben comunicarse entre sí y debe asegurarse de que esta comunicación es confiable incluso cuando el tráfico es alto o las condiciones de red son difíciles. Un servicio que pone en cola y distribuye mensajes de remitentes a destinatarios es un requisito común.
En .NET Aspire, es fácil implementar estos servicios de respaldo en cada microservicio porque la pila incluye componentes de .NET Aspire. Cada componente es un paquete NuGet que puede agregar a la solución e implementa una interfaz estándar en un servicio de respaldo. Esta interfaz estándar garantiza que el microservicio se conecte a sus servicios de respaldo de forma coherente y sin problemas.
Los componentes estándar de .NET Aspire incluyen:
- Componentes de almacenamiento de datos como los de PostgreSQL, SQL Database, Azure Cosmos DB y MongoDB.
- Almacenamiento en caché de componentes como el componente para Redis.
- Componentes de mensajería como los de RabbitMQ y Azure Service Bus.
Importante
.NET Aspire incluye muchos componentes que funcionan con servicios de Azure, como Azure Storage y Azure Service Bus, pero Azure no es necesario para los proyectos de .NET Aspire y funcionan igual de bien con servicios de respaldo fuera de Azure, como RabbitMQ y MongoDB.
Herramientas
.NET Aspire también agrega a las herramientas disponibles para desarrolladores en Visual Studio. Por ejemplo:
- Las nuevas plantillas de proyecto permiten crear soluciones de .NET Aspire en pocos pasos en un asistente.
- El panel de .NET Aspire es una interfaz web que aparece cada vez que se inicia la solución desde Visual Studio. Este panel muestra todos los microservicios y servicios de respaldo de la aplicación y puede llamarlos para realizar pruebas. También muestra herramientas de rendimiento y supervisión.
- Aparecen elementos de menús adicionales, que puede usar para agregar un componente de .NET Aspire, registrar un proyecto para la compatibilidad con orquestadores de .NET Aspire o completar otras tareas.
Nota:
Más adelante en este módulo obtendrá más información sobre las herramientas de .NET Aspire.