Conceitos de Auto Scaling
O que é Auto Scaling?
O Auto Scaling permite ajustar automaticamente o número de instâncias EC2 conforme a demanda. Isso garante desempenho durante picos de tráfego e reduz custos em períodos de baixa utilização.
┌─────────────────────────────────────────────────────────────┐
│ AUTO SCALING - CONCEITO │
├─────────────────────────────────────────────────────────────┤
│ │
│ SEM AUTO SCALING │
│ ───────────────── │
│ │
│ Capacidade ▲ │
│ │ ┌─────────────────────────────────┐ │
│ │ │ Capacidade fixa (10 instâncias)│ │
│ │ ───┴─────────────────────────────────┴─── │
│ │ /\ │
│ │ / \ Demanda real │
│ │ / \___________ │
│ │ / \ │
│ │ / \___ │
│ └─────────────────────────────► Tempo │
│ │
│ Problemas: ❌ Superdimensionado à noite = desperdício │
│ ❌ Subdimensionado nos picos = lentidão │
│ │
│ ──────────────────────────────────────────────────────── │
│ │
│ COM AUTO SCALING │
│ ───────────────── │
│ │
│ Capacidade ▲ │
│ │ ________ │
│ │ / \ Capacidade se ajusta │
│ │ / \___________ │
│ │ / \ │
│ │ / \___ │
│ └─────────────────────────────────► Tempo │
│ │
│ Vantagens: ✅ Capacidade = Demanda (sempre) │
│ ✅ Custos otimizados │
│ ✅ Performance mantida │
│ │
└─────────────────────────────────────────────────────────────┘
Componentes do Auto Scaling
Arquitetura
┌─────────────────────────────────────────────────────────────┐
│ COMPONENTES DO AUTO SCALING │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ LAUNCH TEMPLATE │ │
│ │ │ │
│ │ "Como criar novas instâncias" │ │
│ │ • AMI : ami-xxxxx │ │
│ │ • Tipo : t3.medium │ │
│ │ • Security Group : sg-web │ │
│ │ • User Data : script de inicialização │ │
│ │ • Key Pair : my-key │ │
│ │ │ │
│ └──────────────────────┬──────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ AUTO SCALING GROUP (ASG) │ │
│ │ │ │
│ │ "Quantas instâncias e onde" │ │
│ │ • Min : 2 │ │
│ │ • Max : 10 │ │
│ │ • Desired : 4 │ │
│ │ • Subnets : subnet-1a, subnet-1b │ │
│ │ • Health Check : EC2 ou ELB │ │
│ │ │ │
│ └──────────────────────┬──────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ SCALING POLICIES │ │
│ │ │ │
│ │ "Quando adicionar/remover instâncias" │ │
│ │ • CPU > 70% → +2 instâncias │ │
│ │ • CPU < 30% → -1 instância │ │
│ │ • Schedule : 8h → 6 instâncias, 20h → 2 instâncias │ │
│ │ │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
Tabela de Componentes
| Componente | Papel | Exemplo |
|---|---|---|
| Launch Template | Define a configuração das instâncias | AMI, tipo, SG, user data |
| ASG | Gerencia o grupo de instâncias | Min/Max/Desired, subnets |
| Scaling Policy | Regras de scaling | CPU > 70% → scale out |
| CloudWatch Alarm | Dispara o scaling | Alerta em métrica |
Tipos de Scaling
1. Manual Scaling
Alteração manual do número de instâncias.
# Alterar o número desejado manualmente
aws autoscaling set-desired-capacity \
--auto-scaling-group-name my-asg \
--desired-capacity 5
Caso de uso: Eventos previsíveis (Black Friday planejada)
2. Scheduled Scaling
Scaling baseado em um calendário pré-definido.
┌─────────────────────────────────────────────────────────────┐
│ SCHEDULED SCALING │
├─────────────────────────────────────────────────────────────┤
│ │
│ Exemplo: Site de e-commerce com tráfego previsível │
│ │
│ Instâncias ▲ │
│ │ │
│ 10─┤ ┌───────────────┐ │
│ │ │ │ │
│ 6─┤ ┌────┘ └────┐ │
│ │ │ │ │
│ 2─┤─────┘ └───── │
│ │ │
│ └─────┬─────┬─────┬─────┬─────┬─────► Hora │
│ 6h 9h 12h 18h 22h │
│ │
│ Regras: │
│ • 6h → min:2, max:6 (antes da abertura) │
│ • 9h → min:6, max:10 (horário de pico) │
│ • 22h → min:2, max:4 (noite) │
│ │
└─────────────────────────────────────────────────────────────┘
# Criar uma ação agendada
aws autoscaling put-scheduled-update-group-action \
--auto-scaling-group-name my-asg \
--scheduled-action-name scale-up-morning \
--recurrence "0 9 * * MON-FRI" \
--min-size 6 \
--max-size 10 \
--desired-capacity 6
3. Dynamic Scaling (Target Tracking)
O mais recomendado. A AWS mantém automaticamente uma métrica alvo.
┌─────────────────────────────────────────────────────────────┐
│ TARGET TRACKING SCALING │
├─────────────────────────────────────────────────────────────┤
│ │
│ Objetivo: Manter CPU em 50% │
│ │
│ CPU ▲ │
│ │ │
│ 80─┤ x x │
│ │ x x ← Muito alto → Scale OUT │
│ 50─┤──────────────────────────────────────── Target │
│ │ x │
│ 20─┤ x x ← Muito baixo → Scale IN │
│ │ │
│ └─────────────────────────────────────────► Tempo │
│ │
│ A AWS ajusta automaticamente o número de instâncias │
│ para manter o CPU em torno de 50% │
│ │
│ Métricas disponíveis: │
│ • ASGAverageCPUUtilization │
│ • ASGAverageNetworkIn │
│ • ASGAverageNetworkOut │
│ • ALBRequestCountPerTarget │
│ │
└─────────────────────────────────────────────────────────────┘
# Criar uma política Target Tracking
aws autoscaling put-scaling-policy \
--auto-scaling-group-name my-asg \
--policy-name cpu-target-policy \
--policy-type TargetTrackingScaling \
--target-tracking-configuration '{
"TargetValue": 50.0,
"PredefinedMetricSpecification": {
"PredefinedMetricType": "ASGAverageCPUUtilization"
}
}'
4. Step Scaling
Scaling por etapas conforme a intensidade da carga.
┌─────────────────────────────────────────────────────────────┐
│ STEP SCALING │
├─────────────────────────────────────────────────────────────┤
│ │
│ Regras de scaling por etapas: │
│ │
│ CPU% Ação │
│ ───── ────── │
│ 0-40% Remover 2 instâncias │
│ 40-60% Nenhuma ação │
│ 60-80% Adicionar 1 instância │
│ 80-100% Adicionar 3 instâncias │
│ │
│ ┌───────────────────────────────────────────────────┐ │
│ │ │ │
│ │ 100% ┬─────────────────────────────┐ │ │
│ │ │ +3 instâncias │ │ │
│ │ 80% ┼─────────────────────────────┼ │ │
│ │ │ +1 instância │ │ │
│ │ 60% ┼─────────────────────────────┼ │ │
│ │ │ (nenhuma) │ │ │
│ │ 40% ┼─────────────────────────────┼ │ │
│ │ │ -2 instâncias │ │ │
│ │ 0% └─────────────────────────────┘ │ │
│ │ │ │
│ └───────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
Comparação dos Tipos
| Tipo | Quando usar | Reatividade |
|---|---|---|
| Manual | Eventos conhecidos antecipadamente | Imediata |
| Scheduled | Padrões previsíveis (horários) | Agendada |
| Target Tracking | Carga variável, recomendado por padrão | ~3 min |
| Step | Resposta proporcional à carga | ~3 min |
Comportamento de Scaling
Scale Out vs Scale In
┌─────────────────────────────────────────────────────────────┐
│ SCALE OUT vs SCALE IN │
├─────────────────────────────────────────────────────────────┤
│ │
│ SCALE OUT (adicionar) │
│ ─────────────────── │
│ ┌───┐ ┌───┐ ┌───┐ ┌───┐ ┌───┐ ┌───┐ │
│ │ 1 │ │ 2 │ → │ 1 │ │ 2 │ │ 3 │ │ 4 │ │
│ └───┘ └───┘ └───┘ └───┘ └───┘ └───┘ │
│ 2 instâncias 4 instâncias │
│ │
│ Comportamento: │
│ • Rápido (instâncias lançadas assim que o limite é atingido) │
│ • Sem cooldown por padrão para Target Tracking │
│ │
│ ──────────────────────────────────────────────────────── │
│ │
│ SCALE IN (remover) │
│ ────────────────── │
│ ┌───┐ ┌───┐ ┌───┐ ┌───┐ ┌───┐ ┌───┐ │
│ │ 1 │ │ 2 │ │ 3 │ │ 4 │ → │ 1 │ │ 2 │ │
│ └───┘ └───┘ └───┘ └───┘ └───┘ └───┘ │
│ 4 instâncias 2 instâncias │
│ │
│ Comportamento: │
│ • Mais lento (evita oscilações) │
│ • Cooldown de 300s por padrão │
│ • Termination policy determina qual instância │
│ │
└─────────────────────────────────────────────────────────────┘
Termination Policy
Qual instância terminar primeiro durante o scale in?
| Policy | Comportamento |
|---|---|
| Default | Zona de disponibilidade mais antiga com mais instâncias, depois a configuração mais antiga |
| OldestInstance | Instância mais antiga |
| NewestInstance | Instância mais recente |
| OldestLaunchConfig | Configuração de lançamento mais antiga |
| ClosestToNextInstanceHour | Próxima da próxima hora de faturamento |
Cooldown e Warmup
┌─────────────────────────────────────────────────────────────┐
│ COOLDOWN E WARMUP │
├─────────────────────────────────────────────────────────────┤
│ │
│ COOLDOWN (após scaling) │
│ ──────────────────────── │
│ Período em que nenhum scaling adicional ocorre │
│ → Evita oscilações │
│ │
│ Tempo ─────► │
│ │ │
│ │ Scale Cooldown Scale Cooldown │
│ │ OUT 300s IN 300s │
│ │ │ ├─────┤ │ ├─────┤ │
│ │ ▼ │ │ ▼ │ │ │
│ │ ┌───┐ │ │ ┌───┐ │ │ │
│ │ │+2 │ │ não │ │-1 │ │ não │ │
│ │ │ │ │ faz │ │ │ │ faz │ │
│ │ │ │ │scale│ │ │ │scale│ │
│ │ └───┘ │ │ └───┘ │ │ │
│ └──────────┴─────┴────────┴───────┴─────┴──────────► │
│ │
│ WARMUP (antes das métricas) │
│ ──────────────────────── │
│ Tempo para que uma nova instância esteja "aquecida" │
│ → Suas métricas não contam antes do warmup │
│ │
│ Padrão Target Tracking: 300 segundos │
│ │
└─────────────────────────────────────────────────────────────┘
Resumo
| Conceito | Descrição | Valor Típico |
|---|---|---|
| Launch Template | Configuração das novas instâncias | AMI + tipo + SG |
| ASG | Grupo de instâncias gerenciado | min:2, max:10 |
| Target Tracking | Scaling automático por métrica | CPU 50% |
| Cooldown | Pausa após scaling | 300s |
| Warmup | Delay antes de contar métricas | 300s |
Próxima seção: Políticas de Scaling