Представьте: ваш интернет-магазин в пятницу вечером под нагрузкой — 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? Получите консультацию — оценим ваш проект и предложим оптимальное решение.







