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.
.NET .NET Aspire reúne un potente conjunto de herramientas y bibliotecas, diseñados para ofrecer una experiencia perfecta e intuitiva para los desarrolladores. Su arquitectura modular y extensible le permite definir el modelo de aplicación con precisión, orquestando sistemas complejos compuestos por servicios, contenedores y ejecutables. Tanto si los componentes abarcan diferentes lenguajes de programación, plataformas, pilas o sistemas operativos, .NET.NET Aspire garantiza que funcione armónicamente, simplificando así la complejidad del desarrollo moderno de aplicaciones nativas de la nube.
Arquitectura del modelo de aplicación
Los recursos son los bloques de creación del modelo de aplicación. Se usan para representar conceptos abstractos como servicios, contenedores, ejecutables e integraciones externas. Los recursos específicos permiten a los desarrolladores definir dependencias en implementaciones concretas de estos conceptos. Por ejemplo, se puede usar un Redis
recurso para representar una Redis memoria caché, mientras que un Postgres
recurso puede representar una PostgreSQL base de datos.
Aunque el modelo de aplicación suele ser sinónimo de una colección de recursos, también es una representación de alto nivel de toda la topología de la aplicación. Esto es importante, ya que está diseñado para reducción. De este modo, .NET.NET Aspire se puede considerar como un compilador para la topología de aplicación.
Bajar el modelo
En un compilador tradicional, el proceso de "reducción" implica traducir un lenguaje de programación de alto nivel en representaciones progresivamente más sencillas:
- Representación intermedia (IR): El primer paso abstrae las características específicas del lenguaje, creando una representación independiente de la plataforma.
- Código de máquina: Después, el IR se transforma en instrucciones específicas de la máquina adaptadas a una arquitectura de CPU específica.
Del mismo modo, .NET.NET Aspire aplica este concepto a las aplicaciones, tratando el modelo de aplicación como lenguaje de alto nivel:
- Construcciones intermedias: El modelo de aplicación se reduce primero en construcciones intermedias, como gráficos de objetos de estilo kit de desarrollo en la nube (CDK). Estas construcciones pueden ser independientes de la plataforma o adaptarse parcialmente a destinos específicos.
- Representación en tiempo de ejecución de destino: Por último, un publicador genera los artefactos listos para la implementación(YAML, JSONHCL u otros formatos) requeridos por la plataforma de destino.
Este enfoque en capas desbloquea varias ventajas clave:
- Validación y enriquecimiento: Los modelos se pueden validar y enriquecer durante el proceso de transformación, lo que garantiza la exactitud y la integridad.
- Compatibilidad con varios destinos:.NET.NET Aspire admite varios destinos de implementación, lo que permite la flexibilidad en distintos entornos.
- Flujo de trabajo personalizable: Los desarrolladores pueden enlazarse a cada fase del proceso para personalizar el comportamiento y adaptar la salida a necesidades específicas.
- Modelos limpios y portátiles: El modelo de aplicación de alto nivel sigue siendo expresivo, portátil y libre de preocupaciones específicas de la plataforma.
Lo más importante es que el propio proceso de traducción es muy extensible. Puede definir transformaciones personalizadas, enriquecimientos y formatos de salida, lo que permite .NET.NET Aspire adaptarse sin problemas a sus requisitos de implementación e infraestructura únicos. Esta extensibilidad garantiza que .NET.NET Aspire siga siendo una herramienta eficaz y versátil, capaz de evolucionar junto con las necesidades de la aplicación.
Modalidad y extensibilidad
.NET .NET Aspire funciona en dos modos principales, cada uno adaptado para simplificar sus necesidades específicas, que se detallan en la sección siguiente. Ambos modos usan un conjunto sólido de API conocidas y un amplio ecosistema de integraciones. Cada integración simplifica el trabajo con un servicio común, marco o plataforma, como Redis, PostgreSQLAzure servicios o Orleans, por ejemplo. Estas integraciones funcionan juntas como piezas de rompecabezas, lo que le permite definir recursos, expresar dependencias y configurar el comportamiento sin esfuerzo, independientemente de si se ejecuta localmente o se implementa en producción.
¿Por qué es importante la modalidad cuando se trata del contexto de ejecución del host de la aplicación? Esto se debe a que permite definir el modelo de aplicación una vez y con las API adecuadas, especificar cómo funcionan los recursos en cada modo. Tenga en cuenta la siguiente colección de recursos:
- Base de datos: PostgreSQL
- Caché: Redis
- Servicio de IA: Ollama o OpenAI
- Backend: ASP.NET Core API mínima
- Frontend: React aplicación
En función del modo, el host de la aplicación puede tratar estos recursos de forma diferente. Por ejemplo, en el modo de ejecución, el host de la aplicación podría usar una base de datos local PostgreSQL y una caché Redis, mediante contenedores, mientras que en el modo de publicación, podría generar artefactos de implementación para AzurePostgreSQL y Redis caché.
Modo de ejecución
El modo predeterminado es el modo de ejecución, que es ideal para el desarrollo y las pruebas locales. En este modo, el host de la aplicación organiza el .NET.NET Aspire modelo de aplicación, incluidos los procesos, los contenedores y los emuladores en la nube, para facilitar el desarrollo rápido e iterativo. Los recursos se comportan como entidades en tiempo de ejecución real con ciclos de vida que reflejan la producción. Con solo pulsar F5, el host de la aplicación inicia todo en tu modelo de aplicación: almacenamiento, bases de datos, cachés, mensajería, trabajos, APIs, frontends, todo totalmente configurado y listo para depurar localmente. Vamos a considerar el modelo de aplicación de la sección anterior, donde el host de la aplicación organizaría los siguientes recursos localmente:
Para obtener más información sobre cómo funciona el modo de ejecución, consulte Orquestación en tiempo de desarrollo.
Modo de publicación
El modo de publicación genera artefactos listos para la implementación adaptados al entorno de destino. El anfitrión de la aplicación .NET Aspire compila el modelo de tu aplicación en salidas como archivos de manifiestos, configuraciones de Terraform, plantillas de Bicep/ARM, archivos Compose o construcciones de CDK, listo para la integración en cualquier pipeline de despliegue. El formato de salida depende del publicador elegido, lo que proporciona flexibilidad en los escenarios de implementación. Cuando consideras el modelo de aplicación de la sección anterior, el host de la aplicación no organiza nada; en lugar de eso, emite artefactos de publicación que se pueden usar para desplegar tu aplicación en un proveedor de nube. Por ejemplo, supongamos que desea implementar en Azure: el host de la aplicación emitiría plantillas de Bicep que definen los siguientes recursos:
Para obtener más información sobre cómo utilizar el modo de publicación, .NET.NET Aspire las implementaciones.
Orquestación durante el desarrollo
En modo de ejecución, el host de la aplicación organiza todos los recursos definidos en el modelo de aplicación. ¿Pero cómo logra esto?
Importante
El host de la aplicación no es un entorno de ejecución de producción. Es una herramienta de orquestación durante el desarrollo que simplifica el proceso de ejecutar y depurar tu aplicación de manera local.
En esta sección, se responden varias preguntas clave para ayudarle a comprender cómo el host de la aplicación organiza el modelo de aplicación:
¿Qué potencia la orquestación?
La orquestación se delega en el plano de control para desarrolladores de Microsoft (DCP), que administra los ciclos de vida de los recursos, el orden de inicio, las dependencias y las configuraciones de red en toda la topología de la aplicación.
¿Cómo se usa el modelo de aplicación?
El modelo de aplicación define todos los recursos a través de implementaciones de IResource, incluidos contenedores, procesos, bases de datos y servicios externos, que forman el plano técnico para la orquestación.
¿Qué rol desempeña el host de la aplicación?
El host de la aplicación proporciona una declaración de alto nivel del estado de aplicación deseado. Delega la ejecución a DCP, que interpreta el modelo de aplicación y realiza la orquestación en consecuencia.
¿Qué recursos se supervisan?
Todos los recursos declarados(incluidos contenedores, ejecutables e integraciones) se supervisan para garantizar un comportamiento correcto y para admitir un flujo de trabajo de desarrollo rápido y confiable.
¿Cómo se administran los contenedores y los ejecutables?
Los contenedores y los procesos se inicializan con sus configuraciones y se inician simultáneamente, respetando el gráfico de dependencias definido en el modelo de aplicación. DCP garantiza su preparación y conectividad durante la orquestación, iniciando los recursos lo más rápido posible mientras mantiene el orden correcto dictado por sus dependencias.
¿Cómo se controlan las dependencias de recursos?
Las dependencias se definen en el modelo de aplicación y se evalúan por DCP para determinar la secuenciación de inicio correcta, lo que garantiza que los recursos están disponibles antes de que se inicien los dependientes.
¿Cómo se configuran las redes?
Las redes, como los enlaces de puerto, se configuran automáticamente a menos que se definan explícitamente. DCP resuelve conflictos y garantiza la disponibilidad, lo que permite una comunicación sin problemas entre los servicios.
El proceso de orquestación sigue una arquitectura superpuesta. En su núcleo, el host de la aplicación representa la vista deseada del desarrollador de los recursos de la aplicación distribuida. DCP garantiza que este estado deseado se realice mediante la orquestación de los recursos y el mantenimiento de la coherencia.
El modelo de aplicación actúa como plano técnico para que DCP organice la aplicación. En segundo plano, el host de la aplicación es una .NET aplicación de consola propulsada por el paquete NuGet 📦Aspire.Hosting.AppHost. Este paquete incluye destinos de compilación que registran dependencias de orquestación, lo que permite la orquestación en tiempo de desarrollo sin problemas.
DCP es un Kubernetesservidor de API compatible, lo que significa que usa los mismos protocolos de red y convenciones que Kubernetes. Esta compatibilidad permite que el host de la .NET Aspire aplicación aproveche las bibliotecas existentes Kubernetes para la comunicación. En concreto, el host de la aplicación contiene una implementación de k8s.KubernetesClient
(desde el 📦 paquete NuGet KubernetesClient ), que es un .NET cliente para Kubernetes. Este cliente se usa para comunicarse con el servidor de API de DCP, lo que permite al host de aplicación delegar tareas de orquestación en DCP.
Al ejecutar el host de la aplicación, realiza el primer paso de "reducción" al traducir el modelo de aplicación de uso .NET.NET Aspire general en un modelo específico de DCP adaptado para la ejecución local en modo de ejecución. A continuación, este modelo dcP se entrega a DCP, que lo evalúa y organiza los recursos en consecuencia. Esta separación garantiza que el host de la aplicación se centre en adaptar el .NET.NET Aspire modelo de aplicación para la ejecución local, mientras que DCP se especializa en ejecutar el modelo personalizado. El diagrama siguiente ayuda a visualizar este proceso de orquestación:
Para obtener más información sobre el host de la aplicación y las API para compilar el modelo de aplicación, consulte .NET.NET Aspire información general sobre la orquestación.
Plano de control del desarrollador
DCP es el núcleo de la funcionalidad de orquestación del host de la .NET.NET Aspire aplicación. Es responsable de orquestar todos los recursos definidos en el modelo de aplicación, iniciando el panel del desarrollador, asegurándose de que todo está configurado correctamente para el desarrollo y las pruebas locales. DCP administra el ciclo de vida de los recursos, aplica configuraciones de red y resuelve las dependencias.
DCP está escrito en Go, alineado con Kubernetes y su ecosistema, que también se basan en Go. Esta opción permite la integración profunda y nativa con Kubernetes las API, la simultaneidad eficaz y el acceso a herramientas maduras como Kubebuilder. DCP se entrega como dos ejecutables:
-
dcp.exe
: servidor de API que expone un Kubernetespunto de conexión de API similar al del host de la aplicación con el que comunicarse. Además, expone el streaming de registros al host de la aplicación, que en última instancia transmite registros al panel del desarrollador. -
dcpctrl.exe
: controlador que supervisa el servidor de API para nuevos objetos y cambios, lo que garantiza que el entorno real coincida con el modelo especificado.
Nota:
DCP funciona en el principio de "coherencia final", lo que significa que los cambios en el modelo y el entorno real se aplican de forma asincrónica. Aunque este enfoque puede introducir retrasos notables, DCP está diseñado para sincronizar diligentemente ambos estados. A diferencia de un sistema "fuertemente coherente" que podría producir un error inmediatamente al encontrar problemas, DCP reintenta de forma persistente hasta que se logra el estado deseado o se determina un error de forma concluyente, lo que suele dar lugar a una alineación más sólida entre el modelo y el mundo real.
Cuando se ejecuta el host de la aplicación, usa Kubernetes bibliotecas cliente para comunicarse con DCP. Convierte el modelo de aplicación en un formato que DCP puede procesar convirtiendo los recursos del modelo en especificaciones. En concreto, esto implica generar Kubernetes definiciones de recursos personalizados (CRD) que representan el estado deseado de la aplicación.
DCP realiza las siguientes tareas:
- Prepara los recursos para su ejecución:
- Configura los puntos de conexión de servicio.
- Asigna nombres y puertos dinámicamente, a menos que se establezca explícitamente (DCP garantiza que los puertos estén disponibles y no estén en uso por otros procesos).
- Inicializa redes de contenedores.
- Extrae imágenes de contenedor en función de su política de extracción aplicada.
- Se encarga de crear e iniciar contenedores.
- Ejecuta ejecutables con los argumentos necesarios y las variables de entorno.
- Configura los puntos de conexión de servicio.
- Supervisa los recursos:
- Proporciona notificaciones de cambios sobre los objetos administrados en DCP, incluidos los identificadores de proceso, el estado de ejecución y los códigos de salida (el host de la aplicación se suscribe a estos cambios para administrar el ciclo de vida de la aplicación de forma eficaz).
- Inicia el panel del desarrollador.
Siguiendo con el diagrama de la sección anterior , tenga en cuenta el siguiente diagrama que ayuda a visualizar las responsabilidades de DCP:
Los registros de DCP se transmiten de nuevo al host de la aplicación, que los reenvía al panel del desarrollador. Aunque el panel del desarrollador expone comandos como iniciar, detener y reiniciar, estos comandos no forman parte del propio DCP. En su lugar, se implementan mediante el entorno de ejecución del modelo de aplicación, específicamente dentro de su componente "servicio de tablero de control". Estos comandos funcionan manipulando objetos DCP, creando nuevos, eliminando los antiguos o actualizando sus propiedades. Por ejemplo, reiniciar un .NET proyecto implica detener y eliminar el existente ExecutableResource que representa el proyecto y crear uno nuevo con las mismas especificaciones. Para obtener más información sobre los comandos, vea Comandos de recursos personalizados en .NET.NET Aspire.
Panel para desarrolladores
El .NET.NET Aspire panel del desarrollador es una herramienta eficaz diseñada para simplificar el desarrollo local y la administración de recursos. También admite un modo independiente y se integra sin problemas al publicar en Azure Container Apps. Con su interfaz intuitiva, el panel permite a los desarrolladores supervisar, administrar e interactuar sin esfuerzo con los recursos de la aplicación.
Supervisión y administración de recursos
El panel proporciona una interfaz fácil de usar para inspeccionar estados de recursos, ver registros y ejecutar comandos. Tanto si está depurando localmente como si está implementando en la nube, el panel garantiza que tiene visibilidad total del comportamiento de su aplicación.
Comandos integrados y personalizados
El panel proporciona un conjunto de comandos para administrar recursos, como iniciar, detener y reiniciar. Aunque los comandos aparecen como acciones intuitivas en la interfaz de usuario del panel, en segundo plano, operan manipulando objetos DCP. Para obtener más información, consulte Detener o iniciar un recurso.
Además de estos comandos integrados, puede definir comandos personalizados adaptados a las necesidades de la aplicación. Estos comandos personalizados se registran en el modelo de aplicación y se integran perfectamente en el panel, lo que proporciona una mayor flexibilidad y control. Obtenga más información sobre los comandos personalizados en Comandos de recursos personalizados en .NET.NET Aspire.
Streaming de registros en tiempo real
Manténgase informado con la función de transmisión en tiempo real de registros del panel. Los registros de todos los recursos del modelo de aplicación se transmiten desde DCP al host de la aplicación y se muestran en el panel. Con opciones avanzadas de filtrado, por tipo de recurso, gravedad y mucho más, puede identificar rápidamente la información relevante y solucionar problemas de forma eficaz.
El panel del desarrollador es más que una herramienta: es el centro de comandos para compilar, depurar y administrar .NET.NET Aspire aplicaciones con confianza y facilidad.