Compartir a través de


Recomendaciones de hospedaje de Azure para aplicaciones web de ASP.NET Core

Sugerencia

Este contenido es un extracto del libro electrónico, Arquitecto de aplicaciones web modernas con ASP.NET Core y Azure, disponible en .NET Docs o como un PDF descargable gratuito que se puede leer sin conexión.

Diseñe aplicaciones web modernas con ASP.NET core y miniatura de portada de libro electrónico de Azure.

Los líderes de línea de negocio en todas partes están omitiendo los departamentos de TI para obtener aplicaciones de la nube (también conocidas como SaaS) y pagarlas como si fueran una suscripción a una revista. Y cuando el servicio ya no sea necesario, pueden cancelar la suscripción sin que el equipo quede sin usar en la esquina".
- Daryl Plummer, analista de Gartner

Independientemente de las necesidades y la arquitectura de la aplicación, Microsoft Azure puede admitirla. Sus necesidades de hospedaje pueden ser tan simples como un sitio web estático o una aplicación sofisticada formada por docenas de servicios. Para ASP.NET aplicaciones web monolíticas principales y servicios auxiliares, hay varias configuraciones conocidas que se recomiendan. Las recomendaciones de este artículo se agrupan en función del tipo de recurso que se va a hospedar, ya sean aplicaciones completas, procesos individuales o datos.

Aplicaciones web

Las aplicaciones web se pueden hospedar con:

  • Aplicaciones web de App Service

  • Contenedores (varias opciones)

  • Virtual Machines (VM)

De estas opciones, App Service Web Apps es el enfoque recomendado para la mayoría de los escenarios, incluidas las aplicaciones sencillas basadas en contenedores. En el caso de las arquitecturas de microservicios, considere un enfoque basado en contenedores. Si necesita más control sobre las máquinas que ejecutan la aplicación, considere La posibilidad de usar Azure Virtual Machines.

Aplicaciones web de App Service

App Service Web Apps ofrece una plataforma totalmente administrada optimizada para hospedar aplicaciones web. Es una oferta de plataforma como servicio (PaaS) que le permite centrarse en la lógica de negocios, mientras que Azure se encarga de la infraestructura necesaria para ejecutar y escalar la aplicación. Algunas características clave de App Service Web Apps:

  • Optimización de DevOps (integración y entrega continuas, varios entornos, pruebas A/B, compatibilidad con scripting).

  • Escala global y alta disponibilidad.

  • Conexiones a plataformas SaaS y a los datos locales.

  • Seguridad y cumplimiento.

  • Integración de Visual Studio.

Azure App Service es la mejor opción para la mayoría de las aplicaciones web. La implementación y la administración se integran en la plataforma, los sitios se pueden escalar rápidamente para controlar cargas de tráfico elevadas y el equilibrio de carga integrado y el administrador de tráfico proporcionan alta disponibilidad. Puede mover fácilmente sitios existentes a Azure App Service con una herramienta de migración en línea. Puede usar una aplicación de código abierto desde la Galería de aplicaciones web o crear un sitio con el marco y las herramientas que prefiera. La característica WebJobs facilita la adición del procesamiento de trabajos en segundo plano a la aplicación web de App Service. Si tiene una aplicación de ASP.NET existente hospedada en el entorno local mediante una base de datos local, hay una ruta de acceso clara para migrar. Puede usar App Service Web App con una instancia de Azure SQL Database (o proteger el acceso al servidor de bases de datos local, si lo prefiere).

Estrategia de migración recomendada para aplicaciones .NET locales en Azure App Service

En la mayoría de los casos, pasar de una aplicación de ASP.NET hospedada localmente a una aplicación web de App Service es un proceso sencillo. Poco o ninguna modificación debe ser necesaria de la propia aplicación y puede empezar a aprovechar rápidamente las muchas características que ofrece Azure App Service Web Apps.

Además de las aplicaciones que no están optimizadas para la nube, Azure App Service Web Apps es una solución excelente para muchas aplicaciones monolíticas sencillas (no distribuidas), como muchas aplicaciones ASP.NET Core. En este enfoque, la arquitectura es básica y sencilla de entender y administrar:

Arquitectura básica de Azure

Normalmente, un pequeño número de recursos de un único grupo de recursos es suficiente para administrar dicha aplicación. Las aplicaciones que normalmente se implementan como una sola unidad, en lugar de las aplicaciones que se componen de muchos procesos independientes, son buenos candidatos para este enfoque arquitectónico básico. Aunque es arquitectónicomente sencillo, este enfoque todavía permite que la aplicación hospedada escale verticalmente (más recursos por nodo) y fuera (más nodos hospedados) para satisfacer cualquier aumento de la demanda. Con el escalado automático, la aplicación se puede configurar para ajustar automáticamente el número de nodos que hospedan la aplicación en función de la demanda y la carga media entre los nodos.

Aplicaciones Web de App Service para Contenedores

Además de la compatibilidad con el hospedaje de aplicaciones web directamente, App Service Web Apps for Containers se puede usar para ejecutar aplicaciones en contenedores en Windows y Linux. Con este servicio, puede implementar y ejecutar fácilmente aplicaciones en contenedores que se pueden escalar con su negocio. Las aplicaciones tienen todas las características de App Service Web Apps enumeradas anteriormente. Además, Web Apps for Containers admite CI/CD simplificados con Docker Hub, Azure Container Registry y GitHub. Puede usar Azure DevOps para definir canalizaciones de compilación e implementación que publican cambios en un registro. Estos cambios se pueden probar en un entorno de ensayo y implementarlos automáticamente en producción mediante ranuras de implementación, lo que permite actualizaciones sin tiempo de inactividad. Revertir a versiones anteriores se puede realizar con la misma facilidad.

Hay algunos escenarios en los que Web Apps for Containers tiene más sentido. Si tiene aplicaciones existentes que puede incluir en contenedores, ya sea en contenedores de Windows o Linux, puede hospedarlas fácilmente mediante este conjunto de herramientas. Solo tiene que publicar el contenedor y, a continuación, configurar Web Apps for Containers para extraer la versión más reciente de esa imagen del registro que prefiera. Este es un enfoque de "lift and shift" para migrar desde modelos clásicos de alojamiento de aplicaciones a un modelo optimizado en la nube.

Migración de una aplicación .NET local en contenedor a Azure Web Apps for Containers

Este enfoque también funciona bien si el equipo de desarrollo puede pasar a un proceso de desarrollo basado en contenedores. El "bucle interno" del desarrollo de aplicaciones con contenedores incluye la compilación de la aplicación con contenedores. Los cambios realizados en el código, así como en la configuración del contenedor se insertan en el control de código fuente y una compilación automatizada es responsable de publicar nuevas imágenes de contenedor en un registro como Docker Hub o Azure Container Registry. Estas imágenes se usan como base para el desarrollo adicional, así como para las implementaciones en producción, como se muestra en el diagrama siguiente:

Flujo de trabajo completo del ciclo de vida de Docker DevOps

El desarrollo con contenedores ofrece muchas ventajas, especialmente cuando se usan contenedores en producción. La misma configuración de contenedor se usa para hospedar la aplicación en cada entorno en el que se ejecuta, desde la máquina de desarrollo local para compilar y probar sistemas en producción. Este enfoque reduce considerablemente la probabilidad de defectos resultantes de diferencias en la configuración de la máquina o las versiones de software. Los desarrolladores también pueden usar las herramientas con las que son más productivos, incluido el sistema operativo, ya que los contenedores se pueden ejecutar en cualquier sistema operativo. En algunos casos, las aplicaciones distribuidas que implican muchos contenedores pueden ser muy intensivas en recursos para ejecutarse en una sola máquina de desarrollo. En este escenario, puede tener sentido actualizar a mediante Kubernetes y Azure Dev Spaces, que se tratan en la sección siguiente.

A medida que las partes de aplicaciones más grandes se dividen en sus propios microservicios más pequeños e independientes, se pueden usar patrones de diseño adicionales para mejorar el comportamiento de la aplicación. En lugar de trabajar directamente con servicios individuales, una puerta de enlace de API puede simplificar el acceso y desacoplar el cliente desde su back-end. Tener back-ends de servicio independientes para distintos servidores front-end también permite que los servicios evolucionen de forma conjunta con sus consumidores. Se puede acceder a los servicios comunes a través de un contenedor sidecar independiente, que puede incluir bibliotecas comunes de conectividad de cliente mediante el patrón ambassador .

Arquitectura de ejemplo de microservicios con varios patrones de diseño comunes indicados.

Obtenga más información sobre los patrones de diseño que se deben tener en cuenta al crear sistemas basados en microservicios.

Azure Kubernetes Service

Azure Kubernetes Service (AKS) administra el entorno de Kubernetes hospedado, lo que facilita la implementación y administración rápida y sencilla de aplicaciones en contenedores sin experiencia en orquestación de contenedores. También elimina la carga de las operaciones y el mantenimiento continuos mediante el aprovisionamiento, la actualización y el escalado de recursos a petición, sin desconectar las aplicaciones.

AKS reduce la complejidad y la sobrecarga operativa de administrar un clúster de Kubernetes descargando gran parte de esa responsabilidad en Azure. Como servicio de Kubernetes hospedado, Azure controla tareas críticas, como la supervisión de estado y el mantenimiento. Además, solo se paga por los nodos de agente en los clústeres, no por los nodos principales. Como servicio de Kubernetes administrado, AKS proporciona:

  • Actualizaciones y revisiones automatizadas de la versión de Kubernetes.
  • Escalado sencillo de clústeres.
  • Plano de control hospedado de recuperación automática (nodos principales).
  • Ahorro de costos: pague solo por la operación de nodos del grupo de agentes.

Con Azure que controla la administración de los nodos del clúster de AKS, ya no es necesario realizar muchas tareas manualmente, como las actualizaciones del clúster. Dado que Azure controla estas tareas de mantenimiento críticas, AKS no proporciona acceso directo (por ejemplo, con SSH) al clúster.

Los equipos que aprovechan AKS también pueden aprovechar Azure Dev Spaces. Azure Dev Spaces ayuda a los equipos a centrarse en el desarrollo y la iteración rápida de su aplicación de microservicios al permitir que los equipos trabajen directamente con toda su arquitectura o aplicación de microservicios que se ejecutan en AKS. Azure Dev Spaces también proporciona una manera de actualizar de forma independiente partes de la arquitectura de microservicios de forma aislada sin afectar al resto del clúster de AKS u otros desarrolladores.

Ejemplo de flujo de trabajo de Azure Dev Spaces

Azure Dev Spaces:

  • Minimizar el tiempo de instalación de la máquina local y los requisitos de recursos
  • Permitir que los equipos iteren de manera más rápida
  • Reducir el número de entornos de integración requeridos por un equipo
  • Eliminación de la necesidad de simular determinados servicios en un sistema distribuido al desarrollar o probar

Más información sobre Azure Dev Spaces

Azure Virtual Machines

Si tiene una aplicación existente que requeriría modificaciones sustanciales para ejecutarse en App Service, puede elegir Máquinas virtuales para simplificar la migración a la nube. Sin embargo, la configuración, la protección y el mantenimiento correctos de las máquinas virtuales requieren mucho más tiempo y experiencia en TI en comparación con Azure App Service. Si está pensando en Azure Virtual Machines, asegúrese de tener en cuenta el esfuerzo de mantenimiento continuo necesario para aplicar revisiones, actualizar y administrar el entorno de máquina virtual. Azure Virtual Machines es una infraestructura como servicio (IaaS), mientras que App Service es PaaS. También debe tener en cuenta si la implementación de la aplicación como contenedor de Windows en Web App for Containers podría ser una opción viable para su escenario.

Procesos lógicos

Los procesos lógicos individuales que se pueden desacoplar del resto de la aplicación se pueden implementar de forma independiente en Azure Functions de forma "sin servidor". Azure Functions le permite escribir el código que necesita para un problema determinado, sin preocuparse por la aplicación o la infraestructura para ejecutarlo. Puede elegir entre una variedad de lenguajes de programación, como C#, F#, Node.js, Python y PHP, lo que le permite elegir el lenguaje más productivo para la tarea a mano. Al igual que la mayoría de las soluciones basadas en la nube, solo paga por la cantidad de tiempo que usa y puede confiar en Azure Functions para escalar verticalmente según sea necesario.

Datos

Azure ofrece una amplia variedad de opciones de almacenamiento de datos para que la aplicación pueda usar el proveedor de datos adecuado para los datos en cuestión.

Para los datos transaccionales, relacionales, las bases de datos de Azure SQL son la mejor opción. En el caso de datos de lectura de alto rendimiento principalmente, una caché de Redis respaldada por una base de datos de Azure SQL es una buena solución.

Los datos JSON no estructurados se pueden almacenar de varias maneras, desde columnas de SQL Database a blobs o tablas de Azure Storage, a Azure Cosmos DB. De estas opciones, Azure Cosmos DB ofrece la mejor funcionalidad de consulta y es la opción recomendada para un gran número de documentos basados en JSON que deben admitir consultas.

Los datos efímeros basados en comandos o eventos usados para orquestar el comportamiento de la aplicación pueden utilizar Azure Service Bus o Azure Storage Queues. Azure Service Bus ofrece más flexibilidad y es el servicio recomendado para la mensajería no trivial dentro y entre aplicaciones.

Recomendaciones de arquitectura

Los requisitos de la aplicación deben dictar su arquitectura. Hay muchos servicios de Azure diferentes disponibles. Elegir el adecuado es una decisión importante. Microsoft ofrece una galería de arquitecturas de referencia para ayudar a identificar arquitecturas típicas optimizadas para escenarios comunes. Puede encontrar una arquitectura de referencia que se asigne estrechamente a los requisitos de la aplicación o al menos ofrezca un punto de partida.

En la figura 11-1 se muestra una arquitectura de referencia de ejemplo. En este diagrama se describe un enfoque de arquitectura recomendado para un sitio web del sistema de administración de contenido de Sitecore optimizado para marketing.

Figura 11-1

Figura 11-1. Arquitectura de referencia del sitio web de marketing de sitecore.

Referencias: recomendaciones de hospedaje de Azure