Pular para o conteudo principal

Prioridade entre tráfego online e trabalho de fundo sem starvation

Quando request do produto e trabalho de fundo disputam os mesmos recursos sem regra, o backend ou machuca o usuário ao vivo ou mata o processamento de manutenção.

Andrews Ribeiro

Andrews Ribeiro

Founder & Engineer

O problema

Muito backend mistura tudo:

  • request do usuário
  • job pesado
  • replay
  • exportação
  • reconciliação

e chama isso de simplicidade.

Mas, na prática, é só falta de política.

Quando todo workload usa o mesmo conjunto de recursos, a disputa começa sem regra clara.

Modelo mental

Vale separar pelo menos três classes:

  • tráfego online: tem janela útil curta
  • trabalho de fundo: pode esperar um pouco
  • trabalho reparável: pode esperar mais e precisa de controle

Isso não quer dizer que um grupo “vale mais” moralmente.

Quer dizer que o custo do atraso é diferente.

Request de checkout atrasado 8 segundos é uma coisa.

Reindexação atrasada 8 minutos é outra.

Exemplo simples

Imagine o mesmo cluster consumindo:

  • criação de pedido
  • emissão de relatório
  • replay de cobrança

Se o replay crescer e nada separar prioridade, você pode derrubar:

  • latência do request
  • throughput do checkout
  • fila do restante

Agora imagine o contrário:

você protege tanto o online que o fundo nunca avança.

Também é ruim.

Só que o problema aí tem outro nome:

starvation.

O erro comum

O erro comum é cair em um dos extremos:

  • tudo igual
  • ou fundo eternamente reprimido

No primeiro caso, o usuário sente junto qualquer operação pesada.

No segundo, backlog operacional cresce sem limite e um dia volta como incidente maior.

Outro erro comum é chamar de prioridade algo que na prática é só sorte de scheduling.

Se o time não consegue explicar quem passa na frente quando há pressão, então a prioridade não está desenhada.

O que normalmente ajuda

Normalmente ajuda combinar:

  • isolamento parcial de recursos
  • cotas por workload
  • concorrência máxima por classe
  • janelas específicas para repair ou recomputação

Na prática, isso pode significar:

  • fila separada
  • pool separado
  • limite de workers
  • prioridade com piso mínimo para o fundo continuar andando

Esse piso importa.

Sem ele, prioridade vira fome operacional.

Como um senior pensa

Quem já viveu essa disputa costuma perguntar:

  • qual workload tem janela útil menor?
  • qual workload pode degradar sem virar incidente?
  • como proteger o online sem matar o fundo?
  • o sistema sabe reduzir ritmo do fundo quando o online aperta?

Esse é o tipo de conversa que evita colapso compartilhado e backlog eterno ao mesmo tempo.

Ângulo de entrevista

Esse tema aparece em backend, filas, reprocessamento e operações.

O entrevistador quer ver se você entende:

  • que tipos de workload têm custo de atraso diferente
  • que prioridade precisa de política, não de esperança
  • que starvation também é falha de arquitetura

Resposta forte costuma soar assim:

“Eu separaria ao menos classes de workload e daria proteção ao tráfego online, mas com piso operacional para jobs e repair continuarem avançando. Senão ou o usuário sofre junto, ou o backlog do fundo explode silenciosamente.”

Takeaway direto

Prioridade boa protege o que vence primeiro sem condenar o resto a morrer devagar.

Resumo rápido

O que vale manter na cabeça

Checklist de pratica

Use isto ao responder

Você concluiu este artigo

Próximo artigo Outbox e inbox sem transformar todo fluxo em event sourcing Artigo anterior Timeout, retry e deadline sem deixar cada camada decidir sozinha

Continue explorando

Artigos relacionados