Infraestrutura

Senior

Qual o tamanho de cluster e a política de autoscaling certos para essa carga de trabalho?

O tamanho certo de cluster não é um número que você escolhe uma vez — é uma política que você define a partir de como a carga de trabalho realmente se comporta, e revisa conforme esse comportamento muda.

Ler em:
Base em estado estável Variação normal Pico ocasional
A curva de utilização de uma carga de trabalho — o formato que deveria definir seu piso e teto.

"Qual deve ser o tamanho do meu cluster" é a pergunta errada. A certa é "qual é a curva de utilização que essa carga de trabalho realmente produz, e qual política combina com essa curva" — um job batch com um pico horário acentuado precisa de uma resposta completamente diferente de um job de streaming em estado estável.

Defina o piso pela carga em estado estável, não pelo pico

Seu mínimo de autoscaling deve cobrir a carga base com margem para variação normal — não o pico que você vê ocasionalmente. Definir o piso pelo pico significa pagar por capacidade que você usa só uma fração do tempo; esse é exatamente o problema de custo do "tamanho de cluster fixo" que o autoscaling existe para resolver, só que recriado com passos extras.

Defina o teto a partir de uma conversa real sobre custo, não de "o quanto for preciso"

Um máximo de autoscaling sem limite protege a disponibilidade mas remove qualquer teto de custo — uma query descontrolada, uma tempestade de retries ou um pico de tráfego inesperado podem escalar um cluster (e sua conta) muito além do pretendido. Defina o máximo a partir de um número explícito de "qual é o pior caso que estamos dispostos a pagar", não só da capacidade técnica.

Ajuste a sensibilidade de escalonamento ao formato do seu job

Uma carga batch com um pico nítido e previsível (um job de ETL horário, digamos) se beneficia de um scale-up agressivo — é melhor superprovisionar brevemente do que deixar o job fazer fila atrás de um scale-up lento. Um job de streaming em estado estável se beneficia do oposto: um scale-up mais lento e conservador evita o "thrashing" (escalar para cima e imediatamente para baixo) diante da variação normal minuto a minuto, que por si só tem um custo de overhead de provisionamento/desprovisionamento.

O número que realmente deveria guiar essa decisão: a utilização média de CPU/memória entre executors durante execuções reais, não durante um teste de carga sintético. A regra de número de instâncias do opti-pipe compara o número de executors configurado com a utilização realmente observada no seu event log, e dispara novamente com um número ajustado se um upload posterior mostrar que a utilização mudou desde a última vez que você aprovou uma mudança — ela não assume que o formato da sua carga de trabalho é mais estático do que deveria.

Veja como isso fica no seu próprio pipeline.

Envie um event log real do Spark, um run_results.json do dbt, ou uma exportação de métricas do Flink, e receba recomendações concretas para aprovar — não mais uma regra de bolso.