Pular para o conteúdo principal

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​

ComponentePapelExemplo
Launch TemplateDefine a configuração das instânciasAMI, tipo, SG, user data
ASGGerencia o grupo de instânciasMin/Max/Desired, subnets
Scaling PolicyRegras de scalingCPU > 70% → scale out
CloudWatch AlarmDispara o scalingAlerta 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​

TipoQuando usarReatividade
ManualEventos conhecidos antecipadamenteImediata
ScheduledPadrões previsíveis (horários)Agendada
Target TrackingCarga variável, recomendado por padrão~3 min
StepResposta 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?

PolicyComportamento
DefaultZona de disponibilidade mais antiga com mais instâncias, depois a configuração mais antiga
OldestInstanceInstância mais antiga
NewestInstanceInstância mais recente
OldestLaunchConfigConfiguração de lançamento mais antiga
ClosestToNextInstanceHourPró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​

ConceitoDescriçãoValor Típico
Launch TemplateConfiguração das novas instânciasAMI + tipo + SG
ASGGrupo de instâncias gerenciadomin:2, max:10
Target TrackingScaling automático por métricaCPU 50%
CooldownPausa após scaling300s
WarmupDelay antes de contar métricas300s

Próxima seção: Políticas de Scaling