Представьте: ваш интернет-магазин в пятницу вечером под нагрузкой — CPU на 90%, latency растёт, а вы не успеваете добавить серверы вручную. Или наоборот: в будний день серверы простаивают, а вы платите за 80% неиспользуемой мощности. Автомасштабирование решает обе проблемы. Мы настроили autoscaling для 20+ проектов — от стартапов до enterprise. Ниже — реальный код, конфиги и типовые ошибки.
Проблемы, которые решаем
Переплата за ресурсы в спокойное время
Средняя загрузка CPU веб-серверов — 15-20%. Держать capacity под пик — платить за 80% неиспользуемой мощности. Autoscaling удерживает минимум инстансов и добавляет новые при росте. Например, e-commerce сайт с пиковой нагрузкой 20k RPS держит 10 серверов, хотя средняя нагрузка 2k RPS. Autoscaling позволяет держать 2 сервера и добавлять по мере роста. Экономия на инфраструктуре составляет 30-40% от бюджета. Для одного из клиентов (e-commerce с пиковой нагрузкой 20k RPS) внедрение сократило ежемесячные расходы на $4500.
Падение при резких всплесках
DDoS или вирусный пост — нагрузка вырастает в 10 раз за минуты. Без масштабирования сайт падает. Наше решение реагирует за секунды, используя Target Tracking и scale-out cooldown 60s.
Сложность ручного управления
Даже опытный админ не успевает вручную добавлять серверы. Автоматизация исключает человеческий фактор.
Как мы это делаем: стек и кейс
AWS Auto Scaling Group с Target Tracking
Используем Terraform для описания инфраструктуры как кода. Пример конфигурации:
resource "aws_autoscaling_group" "app" {
name = "app-asg"
min_size = 2
max_size = 20
desired_capacity = 3
vpc_zone_identifier = var.private_subnet_ids
launch_template {
id = aws_launch_template.app.id
version = "$Latest"
}
health_check_type = "ELB"
health_check_grace_period = 60
target_group_arns = [aws_lb_target_group.app.arn]
}
# Target Tracking: держать CPU на 60%
resource "aws_autoscaling_policy" "cpu_tracking" {
name = "cpu-tracking"
autoscaling_group_name = aws_autoscaling_group.app.name
policy_type = "TargetTrackingScaling"
target_tracking_configuration {
predefined_metric_specification {
predefined_metric_type = "ASGAverageCPUUtilization"
}
target_value = 60.0
scale_in_cooldown = 300
scale_out_cooldown = 60
}
}
Scale-out cooldown (60s) меньше scale-in (300s) — быстро реагируем на рост, медленно убираем ресурсы.
Kubernetes HPA с кастомными метриками
Horizontal Pod Autoscaler в сочетании с Prometheus Adapter позволяет масштабировать по кастомным метрикам:
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: app-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: app
minReplicas: 2
maxReplicas: 50
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 60
- type: Pods
pods:
metric:
name: http_requests_per_second
target:
type: AverageValue
averageValue: "100"
Метрика http_requests_per_second поступает из Prometheus через kube-state-metrics и Prometheus Adapter.
KEDA: масштабирование по внешним источникам
KEDA (Kubernetes Event-Driven Autoscaling) масштабирует поды по длине очереди RabbitMQ, Kafka, SQS:
apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
name: queue-processor
spec:
scaleTargetRef:
name: worker-deployment
minReplicaCount: 1
maxReplicaCount: 30
triggers:
- type: rabbitmq
metadata:
host: amqp://rabbitmq:5672/
queueName: tasks
queueLength: "50"
Масштабирование до нуля при пустой очереди — экономит ресурсы.
Predictive Scaling
AWS Predictive Scaling предугадывает нагрузку на основе исторических данных (минимум 14 дней) и заблаговременно добавляет ресурсы:
resource "aws_autoscaling_policy" "predictive" {
name = "predictive"
autoscaling_group_name = aws_autoscaling_group.app.name
policy_type = "PredictiveScaling"
predictive_scaling_configuration {
mode = "ForecastAndScale"
scheduling_buffer_time = 300
max_capacity_breach_behavior = "IncreaseMaxCapacity"
metric_specification {
target_value = 60
predefined_scaling_metric_specification {
predefined_metric_type = "ASGAverageCPUUtilization"
}
predefined_load_metric_specification {
predefined_metric_type = "ASGTotalNetworkIn"
}
}
}
}
Сравнение методов масштабирования
| Метод | Метрики | Скорость реакции | Сложность |
|---|---|---|---|
| AWS ASG + Target Tracking | CPU, Network, Request Count | 1-2 минуты | Низкая |
| Kubernetes HPA | CPU, Memory, Custom | 30-60 секунд | Средняя |
| KEDA | Queue Length, External | 10-30 секунд | Средняя |
| Predictive Scaling | Исторические тренды | Заблаговременно | Высокая |
Как выбрать правильную метрику?
Метрика — ключ к эффективному масштабированию. CPU запаздывает, Request Rate требует baseline, P95 — самый точный, но сложный. На практике используем комбинацию CPU + Request Rate. Для async-обработчиков — Queue Depth. Согласно Amazon EC2 Auto Scaling поддерживает несколько метрик в одной политике. Стоимость содержания инфраструктуры снижается на 35% при правильно подобранных метриках.
Что делать, если масштабирование не срабатывает вовремя?
Проверьте cooldown (scale-out быстрее scale-in), health check grace period. Иногда метрика не успевает обновиться. Рекомендуем нагрузочный тест с k6: k6 run --vus 1000 --duration 10m script.js.
Процесс работы
- Аналитика: изучаем профиль нагрузки, исторические данные, выбираем метрики.
- Проектирование: определяем тип масштабирования, инструменты (AWS ASG, K8s HPA, KEDA).
- Реализация: пишем IaC (Terraform/Pulumi), настраиваем мониторинг (CloudWatch, Prometheus).
- Тестирование: нагрузочное тестирование, проверка времени отклика и downtime.
- Деплой: внедрение в продакшен, алерты (SNS, PagerDuty).
- Поддержка: мониторинг эффективности, корректировка порогов.
Что входит в работу
- Архитектурная документация
- Код инфраструктуры (Terraform/Helm)
- Мониторинг и алерты
- Нагрузочный тест-кейс
- Обучение команды (1 сессия)
Сроки реализации
| Компонент | Срок |
|---|---|
| ASG + Target Tracking (AWS) | 2-3 дня |
| HPA + Prometheus Adapter (K8s) | 3-5 дней |
| KEDA для queue-based workloads | 2-3 дня |
| Predictive Scaling | 1-2 дня (после 14 дней данных) |
| Нагрузочное тестирование + тюнинг | 2-3 дня |
Стоимость рассчитывается индивидуально после аудита нагрузки. Для расчёта точной стоимости и сроков свяжитесь с нами.
Типичные ошибки (нажмите, чтобы развернуть)
- Неправильные cooldown (flapping)
- Масштабирование только по CPU (игнорируем memory/network)
- Отсутствие health check при scale-in (обрыв активных сессий)
- Слишком широкий диапазон min/max (риск бесконечного масштабирования)
Наш опыт
Более 5 лет занимаемся инфраструктурой высокой нагрузки. Реализовали autoscaling для 20+ проектов — от стартапов до enterprise (e-commerce, fintech). Используем проверенные решения с гарантией SLA. Хотите настроить autoscaling? Получите консультацию — оценим ваш проект и предложим оптимальное решение.







