Pular para o conteudo principal

Jobs órfãos, compensação e limpeza operacional

Quando job trava, some ou repete, o time precisa de um caminho claro para compensar e limpar o rastro.

Andrews Ribeiro

Andrews Ribeiro

Founder & Engineer

O problema

Quando o time fala de job assíncrono, geralmente pensa no caminho feliz:

  • enfileira
  • processa
  • conclui

Só que backend real tem muito mais do que isso:

  • worker cai no meio
  • job trava em running
  • efeito externo acontece, mas o estado local não fecha
  • item falhado volta depois

Se ninguém desenhou recuperação, a fila vira um depósito de “depois a gente vê”.

Modelo mental

Vale separar três cenários:

  • job órfão: o sistema perdeu clareza sobre quem ainda está processando ou se aquilo já morreu
  • compensação: alguma parte andou e outra não; agora precisa corrigir o mundo real
  • limpeza operacional: o sistema precisa de rotina para identificar, encerrar, reprocessar ou limpar estados quebrados

Esses três assuntos andam juntos porque todos aparecem depois do caminho feliz.

Job órfão não é bug exótico

Job órfão costuma aparecer quando:

  • worker cai sem marcar falha
  • lock expira sem conclusão
  • heartbeat some
  • estado fica preso em processing

Se o sistema não sabe dizer se aquele trabalho:

  • ainda está vivo
  • morreu
  • pode rodar de novo

você já tem problema operacional.

Compensação não é rollback mágico

Muita gente usa a palavra compensação como se fosse:

  • undo()

Só que, em fluxo distribuído, nem sempre dá para desfazer literalmente.

Às vezes compensar significa:

  • estornar
  • cancelar
  • marcar para correção manual
  • publicar evento corretivo
  • reconciliar depois

Compensação boa não promete voltar no tempo.

Ela reduz o estrago de um efeito parcial.

Exemplo simples

Imagine um job de faturamento que:

  • gera cobrança externa
  • atualiza assinatura local
  • envia confirmação

Se a cobrança externa aconteceu, mas a atualização local não, o sistema ficou em estado parcial.

O que precisa existir?

  • detecção desse estado
  • regra de compensação ou reconciliação
  • rotina clara para retomar ou corrigir

Sem isso, o time depende de descobrir pelo suporte.

Limpeza operacional faz parte do desenho

Fluxo assíncrono maduro costuma ter:

  • estado explícito
  • timeout de processamento
  • heartbeat ou lease
  • política de retry
  • DLQ ou quarentena
  • rotina de varredura
  • ação segura de reprocessamento

Isso parece operacional porque é operacional.

Mas também é arquitetura.

O erro comum

O erro comum é acreditar que:

  • fila já resolveu
  • retry já cobre
  • DLQ já basta

Nada disso responde, sozinho:

  • o que fazer com job preso
  • como corrigir estado parcial
  • como limpar o rastro sem duplicar dano

Ter fila não significa ter recuperação.

Como um senior pensa

Quem já tomou pancada com produção costuma perguntar:

  • como detecto job órfão?
  • quais estados podem ficar parciais?
  • o que é reprocessável e o que precisa compensação?
  • qual parte é automática e qual parte é operacional?

Essa camada de pensamento é o que impede o fluxo assíncrono de envelhecer como bagunça.

Ângulo de entrevista

Esse tema aparece em backend, filas, incidentes e system design.

O entrevistador quer ver se você entende:

  • que job assíncrono não termina na fila
  • que falha parcial pede estratégia de correção
  • que operação precisa de estados claros e rotinas de recuperação

Resposta forte costuma soar assim:

“Eu trataria job órfão como cenário esperado. O fluxo teria estado explícito, timeout de execução, detecção de item preso e estratégia de compensação ou reprocessamento seguro para os casos parciais. O objetivo não é confiar que a fila sempre conclui; é saber recuperar quando ela não conclui.”

Takeaway direto

Sistema assíncrono maduro não é o que só processa bem.

É o que também sabe se recuperar quando o processamento dá errado.

Resumo rápido

O que vale manter na cabeça

Checklist de pratica

Use isto ao responder

Você concluiu este artigo

Próximo artigo Reprocessamento seletivo por chave, janela ou tenant sem varrer o mundo inteiro Artigo anterior Reconciliação interna entre estados derivados sem cron cego

Continue explorando

Artigos relacionados