¿Buscas nuestro logo?
Aquí te dejamos una copia, pero si necesitas más opciones o quieres conocer más, visita nuestra área de marca.
Conoce nuestra marca.¿Buscas nuestro logo?
Aquí te dejamos una copia, pero si necesitas más opciones o quieres conocer más, visita nuestra área de marca.
Conoce nuestra marca.dev
Yavé Guadaño Ibáñez 16/10/2024 Cargando comentarios…
Empezamos la séptima entrega de esta serie de post de patrones de arquitectura. Aquí os dejo los artículos anteriores por si os habéis perdido alguno:
En este post veremos un caso de escalabilidad y gestión de recursos: el escalado automático.
En el desarrollo y despliegue de aplicaciones modernas, especialmente aquellas que operan en entornos de nube, la capacidad de escalar recursos de manera eficiente es crucial. El escalado automático es una técnica que permite ajustar automáticamente la cantidad de recursos asignados a una aplicación en función de la demanda actual, asegurando que los recursos sean utilizados de manera óptima y que la aplicación pueda manejar variaciones en la carga de trabajo sin intervención manual.
Esto puede incluir la adición de más instancias de servidor cuando la demanda aumenta o la reducción del número de instancias cuando la demanda disminuye, lo que optimiza el costo y el rendimiento.
Escalado vertical (Scale-Up). Aumentar los recursos (CPU, memoria) de una única instancia de servidor. Esto se hace generalmente agregando más potencia a una máquina existente, suele requerir de acciones manuales e incluso pausa del servicio, por lo que no podemos clasificarlo dentro del escalado automático, pero sí hay que mencionarlo.
Escalado horizontal (Scale-Out, Scale-In). Aumentar el número de instancias de servidor que ejecuta la aplicación. Este es el enfoque más común en la nube debido a su flexibilidad y capacidad para manejar grandes volúmenes de tráfico. También podemos reducir el número de instancias si la demanda se reduce.
La implementación del escalado automático generalmente implica el uso de servicios de nube que soportan esta funcionalidad. Los proveedores de nube más comunes, como AWS, Azure y Google Cloud, ofrecen capacidades de escalado automático.
AWS proporciona varias herramientas para el escalado automático, incluyendo:
Ejemplo de configuración de Auto Scaling Group en AWS:
{
"AutoScalingGroupName": "my-auto-scaling-group",
"LaunchConfigurationName": "my-launch-configuration",
"MinSize": 1,
"MaxSize": 10,
"DesiredCapacity": 2,
"AvailabilityZones": ["us-west-2a", "us-west-2b"],
"HealthCheckType": "EC2",
"HealthCheckGracePeriod": 300,
"Tags": [
{
"Key": "Name",
"Value": "my-instance",
"PropagateAtLaunch": true
}
],
"TerminationPolicies": ["OldestInstance"]
}
Azure también proporciona capacidades de escalado automático a través de:
Ejemplo de configuración de Auto Scale en Azure App Services:
{
"location": "East US",
"properties": {
"profiles": [
{
"name": "Profile1",
"capacity": {
"minimum": 1,
"maximum": 10,
"default": 2
},
"rules": [
{
"metricTrigger": {
"metricName": "CpuPercentage",
"metricResourceUri": "<resource-uri>",
"timeGrain": "PT1M",
"statistic": "Average",
"timeWindow": "PT5M",
"timeAggregation": "Average",
"operator": "GreaterThan",
"threshold": 70
},
"scaleAction": {
"direction": "Increase",
"type": "ChangeCount",
"value": "1",
"cooldown": "PT5M"
}
},
{
"metricTrigger": {
"metricName": "CpuPercentage",
"metricResourceUri": "<resource-uri>",
"timeGrain": "PT1M",
"statistic": "Average",
"timeWindow": "PT5M",
"timeAggregation": "Average",
"operator": "LessThan",
"threshold": 30
},
"scaleAction": {
"direction": "Decrease",
"type": "ChangeCount",
"value": "1",
"cooldown": "PT5M"
}
}
]
}
]
}
}
Google Cloud ofrece capacidades de escalado automático a través de:
Ejemplo de configuración de Auto Scaling en Google Compute Engine
autoscalingPolicy:
minNumReplicas: 1
maxNumReplicas: 10
coolDownPeriodSec: 60
cpuUtilization:
utilizationTarget: 0.6
Ajusta los recursos en base a patrones de tráfico conocidos o predicciones. Por ejemplo, aumentar la capacidad antes de un evento planificado.
Análisis predictivo
Utilizar análisis predictivos y machine learning para anticipar picos de tráfico y ajustar los umbrales de escalado en consecuencia.
Ejemplo de política de escalado predictivo en AWS:
{
"AutoScalingGroupName": "my-auto-scaling-group",
"LaunchConfigurationName": "my-launch-configuration",
"MinSize": 1,
"MaxSize": 10,
"DesiredCapacity": 2,
"AvailabilityZones": ["us-west-2a", "us-west-2b"],
"HealthCheckType": "EC2",
"HealthCheckGracePeriod": 300,
"Tags": [
{
"Key": "Name",
"Value": "my-instance",
"PropagateAtLaunch": true
}
],
"TerminationPolicies": ["OldestInstance"]
}
Este ejemplo es similar al anterior de AWS Auto Scaling Group, pero aplicado en un contexto de escalado predictivo donde se ajustan los recursos en base a patrones de tráfico anticipados. Utiliza las mismas configuraciones básicas pero se basa en análisis predictivos para ajustar los umbrales y desencadenar el escalado.
Ajusta los recursos en respuesta a la demanda actual en tiempo real. Por ejemplo, añadir instancias cuando el uso de CPU supera un umbral predefinido.
Monitorización continua
Monitorizar continuamente el uso de recursos y ajustar dinámicamente los umbrales de escalado basados en el rendimiento en tiempo real.
Configuración de warm pool en AWS:
warmPool:
MinSize: 2
MaxSize: 5
InstanceReusePolicy:
ReuseOnScaleIn: true
Ajusta los recursos en horarios específicos basados en patrones de uso predecibles. Por ejemplo, aumentar la capacidad durante el horario laboral y reducirla durante la noche.
Tareas programadas: definir horarios de escalado basados en patrones de tráfico predecibles, como horarios de trabajo o eventos especiales.
Ejemplo de configuración de escalado programado en AWS
{
"AutoScalingGroupName": "my-auto-scaling-group",
"ScheduledActions": [
{
"ScheduledActionName": "ScaleUpMorning",
"Recurrence": "0 8 * * *",
"MinSize": 5,
"MaxSize": 15,
"DesiredCapacity": 10
},
{
"ScheduledActionName": "ScaleDownEvening",
"Recurrence": "0 18 * * *",
"MinSize": 1,
"MaxSize": 5,
"DesiredCapacity": 2
}
]
}
El escalado automático es una técnica esencial para la gestión eficiente de recursos en aplicaciones modernas, especialmente en entornos de nube. A pesar de los desafíos que presenta, como la configuración y ajuste de parámetros, latencia en el escalado y costos, sus beneficios en términos de eficiencia de recursos, mejora de la disponibilidad y optimización del rendimiento lo hacen indispensable.
Las estrategias proactiva, reactiva y programada, junto con ejemplos prácticos en AWS, Azure y Google Cloud, demuestran cómo implementar de manera efectiva el escalado automático para manejar la variabilidad en la carga de trabajo y asegurar que las aplicaciones permanezcan disponibles y eficientes.
Los comentarios serán moderados. Serán visibles si aportan un argumento constructivo. Si no estás de acuerdo con algún punto, por favor, muestra tus opiniones de manera educada.
Cuéntanos qué te parece.