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.
El escalado automático es el proceso de asignación dinámica de recursos para satisfacer los requisitos de rendimiento. A medida que aumenta el volumen de trabajo, una aplicación puede necesitar más recursos para mantener los niveles de rendimiento deseados y cumplir los Acuerdos de Nivel de Servicio (SLA). A medida que la demanda disminuye y los recursos adicionales ya no son necesarios, se pueden desasignar para minimizar los costos.
El escalado automático aprovecha la elasticidad de los entornos hospedados en la nube y alivia la sobrecarga de administración. Reduce la necesidad de que un operador tenga que supervisar continuamente el rendimiento de un sistema y tomar decisiones sobre la incorporación o eliminación de recursos.
Una aplicación se puede escalar fundamentalmente de dos maneras:
El escalado vertical, también denominado escalado y reducción vertical, significa cambiar la capacidad de un recurso. Por ejemplo, podría mover una aplicación a un tamaño de máquina virtual mayor. El escalado vertical suele requerir que el sistema no esté disponible temporalmente mientras se vuelve a implementar. Por lo tanto, es menos común automatizar el escalado vertical.
El escalado horizontal, también llamado escalado hacia afuera y hacia adentro, significa agregar o quitar instancias de un recurso. La aplicación puede seguir ejecutándose sin interrupciones mientras se aprovisionan los nuevos recursos. Una vez terminado el proceso de aprovisionamiento, la solución se implementa en estos recursos adicionales. Si la demanda disminuye, los recursos adicionales se pueden apagar sin problemas y desasignarse.
Muchos sistemas basados en la nube, incluido Microsoft Azure, admiten el escalado horizontal automático. El resto de este artículo se centra en el escalado horizontal.
Nota:
El escalado automático se aplica principalmente a los recursos de proceso. Aunque es posible escalar horizontalmente una base de datos o una cola de mensajes, este proceso suele implicar la creación de particiones de datos, que normalmente no está automatizada.
Componentes de escalado automático
Normalmente, una estrategia de escalado automático implica los siguientes componentes:
Sistemas de instrumentación y supervisión en los niveles de aplicación, servicio e infraestructura. Estos sistemas capturan métricas clave, como los tiempos de respuesta, las longitudes de cola, el uso de CPU y el uso de memoria.
La lógica de toma de decisiones evalúa estas métricas de uso en vivo con respecto a umbrales predefinidos o programaciones y decide si se debe escalar.
Los componentes y los mecanismos realizan la acción de escalado. Idealmente, estos componentes y mecanismos deben desacoplarse del propio código de carga de trabajo y administrarse como un proceso externo. El código que está inactivo o sobrecargado no debe ser responsable de escalar por sí mismo.
Pruebas, supervisión y optimización de funcionalidades para la estrategia de escalado automático para asegurarse de que funciona según lo previsto.
Azure proporciona mecanismos de escalado automático integrados que abordan escenarios comunes. Si un servicio o tecnología concretos no tiene una funcionalidad de escalado automático integrada o si tiene requisitos de escalado automático específicos más allá de sus funcionalidades, considere la posibilidad de una implementación personalizada. Una implementación personalizada recopila métricas operativas y del sistema, analiza las métricas y escala los recursos en consecuencia.
Configuración del escalado automático para una solución de Azure
Azure proporciona escalabilidad automática integrada para la mayoría de las opciones de proceso.
Escalado automático de máquinas virtuales de Azure mediante conjuntos de escalado de máquinas virtuales, que administran un conjunto de máquinas virtuales como un grupo. Para más información, consulte Uso del escalado automático y conjuntos de escalado de máquinas virtuales.
Azure Service Fabric admite el escalado automático mediante conjuntos de escalado de máquinas virtuales. Cada tipo de nodo de un clúster de Service Fabric se configura como un conjunto de escalado de máquinas virtuales independiente. Cada tipo de nodo se puede escalar hacia arriba o hacia abajo de forma independiente. Para más información, consulte Escalar un clúster de Service Fabric hacia adentro o hacia afuera mediante reglas de autoescalado.
Azure App Service tiene un escalado automático integrado. La configuración de escalado automático se aplica a todas las aplicaciones de un servicio de aplicaciones. Para más información, consulte El recuento de instancias de forma manual o automática y Escalar una aplicación en App Service.
Estas opciones de proceso usan la característica de escalabilidad automática de Azure Monitor para proporcionar un conjunto común de funcionalidades de escalado automático.
- Azure Functions difiere de las opciones de proceso anteriores porque no es necesario configurar ninguna regla de escalado automático. En su lugar, Azure Functions asigna automáticamente la potencia de proceso cuando se ejecuta el código. Azure Functions se escala horizontalmente según sea necesario para controlar la carga. Para más información, consulte Elección del plan de hospedaje correcto para Azure Functions.
A veces, una solución de escalado automático personalizada puede ser útil. Por ejemplo, podría usar Diagnósticos de Azure y métricas basadas en aplicaciones, junto con código personalizado para supervisar y exportar las métricas de la aplicación. A continuación, puede definir reglas personalizadas basadas en estas métricas y usar las API REST de Azure Resource Manager para desencadenar el escalado automático. Sin embargo, una solución personalizada no es sencilla de implementar y solo debe considerarse si ninguno de los enfoques anteriores puede cumplir sus requisitos.
Use las características de escalado automático integradas de la plataforma si cumplen sus requisitos. Si no es así, considere detenidamente si necesita características de escalado más complejas. Algunos ejemplos de otros requisitos pueden incluir una mayor granularidad de control, diferentes formas de detectar eventos desencadenadores para el escalado, el escalado entre suscripciones y el escalado de otros tipos de recursos.
Uso de la característica de escalabilidad automática de Azure Monitor
La característica de escalabilidad automática de Azure Monitor proporciona un conjunto común de funcionalidades de escalado automático para conjuntos de escalado de máquinas virtuales, App Service y Azure Cloud Services. El escalado se puede realizar según una programación o en función de una métrica en tiempo de ejecución, como el uso de CPU o memoria.
Tenga en cuenta los ejemplos siguientes:
Escala hasta 10 instancias en los días laborables y reduce a cuatro instancias el sábado y el domingo.
Aumentar una instancia si el uso medio de la CPU es superior al 70 % y reducir una instancia si el uso de la CPU cae por debajo del 50 %.
Aumentar una instancia si el número de mensajes en una cola supera un cierto umbral.
Para garantizar la disponibilidad, aumente el recurso cuando aumente la carga. En momentos de uso bajo, reduce el tamaño para que puedas optimizar el coste. Use siempre una combinación de reglas de escalado y reducción horizontal. De lo contrario, el escalado automático se realiza solo en una dirección hasta que alcanza el umbral (número máximo o mínimo de instancias) establecido en el perfil.
Seleccione un recuento de instancias predeterminado que sea seguro para la carga de trabajo. El recurso se escala en función de ese valor si no se establecen recuentos máximos o mínimos de instancias.
Para obtener una lista de métricas integradas, consulte Métricas comunes de escalado automático de Azure Monitor. También puede implementar métricas personalizadas mediante Application Insights.
Puede configurar el escalado automático mediante PowerShell, la CLI de Azure, una plantilla de Azure Resource Manager o Azure Portal. Para un control más detallado, use la API REST de Resource Manager. La biblioteca de administración de supervisión de Azure y la biblioteca de Microsoft Insights (en versión preliminar) son SDK que permiten recopilar métricas de distintos recursos y realizar el escalado automático mediante el uso de las API REST. En el caso de los recursos en los que la compatibilidad con Resource Manager no está disponible o si usa Azure Cloud Services, se puede usar la API rest de Service Management para el escalado automático. En todos los demás casos, use Resource Manager.
Tenga en cuenta los siguientes puntos al usar el escalado automático:
Considere si puede predecir la carga en la aplicación con precisión suficiente para usar el escalado automático programado, agregar y quitar instancias para satisfacer los picos previstos de demanda. Si no es posible, use el escalado automático reactivo en función de las métricas en tiempo de ejecución para controlar los cambios imprevisibles en la demanda. Normalmente, puede combinar estos enfoques.
Por ejemplo, cree una estrategia que agregue recursos en función de una programación de las horas en las que sepa que la aplicación es más activa. Los recursos adicionales ayudan a garantizar que la capacidad esté disponible cuando sea necesario, sin demora al iniciar nuevas instancias. Para cada regla programada, defina métricas que permitan el escalado automático reactivo durante ese período para asegurarse de que la aplicación puede controlar los picos sostenidos pero impredecibles de la demanda.
A menudo es difícil comprender la relación entre las métricas y los requisitos de capacidad, especialmente cuando se implementa inicialmente una aplicación. Configure un poco de capacidad adicional al principio y, a continuación, supervise y ajuste las reglas de escalado automático para acercar la capacidad a la carga real.
Configure las reglas de escalado automático y, a continuación, supervise el rendimiento de la aplicación con el tiempo. Use los resultados de esta supervisión para ajustar la manera en que el sistema se escala si es necesario. Sin embargo, tenga en cuenta que el escalado automático no es un proceso instantáneo. Se tarda tiempo en reaccionar a una métrica, como el uso medio de cpu que supera o cae por debajo de un umbral especificado.
Las reglas de escalado automático que usan un mecanismo de detección basado en un atributo de desencadenador medido usan un valor agregado a lo largo del tiempo, en lugar de valores instantáneos, para desencadenar una acción de escalado automático. Los atributos de desencadenador incluyen el uso de CPU o la longitud de la cola. De forma predeterminada, el agregado es un promedio de los valores. Este enfoque impide que el sistema reaccione demasiado rápido o provoque una oscilación rápida. También da tiempo a que las nuevas instancias que se inician automáticamente se estabilicen en modo de ejecución. Otras acciones de escalado automático no se pueden producir mientras se inician las nuevas instancias. Para Azure Cloud Services y Azure Virtual Machines, el período predeterminado para la agregación es de 45 minutos. Por lo tanto, la métrica puede tardar hasta este período de tiempo en desencadenar el escalado automático en respuesta a los picos de demanda. Puede cambiar el período de agregación mediante el SDK, pero los períodos de menos de 25 minutos podrían provocar resultados imprevisibles. Para la función Web Apps de App Service, el período de promedio es más corto, lo que permite que las nuevas instancias estén disponibles en unos cinco minutos tras un cambio en la medida promedio de activación.
Evite que las acciones de escalado y reducción horizontal oscilen continuamente. Supongamos que hay dos instancias. El límite superior es 80% CPU y el límite inferior es 60%. Cuando la carga está en 85%, se agrega otra instancia. Después de un tiempo, la carga disminuye a 60%. Antes de que el servicio de escalado automático se escale, calcula la distribución de la carga total (de tres instancias) cuando se quita una instancia, llevándola a 90%. Tendría que escalar horizontalmente de nuevo inmediatamente. Por lo tanto, omite el escalamiento y es posible que nunca observe los resultados de escalado esperados.
La situación de oscilación se puede controlar eligiendo un margen adecuado entre los umbrales de escalado y reducción horizontal.
El escalado manual se restablece en función del número máximo y mínimo de instancias usadas para el escalado automático. Si actualiza manualmente el recuento de instancias a un valor superior o inferior al máximo, el motor de escalado automático se ajusta automáticamente al valor mínimo (si está por debajo) o al máximo (si está por encima). Por ejemplo, estableces el rango entre tres y seis. Si tiene una instancia en ejecución, el motor de escalado automático se escala a tres instancias en su siguiente ejecución. Del mismo modo, si establece manualmente la escala en ocho instancias, en la siguiente ejecución el escalado automático la ajusta de nuevo a seis instancias. El escalado manual es temporal a menos que restablezca también las reglas de escalado automático.
El motor de escalado automático solo procesa un perfil a la vez. Si no se cumple una condición, comprueba el siguiente perfil. Mantenga las métricas clave fuera del perfil predeterminado porque ese perfil se comprueba por última vez. Puede tener varias reglas en un perfil. Al escalar horizontalmente, el escalado automático se ejecuta si se cumple cualquier regla. En el escalado horizontal, el escalado automático requiere que se cumplan todas las reglas.
Para más información sobre cómo se escala Azure Monitor, consulte Procedimientos recomendados para el escalado automático.
Si configura el escalado automático mediante el SDK en lugar del portal, puede especificar una programación más detallada durante la cual las reglas están activas. También puede crear sus propias métricas y usarlas con o sin ninguna de las existentes en las reglas de escalado automático. Por ejemplo, puede que desee usar contadores alternativos, como el número de solicitudes por segundo o la disponibilidad media de memoria. O bien, puede usar contadores personalizados para medir procesos empresariales específicos.
Al escalar automáticamente Service Fabric, los tipos de nodo del clúster se componen de conjuntos de escalado de máquinas virtuales en el back-end, por lo que debe configurar reglas de escalado automático para cada tipo de nodo. Tenga en cuenta el número de nodos que debe tener antes de configurar el escalado automático. El nivel de confiabilidad determina el número mínimo de nodos que debe tener el tipo de nodo principal. Para más información, consulte Escalar un clúster de Service Fabric hacia adentro o hacia afuera mediante reglas de autoescalado.
Puede usar el portal para vincular recursos como instancias y colas de Azure SQL Database a una instancia de servicio en la nube. Este método permite acceder más fácilmente a las opciones de configuración de escalado manual y automático independientes para cada uno de los recursos vinculados. Para más información, consulte Administración de Azure Cloud Services.
Al configurar varias directivas y reglas, podrían entrar en conflicto entre sí. El escalado automático usa las siguientes reglas de resolución de conflictos para asegurarse de que siempre hay un número suficiente de instancias en ejecución:
Las operaciones de ampliación horizontal siempre tienen prioridad sobre las operaciones de reducción horizontal.
Cuando se produce un conflicto en las operaciones de escalado horizontal, tiene prioridad la regla que inicia el mayor aumento en el número de instancias.
Cuando las operaciones de reducción horizontal entran en conflicto, la regla que inicia la disminución más pequeña del número de instancias tiene prioridad.
En una instancia de App Service Environment, cualquier grupo de trabajo o métricas de front-end se puede usar para definir reglas de escalado automático. Para más información, consulte Introducción a App Service Environment.
Consideraciones sobre el diseño de aplicaciones
El escalado automático no es una solución instantánea. Simplemente agregar recursos a un sistema o ejecutar más instancias de un proceso no garantiza que el rendimiento del sistema mejore. Tenga en cuenta lo siguiente a la hora de diseñar una estrategia de escalado automático:
El sistema debe diseñarse para que sea horizontalmente escalable. Evite realizar suposiciones sobre la afinidad de instancia. No diseñe soluciones que requieran que el código siempre se ejecute en una instancia específica de un proceso. Al escalar horizontalmente un servicio en la nube o un sitio web, no suponga que una serie de solicitudes del mismo origen siempre se enrutan a la misma instancia. Por la misma razón, diseñe los servicios sin estado para evitar la necesidad de disponer de una serie de solicitudes de que una aplicación siempre se dirija a la misma instancia de un servicio. Al diseñar un servicio que lee los mensajes de una cola y los procesa, no realice ninguna suposición sobre qué instancia del servicio controla un mensaje específico. El escalado automático podría iniciar más instancias de un servicio a medida que crece la longitud de la cola. El patrón De consumidores competidores describe cómo controlar este escenario.
Si la solución implementa una tarea de larga duración, diseñe esta tarea para admitir tanto el escalado horizontal como el escalado vertical. Sin un diseño adecuado, esta tarea podría impedir que una instancia de un proceso se cierre de manera limpia cuando el sistema reduzca su capacidad. O podría perder datos si el proceso se termina forzosamente. Lo ideal es refactorizar una tarea de larga duración y dividir el procesamiento que realiza en fragmentos discretos más pequeños. Para obtener un ejemplo, consulte Patrón de canalizaciones y filtros.
Como alternativa, puede implementar un mecanismo de punto de control que registre información de estado sobre la tarea a intervalos regulares. Guarde esta información de estado en almacenamiento duradero a la que pueda acceder cualquier instancia del proceso que ejecuta la tarea. Por lo tanto, si se cierra el proceso, el trabajo que estaba realizando se puede reanudar desde el último punto de control mediante otra instancia. Hay bibliotecas que proporcionan esta funcionalidad, como NServiceBus y MassTransit. Conservan de forma transparente el estado, donde los intervalos se alinean con el procesamiento de mensajes de colas en Azure Service Bus.
Cuando las tareas en segundo plano se ejecutan en instancias de proceso independientes, como en roles de trabajo de una aplicación hospedada en servicios en la nube, es posible que tenga que escalar diferentes partes de la aplicación mediante diferentes directivas de escalado. Por ejemplo, es posible que tenga que implementar más instancias de proceso de interfaz de usuario (UI) sin aumentar el número de instancias de proceso en segundo plano o lo contrario. Puede ofrecer diferentes niveles de servicio, como paquetes de servicio básico y premium. Es posible que tenga que escalar horizontalmente los recursos de cálculo de los paquetes de servicio premium de manera más agresiva en comparación con los recursos de los paquetes de servicio básicos. Este enfoque le ayuda a cumplir los Acuerdos de Nivel de Servicio.
Otros criterios de escalado
Plantéese la longitud de la cola sobre la que se comunican las instancias de proceso de interfaz de usuario y en segundo plano. Úselo como criterio para la estrategia de escalado automático. Estos criterios pueden indicar un desequilibrio o una diferencia entre la carga actual y la capacidad de procesamiento de la tarea en segundo plano. Hay un atributo ligeramente más complejo pero mejor para basar las decisiones de escalado. Use el tiempo entre el momento en que se envió un mensaje y el momento en que se completó su procesamiento, conocido como el tiempo crítico. Si este valor de tiempo crítico está por debajo de un umbral empresarial significativo, no es necesario escalar, incluso si la longitud de la cola es larga.
Por ejemplo, podría haber 50 000 mensajes en una cola. Pero el tiempo crítico del mensaje más antiguo es de 500 ms y ese punto de conexión está tratando de la integración con un servicio web asociado para enviar correos electrónicos. Es posible que los responsables del negocio no consideren este escenario lo suficientemente urgente como para justificar el costo del aumento de capacidad.
Por otro lado, podría haber 500 mensajes en una cola, con el mismo tiempo crítico de 500 ms. Pero el punto de conexión forma parte de la ruta crítica en un juego en línea en tiempo real, donde las partes interesadas de la empresa definieron un tiempo de respuesta de 100 ms o menos. En ese caso, el escalado horizontal tiene sentido.
Para poder usar el tiempo crítico en las decisiones de escalado automático, resulta útil que una biblioteca agregue automáticamente la información pertinente a los encabezados de los mensajes durante la transmisión y el procesamiento. Una biblioteca de este tipo que proporciona esta funcionalidad es NServiceBus.
Si basa la estrategia de escalado automático en contadores que miden los procesos empresariales, asegúrese de comprender completamente la relación entre los resultados de estos tipos de contadores y los requisitos de capacidad de proceso reales. Entre los ejemplos de contadores se incluye el número de pedidos realizados cada hora o el tiempo de ejecución promedio de una transacción compleja. Es posible que sea necesario escalar más de un componente o unidad de proceso en respuesta a los cambios en los contadores de procesos empresariales.
Para evitar que un sistema intente escalar horizontalmente excesivamente, considere la posibilidad de limitar el número máximo de instancias que se pueden agregar automáticamente. Este enfoque también evita los costos asociados a la ejecución de muchos miles de instancias. La mayoría de los mecanismos de escalado automático permiten especificar el número mínimo y máximo de instancias de una regla. Además, considere la posibilidad de degradar correctamente la funcionalidad que proporciona el sistema si implementa el número máximo de instancias y el sistema todavía está sobrecargado.
Tenga en cuenta que el escalado automático podría no ser el mecanismo más adecuado para controlar una ráfaga repentina en la carga de trabajo. Se tarda tiempo en configurar e iniciar nuevas instancias de un servicio o agregar recursos a un sistema. Y la demanda máxima podría pasar antes de que estos recursos adicionales estén disponibles. En este escenario, podría ser mejor limitar el servicio. Para obtener más información, consulte Patrón de limitación.
Por el contrario, si necesita la capacidad para procesar todas las solicitudes cuando el volumen fluctúa rápidamente, considere la posibilidad de usar una estrategia de escalado automático agresiva que inicie instancias adicionales más rápidamente. Asegúrese de que el costo no sea un factor de contribución importante. También puede usar una directiva programada que inicie un número suficiente de instancias como para satisfacer la carga máxima antes de que se espere esa carga.
El mecanismo de escalado automático debe supervisar el proceso de escalado automático y registrar los detalles de cada evento de escalado automático. Estos detalles incluyen lo que desencadenó el evento, qué recursos se agregaron o quitaron y cuándo se produjo. Si crea un mecanismo de escalado automático personalizado, asegúrese de que incorpora esta funcionalidad. Analice la información para ayudar a medir la eficacia de la estrategia de escalado automático y ajustarla si es necesario. Puede ajustar ambos a corto plazo, ya que los patrones de uso se vuelven más obvios y a largo plazo, a medida que la empresa se expande o evolucionan los requisitos de la aplicación. Si una aplicación alcanza el límite superior definido para el escalado automático, el mecanismo también podría alertar a un operador que podría iniciar manualmente recursos adicionales si es necesario. En estas circunstancias, el operador también puede ser responsable de quitar manualmente estos recursos después de que la carga de trabajo disminuya.
Recursos relacionados
Los siguientes patrones e instrucciones también pueden ser relevantes para su escenario al implementar el escalado automático:
El patrón de limitación describe cómo una aplicación puede seguir funcionando y cumplir los Acuerdos de Nivel de Servicio cuando un aumento de la demanda coloca una carga extrema en los recursos. La limitación se puede usar con la escalado automático para impedir que un sistema se vea superado durante la operación de escalar horizontalmente.
El patrón De consumidores competidores describe cómo implementar un grupo de instancias de servicio que pueden controlar los mensajes de cualquier instancia de aplicación. El escalado automático se puede usar para iniciar y detener instancias de servicio para que coincidan con la carga de trabajo prevista. Este enfoque permite a un sistema procesar varios mensajes simultáneamente para optimizar el rendimiento, mejorar la escalabilidad y la disponibilidad, y equilibrar la carga de trabajo.
La supervisión y el diagnóstico, incluida la instrumentación y las métricas, son fundamentales para recopilar la información que puede impulsar el proceso de escalado automático.