Não confie em cada instância rodando um cron local. Use um lock de liderança, como uma linha ou chave adquirida com um lease e um tempo de vida, para que só quem o detém rode o job, ou delegue o agendamento a um cron no nível da plataforma que enfileira um job para um worker pegar. De qualquer forma, torne o job idempotente e observável, porque um lease pode expirar no meio da execução e causar sobreposição.
Por que os entrevistadores perguntam isso
É um problema pequeno de sistemas distribuídos com muitos modos de falha sutis. O entrevistador quer ver que você não suporia que agendadores em processo em instâncias idênticas disparam uma vez só, que sabe que locks precisam de expiração para sobreviver a uma queda, e que idempotência continua sendo a rede de segurança de verdade. Monitorar um job que parou de rodar em silêncio é o detalhe que a maioria dos candidatos deixa de fora.
Como estruturar sua resposta
- Enuncie o problema: instâncias idênticas disparam cada uma o próprio timer.
- Dê as duas abordagens viáveis, baseada em lock e agendada pela plataforma.
- Cubra expiração de lease, sobreposição e recuperação de queda.
- Adicione monitoramento para o job que nunca rodou.
Exemplo de resposta
A versão ingênua roda seis vezes, e a versão em que uma instância especial é designada para de funcionar no dia em que essa instância fica com problema. Então eu ou uso um lock ou tiro o agendamento da aplicação por completo. Com lock, cada instância tenta adquirir um lease no horário agendado, tipicamente um insert ou um update condicional numa tabela de jobs com expiração, e só o vencedor roda, renovando o lease enquanto trabalha. A sutileza é que um lease pode expirar durante uma execução longa, e aí uma segunda instância começa, então o job ainda precisa ser seguro de rodar duas vezes. Minha preferência em qualquer escala é a segunda abordagem: agendamento no nível da plataforma que enfileira uma única mensagem, e workers comuns a consomem. Isso dá retries, visibilidade e histórico de graça, e o código da aplicação vira apenas um handler. De um jeito ou de outro, eu registro horários de início e fim e alerto quando um job não terminou dentro da janela esperada, porque um job que para de rodar em silêncio é a falha que as pessoas notam semanas depois.
Vai encarar essa entrevista em breve? O GhostPilot escuta a sua chamada ao vivo, identifica a pergunta no instante em que ela é feita e coloca uma resposta estruturada na sua tela em tempo real. Teste na sua próxima entrevista simulada ou pegue um Session Pass de $29, sem assinatura, para a hora da verdade.
Veja como funcionaPerguntas de acompanhamento que você pode esperar
- O que acontece se o job demorar mais do que o intervalo entre execuções?
- Como você tornaria idempotente um job de relatório noturno?
- Como você lida com um job que precisa rodar uma vez por tenant em milhares de tenants?
Mais perguntas para Desenvolvedor Backend
Seu entrevistador vai fazer a própria versão desta. Cole a descrição real da vaga no Question Predictor gratuito e receba as 20 perguntas que essa vaga tem mais chance de fazer, com o que cada uma está de fato sondando.
Prever minhas perguntas