Что такое auto-scaling и как оно настраивается в AWS/GCP/Azure?

Auto-scaling — это механизм автоматического изменения вычислительных мощностей (числа инстансов/подов/функций и т. п.) в ответ на текущую нагрузку и заданные политики. Цель — обеспечить нужную производительность при минимальных затратах: увеличивать ёмкость при пиках и уменьшать — при простое.

Типы масштабирования

  • Горизонтальное (scale out/in) — добавление/удаление экземпляров (VM, контейнеров, подов).

  • Вертикальное (scale up/down) — изменение ресурсов одного экземпляра (CPU/RAM).

  • Predictive / scheduled — заранее по расписанию или прогнозу (например, утренние пики).

  • Reactive — на основе метрик в реальном времени (CPU, latency, очередь).

Основные элементы автоскейлинга

  • Политики: правила, по которым увеличиваем/уменьшаем ёмкость (thresholds, target tracking, step scaling).

  • Минимум/максимум: жесткие границы (min/max instances) для контроля стоимости и безопасности.

  • Метрики и цели: CPU, memory, custom metrics, request latency, queue length, SLO/burn-rate.

  • Cooldown / stabilization: окна времени, чтобы избежать флаппинга (шума и частых переключений).

  • Health checks & draining: корректное снятие экземпляров (connection draining) и проверка здоровья новых инстансов.

  • Warmup: учёт времени, которое нужно инстансу, чтобы стать готовым (cache warm, JIT).

Auto-scaling в AWS

  • EC2 Auto Scaling Groups (ASG) — классический механизм для EC2: минимум/макс/desired, интеграция с ELB/ALB.

    • Target tracking: задать целевое значение метрики (напр., CPU 50%) — ASG автоматически поддерживает.

    • Step scaling: масштабирование ступенями в зависимости от степени нарушения порога.

    • Scheduled scaling: по расписанию.

    • Lifecycle hooks: выполнять действия при создании/удалении инстанса (например, настройка).

    • Health checks: ELB/Kubernetes/EC2 checks; unhealthy инстансы заменяются.

  • ECS / EKS:

    • ECS Service Auto Scaling для контейнеров; масштаб по CloudWatch метрикам.

    • Cluster Autoscaler на EKS для добавления узлов при нехватке ресурсов; плюс Horizontal Pod Autoscaler (HPA) для масштабирования подов по CPU/custom metrics.

  • Serverless: Lambda масштабируется автоматически (concurrency), AWS also предлагает Predictive Scaling и Application Auto Scaling для разных ресурсов.

Auto-scaling в GCP

  • Managed Instance Groups (MIG) — эквивалент ASG: поддерживают autoscaling по CPU, load balancing, custom metrics, queue depth.

    • Autoscaler types: target CPU/utilization, requests per second per instance, custom metrics, stackdriver metrics.

    • Autoscaling policies: cooldown, min/max instances, documentation for predictive autoscaling.

  • GKE (Kubernetes на GCP):

    • Horizontal Pod Autoscaler (HPA) — по CPU, memory, custom metrics (Prometheus via Adapter).

    • Cluster Autoscaler — добавляет узлы для размещения подов; Vertical Pod Autoscaler (VPA) — корректирует ресурсы подов.

  • Cloud Run / App Engine — имеют встроенный автоскейлинг по запросам/конкурентности.

Auto-scaling в Azure

  • Virtual Machine Scale Sets (VMSS) — VM-группа с autoscale правилами (metrics-based, schedule). Интеграция с Azure Load Balancer.

  • Azure Monitor Autoscale — правила на основе метрик (CPU, queue length, custom) и расписаний.

  • AKS (Kubernetes) — Cluster Autoscaler и HPA/VPA, интеграция с metrics-server и custom metrics via Prometheus adapter.

  • App Service / Functions — платформенный autoscale (instance count, consumption plan для Functions).

Практические советы и ошибки, которых стоит избегать

  • Не полагаться только на CPU — часто лучше использовать latency, queue length, requests/sec или custom SLO-ориентированные метрики.

  • Правильно настроить min/max и cooldown — слишком агрессивный scaling вызывает флаппинг; слишком консервативный — риск недообслуживания.

  • Warmup и readiness — учитывать время запуска инстанса; использовать readiness probes и pre-warming.

  • Leveling: комбинируйте скейлинг на уровне приложения (pods) и инфраструктуры (nodes/VMs) — например, HPA + Cluster Autoscaler.

  • Draining и graceful shutdown — при удалении инстанса обеспечить завершение запросов и репликацию состояния.

  • Тестировать: нагрузочные тесты, проверьте поведение при пиках и при потере/добавлении инстансов.

  • Cost control: ставьте ограничения и мониторьте autoscaling actions (чтобы не переплатить).

Пример: HPA в Kubernetes (упрощённо)

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: web-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: web
minReplicas: 2
maxReplicas: 20
metrics:
\- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 60

Автоскейлинг — ключевой механизм обеспечения отзывчивости и экономичности. Правильно настроенный — сочетание хороших метрик, разумных политик, тестирования и учёта времени прогрева — даёт стабильную систему без лишних затрат.