Perspectiva del marco de trabajo bien diseñado de Azure en App de Azure Service (Web Apps)
Artículo
App de Azure Service es una solución de proceso de plataforma como servicio (PaaS) que puede usar para hospedar la carga de trabajo en la plataforma Azure. Es un servicio totalmente administrado que abstrae el proceso subyacente y descarga la responsabilidad de crear, implementar y escalar a la plataforma. Un App Service se ejecuta siempre en un plan de App Service. El plan de servicio que elija determina la región en la que se ejecuta la carga de trabajo, las configuraciones de proceso y el sistema operativo. Hay varios modelos de facturación disponibles para App Service.
En este artículo se da por supuesto que, como arquitecto, ha revisado el árbol de decisión de proceso y ha elegido App Service como proceso para la carga de trabajo. Las instrucciones de este artículo proporcionan recomendaciones arquitectónicas que se asignan a los principios de los pilares de Azure Well-Architected Framework.
Importante
Cómo usar esta guía
Cada sección tiene una lista de comprobación de diseño que presenta áreas de interés arquitectónicas junto con estrategias de diseño localizadas al ámbito tecnológico.
También se incluyen recomendaciones sobre las funcionalidades tecnológicas que pueden ayudar a materializar esas estrategias. Las recomendaciones no representan una lista exhaustiva de todas las configuraciones disponibles para la característica Web Apps de App de Azure Service y sus dependencias. En su lugar, enumeran las recomendaciones clave asignadas a las perspectivas de diseño. Use las recomendaciones para compilar la prueba de concepto o optimizar los entornos existentes.
Arquitectura básica que muestra las recomendaciones clave: arquitectura de línea de base de App Service.
Ámbito de la tecnología
Esta revisión se centra en las decisiones relacionadas entre sí para los siguientes recursos de Azure:
Planes de App Service
Web Apps
Otras ofertas de Azure están asociadas a App Service, como Azure Functions, Azure Logic Apps y App Service Environment. Esas ofertas están fuera del ámbito de este artículo. Se hace referencia a App Service Environment ocasionalmente para ayudar a aclarar las características o opciones de las ofertas principales de App Service.
Confiabilidad
El propósito del pilar confiabilidad es proporcionar funcionalidad continua mediante la creación de una resistencia suficiente y la capacidad de recuperarse rápidamente de los errores.
Los principios de diseño de confiabilidad proporcionan una estrategia de diseño de alto nivel aplicada a componentes individuales, flujos del sistema y al sistema en su conjunto.
Diseño de una lista de comprobación
Inicie la estrategia de diseño en función de la lista de comprobación de revisión de diseño para confiabilidad. Determine su relevancia para los requisitos empresariales, a la vez que tenga en cuenta los niveles y las características de App Service y sus dependencias. Amplíe la estrategia para incluir más enfoques según sea necesario.
Priorizar los flujos de usuario: no todos los flujos son igualmente críticos. Asigne prioridades a cada flujo para guiar las decisiones de diseño. El diseño del flujo de usuario puede influir en qué niveles de servicio y el número de instancias que elija para un plan y una configuración de App Service.
Por ejemplo, la aplicación podría incluir niveles front-end y back-end que se comunican a través de un agente de mensajes. Puede optar por segmentar los niveles en varias aplicaciones web para permitir el escalado independiente, la administración del ciclo de vida y el mantenimiento. La colocación de una aplicación grande en un solo plan puede provocar problemas de memoria o CPU y afectar a la confiabilidad.
Es posible que necesite más instancias en el front-end para obtener un rendimiento óptimo en la interfaz de usuario. Sin embargo, es posible que el back-end no requiera el mismo número de instancias.
Prever posibles errores: planee estrategias de mitigación para posibles errores. En la tabla siguiente se muestran ejemplos de análisis del modo de error.
Error
Mitigación
Error de los componentes subyacentes o abstractos de App Service
Tener redundancia de componentes en instancias y dependencias. Supervise el estado de las instancias, el rendimiento de la red y el rendimiento del almacenamiento.
Error de dependencias externas
Use patrones de diseño como el patrón Retry y el patrón Circuit Breaker. Supervise las dependencias externas y establezca los tiempos de espera adecuados.
Error debido a que el tráfico se enruta a instancias incorrectas
Supervisar el estado de la instancia. Considere la capacidad de respuesta y evite enviar solicitudes a instancias incorrectas.
Redundancia de compilación: cree redundancia en la aplicación y admita la infraestructura. Distribuir instancias entre zonas de disponibilidad para mejorar la tolerancia a errores. El tráfico se enruta a otras zonas si se produce un error en una zona. Implemente la aplicación en varias regiones para asegurarse de que la aplicación permanece disponible, incluso si toda una región experimenta una interrupción.
Cree niveles similares de redundancia en los servicios dependientes. Por ejemplo, las instancias de aplicación se enlazan a Blob Storage. Considere la posibilidad de configurar la cuenta de almacenamiento asociada con almacenamiento con redundancia de zona (ZRS) si una aplicación usa una implementación con redundancia de zona.
Tener redundancia en los componentes de red. Por ejemplo, use direcciones IP con redundancia de zona y equilibradores de carga.
Tener una estrategia de escalado confiable: la carga inesperada en una aplicación puede hacer que no sea confiable. Tenga en cuenta el enfoque de escalado adecuado en función de las características de la carga de trabajo. A veces puede escalar verticalmente para controlar la carga. Sin embargo, si la carga sigue aumentando, escale horizontalmente a nuevas instancias. Prefiere el escalado automático a través de enfoques manuales. Mantenga siempre un búfer de capacidad adicional durante las operaciones de escalado para evitar la degradación del rendimiento.
El nivel de plan de App Service que elija afecta al escalado en términos del número de instancias y las unidades de proceso.
Asegúrese de que la inicialización de la aplicación sea adecuada para que las nuevas instancias se calienten rápidamente y puedan recibir solicitudes.
Busque aplicaciones sin estado siempre que sea posible. El estado de escalado confiable con nuevas instancias puede aumentar la complejidad. Considere un almacén de datos externo que puede escalar de forma independiente si necesita almacenar el estado de la aplicación. Almacenar el estado de sesión en memoria puede provocar la pérdida del estado de sesión cuando hay un problema con la aplicación o con App Service. También limita la posibilidad de distribuir la carga entre otras instancias.
Pruebe periódicamente las reglas de escalado automático. Simulación de escenarios de carga para comprobar que la aplicación se escala según lo previsto. Debe registrar eventos de escalado para que pueda solucionar problemas que puedan surgir y optimizar la estrategia de escalado a lo largo del tiempo.
App Service tiene una limitación en el número de instancias de un plan, lo que puede afectar a la confiabilidad del escalado. Una estrategia consiste en usar sellos de implementación idénticos, cada instancia de plan de App Service en ejecución con su propio punto de conexión. Es esencial que se fronten todos los stamps con un equilibrador de carga externo para distribuir el tráfico entre ellos. Use App de Azure lication Gateway para implementaciones de zona única y Azure Front Door para implementaciones de varias regiones. Este enfoque es ideal para aplicaciones críticas en las que la confiabilidad es fundamental. Para más información, consulte Línea base crítica con App Service.
Un plan de App Service distribuye el tráfico entre instancias y supervisa su estado. Tenga en cuenta que es posible que el equilibrador de carga externo no detecte inmediatamente si se produce un error en una instancia.
Planear la capacidad de recuperación: la redundancia es fundamental para la continuidad empresarial. Conmutar por error a otra instancia si una instancia no es accesible. Explore las funcionalidades de recuperación automática en App Service, como la reparación automática de instancias.
Implemente patrones de diseño para controlar la degradación correcta de ambos errores transitorios, como problemas de conectividad de red y eventos a gran escala, como interrupciones regionales. Tenga en cuenta los siguientes patrones de diseño:
El patrón Bulkhead segmenta la aplicación en grupos aislados para evitar que un error afecte a todo el sistema.
El patrón de nivelación de carga basado en cola pone en cola elementos de trabajo que sirven como búfer para suavizar los picos de tráfico.
El patrón Retry controla errores transitorios debido a problemas de red, conexione de base de datos descartados o servicios ocupados.
El patrón Circuit Breaker impide que una aplicación intente realizar repetidamente una operación que probablemente produzca un error.
Puede usar WebJobs para ejecutar tareas en segundo plano en la aplicación web. Para ejecutar esas tareas de forma confiable, asegúrese de que la aplicación que hospeda el trabajo se ejecuta continuamente según una programación o basada en desencadenadores controlados por eventos.
Para obtener más información, consulte Patrones de confiabilidad.
Realizar pruebas de confiabilidad: realice pruebas de carga para evaluar la confiabilidad y el rendimiento de la aplicación bajo carga. Los planes de prueba deben incluir escenarios que validen las operaciones de recuperación automatizadas.
Use la inyección de errores para introducir errores intencionadamente y validar los mecanismos de recuperación automática y autoconservación. Explore la biblioteca de errores proporcionada por Azure Chaos Studio.
App Service impone límites de recursos en las aplicaciones hospedadas. El plan de App Service determina estos límites. Asegúrese de que las pruebas confirmen que la aplicación se ejecuta dentro de esos límites de recursos. Para más información, consulte Límites, cuotas y restricciones de suscripción y servicios de Microsoft Azure.
Use sondeos de estado para identificar trabajos que no responden: App Service tiene funcionalidades integradas que hacen ping periódicamente a una ruta de acceso específica de la aplicación web. Las instancias que no responden se quitan del equilibrador de carga y se reemplazan por una nueva instancia.
Recomendaciones
Recomendación
Prestación
(Plan de App Service) Elija el nivel Premium de un plan de App Service para cargas de trabajo de producción.
Establezca el número máximo y mínimo de trabajadores según el planeamiento de capacidad. Para más información, consulte Introducción al plan de App Service.
Un plan premium de App Service ofrece características de escalado avanzadas y garantiza la redundancia si se producen errores.
Considere la posibilidad de aprovisionar más de tres instancias para mejorar la tolerancia a errores.
Compruebe la compatibilidad regional con la redundancia de zona porque no todas las regiones ofrecen esta característica.
La aplicación puede resistir errores en una sola zona cuando varias instancias se distribuyen entre zonas. El tráfico cambia automáticamente a instancias correctas en otras zonas y mantiene la confiabilidad de la aplicación si una zona no está disponible.
(App Service) Considere la posibilidad de deshabilitar la característica de afinidad de enrutamiento de solicitudes de aplicación (ARR). La afinidad de ARR crea sesiones permanentes que redirigen a los usuarios al nodo que controló sus solicitudes anteriores.
Las solicitudes entrantes se distribuyen uniformemente entre todos los nodos disponibles al deshabilitar la afinidad de ARR. Las solicitudes distribuidas uniformemente impiden que el tráfico sobrepase cualquier nodo único. Las solicitudes se pueden redirigir sin problemas a otros nodos correctos si un nodo no está disponible.
Evite la afinidad de sesión para asegurarse de que la instancia de App Service permanece sin estado. Una instancia de App Service sin estado reduce la complejidad y garantiza un comportamiento coherente entre los nodos.
Quite las sesiones permanentes para que App Service pueda agregar o quitar instancias para escalar horizontalmente.
(App Service) Defina reglas de recuperación automática basadas en el recuento de solicitudes, solicitudes lentas, límites de memoria y otros indicadores que forman parte de la línea de base de rendimiento. Considere esta configuración como parte de la estrategia de escalado.
Las reglas de recuperación automática ayudan a la aplicación a recuperarse automáticamente de problemas inesperados. Las reglas configuradas desencadenan acciones de recuperación cuando se infringen los umbrales.
La recuperación automática permite el mantenimiento automático automático.
(App Service) Habilite la característica de comprobación de estado y proporcione una ruta de acceso que responda a las solicitudes de comprobación de estado.
Las comprobaciones de estado pueden detectar problemas temprano. A continuación, el sistema puede realizar automáticamente acciones correctivas cuando se produce un error en una solicitud de comprobación de estado.
El equilibrador de carga enruta el tráfico de las instancias incorrectas, lo que dirige a los usuarios a nodos correctos.
Seguridad
El propósito del pilar seguridad es proporcionar garantías de confidencialidad, integridad y disponibilidad a la carga de trabajo.
Los principios de diseño de seguridad proporcionan una estrategia de diseño de alto nivel para lograr esos objetivos aplicando enfoques al diseño técnico en torno al hospedaje en App Service.
Diseño de una lista de comprobación
Inicie la estrategia de diseño en función de la lista de comprobación de revisión de diseño de Seguridad e identifique vulnerabilidades y controles para mejorar la posición de seguridad. Amplíe la estrategia para incluir más enfoques según sea necesario.
Revise las líneas base de seguridad: para mejorar la posición de seguridad de la aplicación hospedada en un plan de App Service, revise la línea de base de seguridad de App Service.
Use el entorno de ejecución y las bibliotecas más recientes: pruebe exhaustivamente las compilaciones de la aplicación antes de realizar actualizaciones para detectar problemas al principio y garantizar una transición sin problemas a la nueva versión. App Service admite la directiva de compatibilidad de Language Runtime para actualizar las pilas existentes y retirar pilas de fin de soporte técnico.
Crear segmentación a través de límites de aislamiento para contener infracciones: aplique la segmentación de identidades. Por ejemplo, implemente el control de acceso basado en rol (RBAC) para asignar permisos específicos basados en roles. Siga el principio de privilegios mínimos para limitar los derechos de acceso solo a lo necesario. Cree también la segmentación en el nivel de red. Inserte aplicaciones de App Service en una red virtual de Azure para el aislamiento y defina grupos de seguridad de red (NSG) para filtrar el tráfico.
Los planes de App Service ofrecen el nivel de App Service Environment que proporciona un alto grado de aislamiento. Con App Service Environment, obtendrá procesos y redes dedicados.
Aplicar controles de acceso a identidades: restrinja el acceso entrante a la aplicación web y el acceso externo desde la aplicación web a otros recursos. Esta configuración aplica controles de acceso a las identidades y ayuda a mantener la posición de seguridad general de la carga de trabajo.
Controlar el tráfico de red hacia y desde la aplicación: no exponga los puntos de conexión de aplicación a la red pública de Internet. En su lugar, agregue un punto de conexión privado en la aplicación web que se coloca en una subred dedicada. Front your application with a reverse proxy that communicates with that private endpoint. Considere la posibilidad de usar Application Gateway o Azure Front Door para ese propósito.
Implemente un firewall de aplicaciones web (WAF) para protegerse frente a vulnerabilidades comunes. Application Gateway y Azure Front Door tienen funcionalidades de WAF integradas.
Configure las reglas de proxy inverso y las opciones de red adecuadamente para lograr el nivel deseado de seguridad y control. Por ejemplo, agregue reglas de NSG en la subred del punto de conexión privado para aceptar solo el tráfico del proxy inverso.
El tráfico de salida de la aplicación a otros servicios paaS debe estar a través de puntos de conexión privados. Considere la posibilidad de colocar un componente de firewall para restringir el tráfico de salida a la red pública de Internet. Ambos enfoques impiden la filtración de datos.
Para obtener una vista completa, consulte Características de red de App Service.
Cifrado de datos: proteja los datos en tránsito con seguridad de la capa de transporte (TLS) de un extremo a otro. Use las claves administradas por el cliente para el cifrado completo de datos en reposo. Para más información, consulte Cifrado en reposo mediante claves administradas por el cliente.
No use protocolos heredados como TLS 1.0 y 1.1. App Service habilita la versión 1.2 de forma predeterminada. Para más información, consulte Introducción a TLS de App Service.
Todas las instancias de App Service tienen un nombre de dominio predeterminado. Use un dominio personalizado y proteja ese dominio con certificados.
Reducir la superficie expuesta a ataques: quite las configuraciones predeterminadas que no necesite. Por ejemplo, deshabilite la depuración remota, la autenticación local para sitios del Administrador de control de código fuente (SCM) y la autenticación básica. Deshabilite protocolos no seguros como HTTP y Protocolo de transferencia de archivos (FTP). Aplicar configuraciones mediante directivas de Azure. Para más información, consulte Directivas de Azure.
Implementar directivas restrictivas de uso compartido de recursos entre orígenes (CORS): use directivas DE CORS restrictivas en la aplicación web para aceptar solo las solicitudes de los dominios, encabezados y otros criterios permitidos. Aplique directivas de CORS con definiciones de directivas de Azure integradas.
Protección de secretos de aplicación: debe controlar información confidencial, como claves de API o tokens de autenticación. En lugar de codificar estos secretos directamente en el código de aplicación o los archivos de configuración, puede usar referencias de Azure Key Vault en la configuración de la aplicación. Cuando se inicia la aplicación, App Service recupera automáticamente los valores secretos de Key Vault mediante la identidad administrada de la aplicación.
Habilitar registros de recursos para la aplicación: habilite los registros de recursos de la aplicación para crear pistas de actividad completas que proporcionen datos valiosos durante las investigaciones que siguen los incidentes de seguridad.
Considere la posibilidad de registrar como parte del proceso de modelado de amenazas al evaluar las amenazas.
Recomendaciones
Recomendación
Prestación
(App Service) Asigne identidades administradas a la aplicación web. Para mantener los límites de aislamiento, no comparta ni reutilice identidades entre aplicaciones.
La aplicación recupera secretos de Key Vault para autenticar la comunicación externa desde la aplicación. Azure administra la identidad y no requiere que aprovisione ni gire ningún secreto.
Tiene identidades distintas para la granularidad del control. Las identidades distintas facilitan la revocación si una identidad está en peligro.
Los dominios personalizados permiten la comunicación segura a través de HTTPS mediante el protocolo seguridad de la capa de transporte (TLS), lo que garantiza la protección de datos confidenciales y crea confianza del usuario.
(App Service) valora si la autenticación integrada de App Service es el mecanismo adecuado para autenticar a los usuarios que acceden a la aplicación. La autenticación integrada de App Service se integra con microsoft Entra ID. Esta característica controla la validación de tokens y la administración de identidades de usuario en varios proveedores de inicio de sesión y admite openID Conectar. Con esta característica, no tiene autorización en un nivel granular y no tiene un mecanismo para probar la autenticación.
Al usar esta característica, no es necesario usar bibliotecas de autenticación en el código de aplicación, lo que reduce la complejidad. El usuario ya está autenticado cuando una solicitud llega a la aplicación.
(App Service) Configure la aplicación para la integración de red virtual.
Obtenga las ventajas de seguridad de usar una red virtual de Azure. Por ejemplo, la aplicación puede acceder de forma segura a los recursos dentro de la red.
Agregue un punto de conexión privado para ayudar a proteger la aplicación. Los puntos de conexión privados limitan la exposición directa a la red pública y permiten el acceso controlado a través del proxy inverso.
(App Service) Para implementar la protección: - Deshabilite la autenticación básica que usa un nombre de usuario y una contraseña en favor de la autenticación basada en identificadores de Microsoft Entra. - Desactive la depuración remota para que no se abran los puertos de entrada. - Habilite las directivas de CORS para reforzar las solicitudes entrantes. - Deshabilitar protocolos, como FTP.
No se recomienda la autenticación básica como método de implementación segura. Microsoft Entra ID emplea la autenticación basada en tokens de OAuth 2.0, que ofrece numerosas ventajas y mejoras que abordan las limitaciones asociadas a la autenticación básica.
Las directivas restringen el acceso a los recursos de la aplicación, solo permiten solicitudes de dominios específicos y protegen las solicitudes entre regiones.
Los secretos se mantienen separados de la configuración de la aplicación. La configuración de la aplicación se cifra en reposo. App Service también administra las rotaciones de secretos.
Obtenga protección en tiempo real para los recursos que se ejecutan en un plan de App Service. Proteja contra amenazas y mejore su posición general de seguridad.
(Plan de App Service) Habilite el registro de diagnóstico y agregue instrumentación a la aplicación. Los registros se envían a cuentas de Azure Storage, Azure Event Hubs y Log Analytics. Para obtener más información sobre los tipos de registro de auditoría, consulte Tipos de registro admitidos.
El registro captura los patrones de acceso. Registra eventos relevantes que proporcionan información valiosa sobre cómo interactúan los usuarios con una aplicación o plataforma. Esta información es fundamental para fines de responsabilidad, cumplimiento y seguridad.
Optimización de costos
La optimización de costos se centra en detectar patrones de gasto, priorizar las inversiones en áreas críticas y optimizar en otros usuarios para satisfacer el presupuesto de la organización al tiempo que cumple los requisitos empresariales.
Los principios de diseño de optimización de costos proporcionan una estrategia de diseño de alto nivel para lograr esos objetivos y hacer inconvenientes según sea necesario en el diseño técnico relacionado con las aplicaciones web y el entorno en el que se ejecutan.
Diseño de una lista de comprobación
Inicie la estrategia de diseño en función de la lista de comprobación de revisión de diseño para la optimización de costos para las inversiones y ajuste el diseño para que la carga de trabajo esté alineada con el presupuesto asignado para la carga de trabajo. El diseño debe usar las funcionalidades adecuadas de Azure, supervisar las inversiones y encontrar oportunidades para optimizar con el tiempo.
Calcule el costo inicial: como parte del ejercicio de modelado de costos, use la calculadora de precios de Azure para evaluar los costos aproximados asociados a varios niveles en función del número de instancias que planea ejecutar. Cada nivel de App Service ofrece diferentes opciones de proceso.
Supervise continuamente el modelo de costos para realizar un seguimiento de los gastos.
Evalúe las opciones con descuento: los niveles superiores incluyen instancias de proceso dedicadas. Puede aplicar un descuento por reserva si la carga de trabajo tiene un patrón de uso predecible y coherente. Asegúrese de analizar los datos de uso para determinar el tipo de reserva que se adapte a la carga de trabajo. Para más información, consulte Ahorro de costos con instancias reservadas de App Service.
Descripción de los medidores de uso: Azure cobra una tarifa por hora, prorrateada a la segunda, en función del plan de tarifa del plan de App Service. Los cargos se aplican a cada instancia escalada horizontalmente del plan, en función del tiempo que asigne la instancia de máquina virtual. Preste atención a los recursos de proceso infrautilizados que podrían aumentar los costos como resultado de la sobreasignación debido a la selección de SKU poco óptima o a la configuración de escalado deficiente.
Las características adicionales de App Service, como el registro de dominio personalizado y los certificados personalizados, pueden agregar costos. Otros recursos, como las redes virtuales, para aislar la solución o los almacenes de claves para proteger los secretos de carga de trabajo, que se integran con los recursos de App Service también pueden agregar costos. Para más información, consulte Modelo de facturación de App Services.
Tenga en cuenta los inconvenientes entre la densidad y el aislamiento: puede usar planes de App Service para hospedar varias aplicaciones en el mismo proceso, lo que ahorra costos con entornos compartidos. Para obtener más información, consulte Ventajas y desventajas.
Evalúe el efecto de la estrategia de escalado en el costo: debe diseñar, probar y configurar correctamente para el escalado horizontal y para el escalado horizontal al implementar el escalado automático. Establezca límites máximos y mínimos precisos en el escalado automático.
Inicialice proactivamente la aplicación para el escalado confiable. Por ejemplo, no espere hasta que la CPU alcance el 95 % de uso. En su lugar, desencadene el escalado en alrededor del 65 % para permitir que se asignen e inicialicen nuevas instancias durante el proceso de escalado. Sin embargo, esta estrategia podría dar lugar a una capacidad sin usar.
Se recomienda combinar y equilibrar los mecanismos para escalar verticalmente y escalar horizontalmente. Por ejemplo, una aplicación puede escalar verticalmente durante algún tiempo y, a continuación, escalar horizontalmente según sea necesario. Explore los niveles altos que ofrecen una gran capacidad y un uso eficaz de los recursos. En función de los patrones de uso, los niveles Premium más altos suelen ser más rentables porque son más capaces.
Optimizar los costos del entorno: considere el nivel Básico o Gratis para ejecutar entornos de preproducción. Estos niveles son de bajo rendimiento y bajo costo. Si usa el nivel Básico o Gratis, use la gobernanza para aplicar el nivel, restringir el número de instancias y CPU, restringir el escalado y limitar la retención de registros.
Implementar patrones de diseño: esta estrategia reduce el volumen de solicitudes que genera la carga de trabajo. Considere la posibilidad de usar patrones como los back-end para el patrón front-end y el patrón de agregación de puerta de enlace, lo que puede minimizar el número de solicitudes y reducir los costos.
Compruebe periódicamente los costos relacionados con los datos: los períodos de retención de datos extendidos o los niveles de almacenamiento costosos pueden dar lugar a altos costos de almacenamiento. Se pueden acumular más gastos debido al uso de ancho de banda y a la retención prolongada de los datos de registro.
Considere la posibilidad de implementar el almacenamiento en caché para minimizar los costos de transferencia de datos. Comience con el almacenamiento en caché local en memoria y, a continuación, explore las opciones de almacenamiento en caché distribuido para reducir el número de solicitudes a la base de datos back-end. Tenga en cuenta los costos de tráfico de ancho de banda asociados a la comunicación entre regiones si la base de datos se encuentra en otra región.
Optimizar los costos de implementación: aproveche las ranuras de implementación para optimizar los costos. La ranura se ejecuta en el mismo entorno de proceso que la instancia de producción. Úselas estratégicamente para escenarios como implementaciones azul-verde que cambian entre ranuras. Este enfoque minimiza el tiempo de inactividad y garantiza transiciones suaves.
Use ranuras de implementación con precaución. Puede presentar problemas, como excepciones o pérdidas de memoria, que podrían afectar tanto a las instancias existentes como a las nuevas. Asegúrese de probar exhaustivamente los cambios. Para obtener instrucciones operativas, consulte Excelencia operativa.
Recomendaciones
Recomendación
Prestación
(Plan de App Service) Elija Niveles gratis o Básico para entornos inferiores. Se recomiendan estos niveles para su uso experimental. Quite los niveles cuando ya no los necesite.
Los niveles Gratis y Básico son asequibles en comparación con los niveles superiores. Proporcionan una solución rentable para entornos que no son de producción que no necesitan las características completas y el rendimiento de los planes Premium.
(Plan de App Service) Aproveche los descuentos y explore los precios preferidos para: - Entornos inferiores con planes de desarrollo y pruebas. - Reservas de Azure y planes de ahorro de Azure para un proceso dedicado que se aprovisiona en el nivel Premium V3 y App Service Environment.
Use instancias reservadas para cargas de trabajo estables que tengan patrones de uso predecibles.
Los planes de desarrollo y pruebas proporcionan tarifas reducidas para los servicios de Azure, lo que hace que sean rentables para entornos que no son de producción.
Use instancias reservadas para pagar por adelantado los recursos de proceso y obtener descuentos significativos.
(App Service) Supervise los costos que incurren los recursos de App Service. Ejecute la herramienta de análisis de costos en Azure Portal.
Puede identificar los picos de costos, las ineficacias o los gastos inesperados al principio. Este enfoque proactivo le ayuda a proporcionar controles presupuestarios para evitar excesos de gastos.
Evite el wastage y reduzca los gastos innecesarios.
Excelencia operativa
La excelencia operativa se centra principalmente en los procedimientos para las prácticas de desarrollo, la observabilidad y la administración de versiones.
Los principios de diseño de excelencia operativa proporcionan una estrategia de diseño de alto nivel para lograr esos objetivos hacia los requisitos operativos de la carga de trabajo.
Administrar versiones: use ranuras de implementación para administrar versiones de forma eficaz. Puede implementar la aplicación en una ranura, realizar pruebas y validar su funcionalidad. Después de la comprobación, puede mover sin problemas la aplicación a producción. Este proceso no conlleva costos adicionales porque la ranura se ejecuta en el mismo entorno de máquina virtual (VM) que la instancia de producción.
Ejecutar pruebas automatizadas: antes de promover una versión de la aplicación web, pruebe exhaustivamente su rendimiento, funcionalidad e integración con otros componentes. Use Azure Load Testing, que se integra con Apache JMeter, una herramienta popular para las pruebas de rendimiento. Explore herramientas automatizadas para otros tipos de pruebas, como Phantom para pruebas funcionales.
Implementar unidades inmutables: implemente el patrón De stamps de implementación para compartimentar App Service en un sello inmutable. App Service admite el uso de contenedores, que son intrínsecamente inmutables. Considere la posibilidad de usar contenedores personalizados para la aplicación web de App Service.
Cada sello representa una unidad independiente que se puede escalar horizontalmente o escalar horizontalmente rápidamente. Las unidades basadas en este sello son temporales y sin estado. El diseño sin estado simplifica las operaciones y el mantenimiento. Este enfoque es ideal para aplicaciones críticas. Para obtener un ejemplo, consulte Línea base crítica con App Service.
Use una infraestructura como tecnología de código (IaC), como Bicep, para desmarcar unidades con repetibilidad y coherencia.
Mantener seguros los entornos de producción: cree planes independientes de App Service para ejecutar entornos de producción y preproducción. No realice cambios directamente en el entorno de producción para garantizar la estabilidad y confiabilidad. Las instancias independientes permiten flexibilidad en el desarrollo y las pruebas antes de promover cambios en producción.
Use entornos bajos para explorar nuevas características y configuraciones de forma aislada. Mantenga los entornos de desarrollo y prueba efímeros.
Administrar certificados: para dominios personalizados, debe administrar certificados TLS.
Tener procesos implementados para adquirir, renovar y validar certificados. Descargue estos procesos en App Service si es posible. Si usa su propio certificado, debe administrar su renovación. Elija un enfoque que se adapte mejor a sus requisitos de seguridad.
El registro frecuente puede ralentizar el rendimiento del sistema, agregar a los costos de almacenamiento e introducir riesgos si tiene acceso no seguro a los registros. Siga estos procedimientos recomendados: - Registre el nivel correcto de información. - Establecer directivas de retención. - Mantener una pista de auditoría del acceso autorizado y los intentos no autorizados. - Tratar los registros como datos y aplicar controles de protección de datos.
Los registros de diagnóstico proporcionan información valiosa sobre el comportamiento de la aplicación. Supervise los patrones de tráfico e identifique anomalías.
App Service controla automáticamente procesos como la adquisición de certificados, la comprobación de certificados, la renovación de certificados y la importación de certificados desde Key Vault. Como alternativa, cargue el certificado en Key Vault y autorice al proveedor de recursos de App Service para acceder a él.
Revierta rápidamente al último estado correcto conocido si detecta un problema después de un intercambio.
Eficiencia del rendimiento
La eficiencia del rendimiento consiste en mantener la experiencia del usuario incluso cuando hay un aumento de la carga mediante la administración de la capacidad. La estrategia incluye el escalado de recursos, la identificación y la optimización de posibles cuellos de botella y la optimización del rendimiento máximo.
Los principios de diseño de eficiencia del rendimiento proporcionan una estrategia de diseño de alto nivel para lograr esos objetivos de capacidad con respecto al uso esperado.
Identificar y supervisar indicadores de rendimiento: establezca destinos para los indicadores clave de la aplicación, como el volumen de solicitudes entrantes, el tiempo que tarda la aplicación en responder a las solicitudes, las solicitudes pendientes y los errores en las respuestas HTTP. Considere los indicadores clave como parte de la línea base de rendimiento de la carga de trabajo.
Capture las métricas de App Service que forman la base de los indicadores de rendimiento. Recopile registros para obtener información sobre el uso y las actividades de los recursos. Use herramientas de supervisión del rendimiento de aplicaciones (APM), como Application Ideas, para recopilar y analizar datos de rendimiento de la aplicación. Para más información, consulte Referencia de datos de supervisión de App Service.
Incluya instrumentación de nivel de código, seguimiento de transacciones y generación de perfiles de rendimiento.
Evaluar capacidad: simule varios escenarios de usuario para determinar la capacidad óptima que necesita para controlar el tráfico esperado. Use Load Testing para comprender cómo se comporta la aplicación en distintos niveles de carga.
Seleccione el nivel derecho: Use el proceso dedicado para cargas de trabajo de producción. Los niveles Premium ofrecen SKU más grandes con mayor capacidad de memoria y CPU, más instancias y más características, como la redundancia de zona. Para más información, consulte Plan de tarifa Premium V3.
Optimizar la estrategia de escalado: cuando sea posible, use el escalado automático en lugar de ajustar manualmente el número de instancias a medida que cambia la carga de la aplicación. Con el escalado automático, App Service ajusta la capacidad del servidor en función de las reglas o desencadenadores predefinidos. Asegúrese de realizar pruebas de rendimiento adecuadas y de establecer las reglas adecuadas para los desencadenadores adecuados.
Si prioriza la simplicidad durante la configuración inicial, use una opción de escalado automático que no requiera definir reglas y solo tiene que establecer límites.
Disponer de recursos suficientes disponibles para garantizar un rendimiento óptimo. Asigne recursos adecuadamente para mantener los objetivos de rendimiento, como el tiempo de respuesta o el rendimiento. Considere la sobreasignación de recursos cuando sea necesario.
Al definir reglas de escalado automático, tenga en cuenta el tiempo que tarda la aplicación en inicializarse. Tenga en cuenta esta sobrecarga al tomar todas las decisiones de escalado.
Uso del almacenamiento en caché: la recuperación de información de un recurso que no cambia con frecuencia y es costosa para acceder afecta al rendimiento. Las consultas complejas, incluidas las combinaciones y varias búsquedas, contribuyen al tiempo de ejecución. Realice el almacenamiento en caché para minimizar el tiempo de procesamiento y la latencia. Almacenar en caché los resultados de la consulta para evitar recorridos de ida y vuelta repetidos a la base de datos o back-end y reducir el tiempo de procesamiento de las solicitudes posteriores.
Para obtener más información sobre el uso de la caché local y distribuida en la carga de trabajo, consulte Almacenamiento en caché.
Revise los antipatrones de rendimiento: para asegurarse de que la aplicación web realiza y escala según sus requisitos empresariales, evite los antipatrones típicos. Estos son algunos antipatrones que App Service corrige.
Las tareas que consumen muchos recursos pueden aumentar los tiempos de respuesta para las solicitudes de usuario y producir latencia alta. Mueva los procesos que consumen muchos recursos a un back-end independiente. Use un agente de mensajes para poner en cola tareas que consumen muchos recursos que el back-end recoge para procesar de forma asincrónica.
Los sistemas multiinquilino comparten recursos entre inquilinos, La actividad de un inquilino puede tener un efecto negativo en el uso del sistema de otro inquilino. App Service Environment proporciona un entorno totalmente aislado y dedicado para ejecutar aplicaciones de App Service.
Recomendaciones
Recomendación
Prestación
Habilite la configuración AlwaysOn cuando las aplicaciones compartan un único plan de App Service. Las aplicaciones de App Service se descargan automáticamente cuando están inactivas para ahorrar recursos. La siguiente solicitud desencadena un inicio en frío, lo que puede provocar tiempos de espera de solicitud.
La aplicación nunca se descarga con AlwaysOn habilitado.
Elija HTTP/2 a través de HTTP/1.1 porque conexiones HTTP/2 totalmente multiplexas, reutiliza las conexiones para reducir la sobrecarga y comprime los encabezados para minimizar la transferencia de datos.
Compromisos
Es posible que tenga que hacer inconvenientes en el diseño si usa los enfoques en las listas de comprobación del pilar. Estos son algunos ejemplos de ventajas e inconvenientes.
Densidad y aislamiento
Mayor densidad: coloque varias aplicaciones dentro del mismo plan de App Service para minimizar los recursos. Todas las aplicaciones comparten recursos como CPU y memoria, lo que puede ahorrar dinero y reducir la complejidad operativa. Este enfoque también optimiza el uso de recursos. Las aplicaciones pueden usar recursos inactivos de otra aplicación si los patrones de carga cambian con el tiempo.
Tenga en cuenta también las desventajas. Por ejemplo, los picos de uso o inestabilidad de una aplicación pueden afectar al rendimiento de otras aplicaciones. Los incidentes de una aplicación también pueden permear a otras aplicaciones dentro del entorno compartido, lo que puede afectar a la seguridad.
Aislamiento superior: el aislamiento ayuda a evitar interferencias. Esta estrategia se aplica a la seguridad, el rendimiento e incluso la segregación de entornos de desarrollo, pruebas y producción.
App Service Environment proporciona un mejor control sobre la seguridad y la protección de datos, ya que cada aplicación puede tener su propia configuración de seguridad. El entorno puede contener infracciones porque el aislamiento limita el radio de explosión. La contención de recursos se minimiza desde una perspectiva de rendimiento. El aislamiento permite el escalado independiente en función de la demanda específica y el planeamiento de la capacidad individual.
Como desventaja, este enfoque es más caro y requiere rigor operativo.
Estrategia de escalado confiable
Una estrategia de escalado bien definida garantiza que la aplicación pueda controlar varias cargas sin poner en peligro el rendimiento. Sin embargo, hay inconvenientes en el costo. Las operaciones de escalado tardan tiempo. Cuando se asignan nuevos recursos, la aplicación debe inicializarse correctamente para poder procesar las solicitudes de forma eficaz. Puede sobreaprovisionar recursos (instancias de prewarm) para proporcionar una red de seguridad. Sin esa capacidad adicional, durante la fase de inicialización, puede haber un retraso en atender las solicitudes, lo que afecta a la experiencia del usuario. Las operaciones de escalado automático pueden desencadenarse lo suficientemente pronto como para habilitar la inicialización de recursos adecuada por el momento en que los clientes usan los recursos.
Como desventaja, los recursos sobreaprovisionados cuestan más. Se le cobrará por segundo por cada instancia, incluidas las instancias activadas previamente. Los niveles superiores incluyen instancias prewarmed. Determine si las funcionalidades con niveles más caros merecen la pena la inversión.
Creación de redundancia
La redundancia ofrece resistencia, pero también conlleva costos. Los objetivos de nivel de servicio (SLO) para la carga de trabajo determinan los umbrales de rendimiento aceptables. Se pierde si la redundancia supera los requisitos de SLO. Evalúe si el exceso de redundancia mejora los SLO o agrega complejidad innecesaria.
Tenga en cuenta también las desventajas. Por ejemplo, la redundancia de varias regiones proporciona alta disponibilidad, pero agrega complejidad y costo debido a la sincronización de datos, los mecanismos de conmutación por error y la comunicación entre regiones. Determine si la redundancia de zona puede cumplir los SLO.
Directivas de Azure
Azure proporciona un amplio conjunto de directivas integradas relacionadas con App Service y sus dependencias. Un conjunto de directivas de Azure puede auditar algunas de las recomendaciones anteriores. Por ejemplo, puede comprobar si:
Los controles de red adecuados están en vigor. Por ejemplo, puede incorporar la segmentación de red colocando App Service en Azure Virtual Network a través de la inyección de red virtual para tener un mayor control sobre la configuración de red. La aplicación no tiene puntos de conexión públicos y se conecta a los servicios de Azure a través de puntos de conexión privados.
Los controles de identidad están en vigor. Por ejemplo, la aplicación usa identidades administradas para autenticarse en otros recursos. La autenticación integrada de App Service (Easy Auth) comprueba las solicitudes entrantes.
Las características como la depuración remota y la autenticación básica están deshabilitadas para reducir la superficie expuesta a ataques.
Para una gobernanza completa, revise las definiciones integradas de Azure Policy y otras directivas que podrían afectar a la seguridad de la capa de proceso.
Recomendaciones de Azure Advisor
Azure Advisor es un consultor en la nube personalizado que ayuda a seguir los procedimientos recomendados para optimizar las implementaciones de Azure. Estas son algunas recomendaciones que pueden ayudarle a mejorar la confiabilidad, la seguridad, la rentabilidad, el rendimiento y la excelencia operativa de las instancias de aplicación web.
Tenga en cuenta los siguientes artículos como recursos que muestran las recomendaciones resaltadas en este artículo.
Use estas arquitecturas de referencia como ejemplos de cómo aplicar estas recomendaciones a una carga de trabajo.
Si nunca ha implementado una aplicación web, consulte Aplicación web básica.
Para obtener una arquitectura básica como punto de partida para una implementación de nivel de producción, consulte Aplicación web con redundancia de zona de alta disponibilidad de línea base.
Use la siguiente documentación del producto para crear sus conocimientos de implementación:
Obtenga información sobre cómo optimizar la carga de trabajo para satisfacer los requisitos de rendimiento al equilibrar los costos, la confiabilidad y la seguridad.
Cree soluciones de un extremo a otro en Microsoft Azure para crear Azure Functions, implementar y administrar aplicaciones web, desarrollar soluciones que usen Azure Storage, etc.