Home Comunidade Eventos YouTube Networks Desafios // produtos Academy News CTI | CVE Contato

02 - Políticas de Escala (CPU, Memória, Métricas customizadas)

#auto scaling#cloudwatch#métricas#target tracking
video explicativo
Video explicativoEspaco reservado para o video desta anotação — adicione video: https://youtu.be/... no frontmatter da nota.

Políticas de Escala (CPU, Memória, Métricas customizadas)

Políticas de escala são as regras que traduzem métricas de carga em decisões de capacidade: quando adicionar unidades, quantas adicionar e quando devolver capacidade ao pool. A AWS oferece três famílias principais, target tracking, step scaling e scheduled scaling, e todas dependem da qualidade da métrica escolhida, que é a parte mais difícil e mais negligenciada do desenho. Uma política tecnicamente perfeita sobre uma métrica errada produz superprovisionamento constante ou falha no pico, e nenhum alarme corrige uma escolha conceitual ruim. Este registro cobre os tipos de política, as métricas mais usadas, incluindo CPU, memória, requisições por alvo e profundidade de fila, e o caminho para métricas customizadas no CloudWatch. O objetivo final é dar critérios objetivos para escolher a métrica certa para cada perfil de serviço, com atenção a cool-down, flapping e estabilização.

Target tracking: escala por alvo

A política de target tracking é o modelo declarativo do auto scaling: você define que uma métrica deve permanecer próxima de um valor alvo, e o controlador calcula continuamente quantas unidades são necessárias para cumprir o alvo, adicionando ou removendo conforme necessário. A matemática interna é uma proporção simples, replicada por ética de segurança: unidades desejadas igual a unidades atuais multiplicadas pela razão entre métrica atual e alvo, com limites mínimos e máximos respeitados. Se a CPU média está em 90% com 4 instâncias e o alvo é 60%, o cálculo indica 6 instâncias.

As vantagens operacionais explicam por que é a política padrão recomendada. Ela reage a aumentos e diminuições com o mesmo mecanismo, sem passo a passo para manter; incorpora estabilização embutida, evitando remoções abruptas após picos breves; e dispensa o desenho de pares de alarmes com dimensões de cada estágio. A recomendação prática da AWS é começar com target tracking e recorrer a step scaling apenas quando a reação precisa ser mais agressiva que o alvo permite.

O exemplo abaixo combina uma métrica predefinida de CPU com a métrica de requisições por alvo do ALB, mostrando que um mesmo grupo pode ter mais de uma política, e o controlador responde ao ajuste mais amplo necessário entre elas.

# Política 1: mantém a CPU média em 55% no grupo de instâncias
aws autoscaling put-scaling-policy \
  --auto-scaling-group-name api-asg \
  --policy-name api-cpu-55 \
  --policy-type TargetTrackingScaling \
  --target-tracking-configuration '{
    "TargetValue": 55.0,
    "PredefinedMetricSpecification": {
      "PredefinedMetricType": "ASGAverageCPUUtilization"
    }
  }'

# Política 2: mantém 500 requisições por minuto por alvo, métrica do ALB
aws autoscaling put-scaling-policy \
  --auto-scaling-group-name api-asg \
  --policy-name api-requisicoes-por-alvo \
  --policy-type TargetTrackingScaling \
  --target-tracking-configuration '{
    "TargetValue": 500.0,
    "PredefinedMetricSpecification": {
      "PredefinedMetricType": "ALBRequestCountPerTarget",
      "ResourceLabel": "app/meu-alb/1234567890/targetgroup/api/abc"
    }
  }'

A nota prática sobre múltiplas políticas: quando várias apontam para direções diferentes, o sistema aplica a que exige maior capacidade, o que é seguro por padrão, mas pode encarecer se uma política estiver mal calibrada; revise o comportamento combinado com teste de carga antes de produção.

Step scaling: graduações por alarme

A política de step scaling aciona ajustes quando um alarme do CloudWatch cruza limites definidos, e cada faixa de violação aplica um ajuste proporcional. Um alarme de CPU acima de 75% por três períodos pode instruir: até 80%, adicione 1; de 80% a 90%, adicione 2; acima de 90%, adicione 4. O modelo dá controle fino e permite reações escalonadas, mas exige desenhar alarmes em ambos os sentidos, com dimensões coerentes para não oscilar.

Aspecto Target tracking Step scaling
Modelo Declarativo, mantém a métrica no alvo Reativo, alarmes com faixas de ação
Complexidade de configuração Baixa; um alvo e limites Alta; alarmes, steps e política de entrada e saída
Reação a redução de carga Automática e suave Requer alarme separado de scale down
Previsibilidade de custo Proporcional ao alvo Dependente da calibragem dos passos
Caso de uso recomendado Padrão para a maioria dos serviços Correções agressivas com resposta medida
Risco principal Alvo mal escolhido Oscilação por passos mal dimensionados

A escolha entre os dois tipos é, na prática, uma escolha de simplicidade: target tracking cobre a esmagadora maioria dos casos, e step scaling entra quando há evidência de que a reação precisa de graduações específicas.

Scheduled scaling: cargas previsíveis

Quando a demanda segue padrão temporal conhecido, agendamento é mais eficiente que reação a métrica. Scheduled scaling ajusta capacidade mínima, desejada ou máxima em horários definidos: ampliar antes da campanha das 10h, reduzir após as 21h, dimensionar o fim de semana diferente do dia útil. O ganho duplo é antecipação e disciplina: a capacidade já está pronta quando o pico começa, sem esperar boot, e a redução programada evita a tendência de esquecer o sistema inflado.

A combinação com políticas reativas é a configuração madura típica: scheduled scaling define a moldura de capacidade para a janela previsível, e target tracking reage ao imprevisível dentro dessa moldura. Em ambientes que exigem conformidade com janelas de manutenção e eventos de marketing, o agendamento costuma ser disparado pelo mesmo pipeline que coordena o deploy, mantendo a escala como parte da mudança revisada.

Métricas: CPU, memória, requisições e filas

A escolha da métrica é a decisão mais importante do desenho, e a CPU é tanto a mais usada quanto a mais mal usada. A tabela resume as candidatas e seus perfis.

Métrica Melhor perfil Armadilha típica
CPU média Carga proporcional a processamento CPU alta não significa lentidão em workloads de I/O
Memória utilizada Aplicações com heap sensível, JVM Serve de gatilho, não de alvo, na maioria dos casos
Requisições por alvo (ALB) Tráfego HTTP com tempo de resposta estável Falha quando a mistura de requisições varia muito
Profundidade da fila SQS Workers de processamento assíncrono Necessita ajuste por tamanho e tempo de mensagem
Latência p95 Serviços com SLO rígido Ruidosa como alvo direto; melhor como alarme
Métrica customizada qualquer caso com sinal de negócio Envio e agregação mal projetados

A CPU funciona como alvo quando o consumo de processamento é a variável dominante do tempo de resposta, típico de transformação de dados e endpoints computacionais. Para serviços orientados a I/O, onde o tempo é gasto esperando banco e rede, a CPU fica estável enquanto a latência explode, e o alvo correto passa a ser requisições por alvo, que distribui tráfego de forma proporcional à capacidade declarada. Para consumidores de fila, a profundidade da fila, ou a idade da mensagem mais antiga, reflete a dívida de processamento melhor que qualquer métrica da unidade escalável.

Como escolher a métrica certa

A escolha tem um método simples e eficaz, executável em uma tarde de análise e um teste de carga.

  • Identifique o gargalo dominante observando o serviço sob carga real ou simulada: CPU, memória, espera de I/O, concorrência ou fila pendente.
  • Verifique se a métrica candidata correlaciona com o indicador que o usuário sente, geralmente latência ou erro; se a métrica sobe e o usuário não nota, ela não serve.
  • Teste a correlação no teste de carga: dobre a carga e confirme se a métrica reage proporcionalmente e no intervalo de um minuto.
  • Verifique a disponibilidade da métrica na frequência necessária; métrica de cinco minutos não serve para tráfego que dobra em dois.
  • Considere o custo de coleta; métricas customizadas de alta cardinalidade cobram por série distinta e podem sair mais caras que a própria capacidade.
  • Documente a decisão e o teste que a sustentou; a métrica de escala é uma decisão de arquitetura, e seu histórico evita trocas cíclicas sem evidência.

O resultado esperado é uma política que não precisa de ajuste frequente. Uma política saudável escala de forma perceptível em horários previsíveis, permanece estável fora deles e nunca satura o teto sem alarme. Se o time ajusta o alvo toda semana, o problema não é o número, é a métrica escolhida.

Métricas customizadas no CloudWatch

Quando nenhuma métrica predefinida representa o gargalo real, o caminho é publicar a própria. As formas principais são o PutMetricData da API, o agente CloudWatch com StatsD e collectd, e a publicação via EMF, Embedded Metric Format, que extrai métricas de logs estruturados sem chamada extra. A política de auto scaling consome a métrica por namespace e dimensão, com math expression quando é preciso combinar sinais, por exemplo, profundidade por worker.

# Publica métrica customizada de jobs pendentes por worker via CLI
aws cloudwatch put-metric-data \
  --namespace "Acme/Pedidos" \
  --metric-name "JobsPendentesPorWorker" \
  --value 14.5 \
  --unit Count \
  --dimensions Environment=producao,Servico=processador \
  --region sa-east-1

# Política de target tracking usando a métrica customizada
aws autoscaling put-scaling-policy \
  --auto-scaling-group-name processador-asg \
  --policy-name processador-jobs-alvo \
  --policy-type TargetTrackingScaling \
  --target-tracking-configuration '{
    "TargetValue": 10.0,
    "CustomizedMetricSpecification": {
      "MetricName": "JobsPendentesPorWorker",
      "Namespace": "Acme/Pedidos",
      "Dimensions": [
        { "Name": "Environment", "Value": "producao" },
        { "Name": "Servico", "Value": "processador" }
      ],
      "Statistic": "Average",
      "Unit": "Count"
    }
  }'

Métricas customizadas exigem disciplina de engenharia: namespace e dimensões padronizadas, cadência estável de publicação, granularidade de um minuto quando possível, porque agregações mais largas atrasam a reação, e cuidado com custo, pois cada métrica distinta por combinação de dimensões é cobrada. Um padrão saudável é publicar a métrica como parte do serviço, versionada junto do código, e não como script solto no ambiente.

Cool-down, flapping e estabilização

Três fenômenos definem a qualidade operacional de uma política. O cool-down, período de espera após uma ação de escala antes de permitir outra, evita reações em cadeia enquanto métricas ainda refletem o boot anterior. O flapping é a oscilação de sobe e desce que ocorre quando a política reage rápido demais a sinais ruidosos, criando churn de instâncias e custo de boot sem ganho. A estabilização é a janela em que o controlador desconta sinais breves antes de agir, mantendo a média ponderada do período recente.

Na AWS, o target tracking incorpora estabilização padrão para scale down, e o parâmetro de warm-up do grupo de auto scaling desconta do cálculo as instâncias ainda em inicialização, evitando a falsa leitura de sobrecarga enquanto o boot não terminou. Em Kubernetes, o HPA expressa o mesmo cuidado em behavior.scaleUp e behavior.scaleDown, com stabilizationWindowSeconds e taxas de crescimento. Os valores não são decoração: reduzir antes do warm-up acabar provoca o ciclo clássico de desligar instâncias que ainda estavam subindo.

Erros comuns e boas práticas

Políticas de escala acumulam erros recorrentes que se manifestam como custos altos ou falhas no pico. Reconhecê-los orienta a revisão.

  • Escolher CPU como alvo em serviço de I/O, mantendo a capacidade estável enquanto a latência cresce; valide a métrica contra o perfil de resposta.
  • Definir alvo agressivo demais, como 90% de CPU, deixando margem zero para picos rápidos e boot; valores entre 40% e 70% são típicos.
  • Ignorar o warm-up, causando decisões baseadas em instâncias ainda aquecendo; configure o período igual ao tempo real de boot do serviço.
  • Métrica customizada com granularidade de cinco minutos, tornando a reação lenta demais para o padrão de tráfego.
  • Falta de mínimo adequado, permitindo que a política reduza a capacidade a um nível que viola redundância mínima.
  • Alarmes de máxima capacidade ausentes, escondendo o momento em que a política deixou de reagir por teto.

Boas práticas consolidam a operação. Comece com target tracking e uma métrica validada por teste de carga; adicione scheduled scaling para a parte previsível da demanda; monitore a métrica escolhida com alarme de estagnação, que dispara quando a escala bate no teto; e registre a justificativa da métrica em documentação de arquitetura, porque quem vier depois precisa saber por que aquela decisão foi tomada. A política de escala é parte da arquitetura de produção, e merece o mesmo rigor de revisão que o código de negócio.