Assuma que toda mensagem pode chegar mais de uma vez e torne o processamento idempotente. Derive uma chave estável da mensagem e ou verifique e registre em um armazenamento antes de agir, ou use uma escrita condicional para uma repetição virar operação nula. Defina o visibility timeout acima do seu pior caso de tempo de processamento, estenda para jobs longos, e mande mensagens para uma dead letter queue depois de algumas falhas, para mensagens envenenadas não travarem o progresso.
Por que os entrevistadores perguntam isso
Entrega duplicada é uma daquelas realidades que separam quem já rodou sistemas distribuídos de quem só leu sobre eles. O entrevistador quer idempotência como primeira resposta, expressa de forma concreta em vez de como palavra, mais detalhes operacionais como visibility timeout e dead letter queue. Tratar ordenação e falha parcial corretamente é o que transforma um consumidor que funciona em um consumidor confiável.
Como estruturar sua resposta
- Aceite duplicatas como normais e ponha a idempotência no centro do projeto.
- Dê um mecanismo concreto de idempotência, não só o termo.
- Cubra visibility timeouts e trabalho de longa duração.
- Trate mensagens envenenadas, retries com backoff e ordenação.
Exemplo de resposta
Eu parto do princípio de que toda mensagem vai chegar pelo menos duas vezes em algum momento, normalmente porque um consumidor foi lento e o visibility timeout expirou enquanto o trabalho já tinha sido commitado. Então o consumidor tem que ser idempotente, e eu quero isso concreto em vez de aspiracional. Normalmente é uma chave de idempotência tirada da mensagem, ou um id que o produtor definiu ou um hash do conteúdo relevante, registrada em uma tabela com uma restrição de unicidade dentro da mesma transação do trabalho. Se o insert conflita, a gente já fez isso, confirma e segue. Onde o efeito é uma escrita em um armazenamento, eu prefiro uma atualização condicional, para aplicar duas vezes chegar no mesmo estado. Operacionalmente, o visibility timeout tem que exceder o tempo de processamento realista mais lento, e para jobs genuinamente longos eu estendo a concessão conforme avanço em vez de definir um timeout global enorme. As falhas fazem retry com backoff exponencial e jitter, e depois de um número pequeno de tentativas a mensagem vai para uma dead letter queue com o erro anexado, para uma mensagem ruim nunca travar o resto.
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
- Como você lida com um efeito colateral que não dá para tornar idempotente, como mandar um e-mail?
- Como você reprocessaria uma dead letter queue com segurança?
- O que muda se você também precisar de ordenação estrita?
Mais perguntas para Engenheiro de Nuvem
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