Pergunta de entrevista para Engenheiro de Confiabilidade de Sites

Como você torna um endpoint de escrita seguro para retry?

O que o entrevistador está avaliando, como estruturar sua resposta e um exemplo falado que você pode adaptar.

Resposta rápida

Dê ao cliente uma chave de idempotência, guarde essa chave junto do resultado da primeira escrita bem sucedida, e devolva esse resultado guardado em qualquer repetição. Imponha unicidade no nível do banco de dados para que duplicatas concorrentes colidam em vez de escreverem duas vezes. Delimite as chaves por cliente, expire depois de uma janela sensata, e use a chave de negócio natural, como um id de pedido, como âncora de deduplicação sempre que existir uma.

Por que os entrevistadores perguntam isso

Toda política de retry é perigosa sem idempotência, então essa pergunta testa se você consegue fechar o ciclo. Entrevistadores procuram a constraint de unicidade no nível do banco, porque checagens no nível da aplicação perdem a corrida sob concorrência. Respostas fortes também tratam o caso em voo: o que a segunda requisição deveria fazer enquanto a primeira ainda está rodando.

Como estruturar sua resposta

  • Apresente a chave de idempotência e de onde ela vem.
  • Guarde chave, impressão digital da requisição e resposta juntas numa transação.
  • Imponha unicidade no banco de dados para que corridas falhem de forma barulhenta.
  • Diga o que acontece numa repetição enquanto a primeira chamada ainda está em voo.
  • Mencione a delimitação e a expiração das chaves.

Exemplo de resposta

Exemplo falado, em primeira pessoa

O cliente gera uma chave de idempotência, normalmente um UUID, e manda como header. Do lado do servidor eu mantenho uma tabela com chave em id do cliente mais essa chave, com uma constraint de unicidade, e eu escrevo a chave e a resposta na mesma transação da escrita de negócio. Uma repetição então bate na constraint de unicidade ou acha a linha guardada e simplesmente reproduz a resposta original, então retries saem de graça. Dois detalhes importam. Primeiro, a unicidade tem que morar no banco, porque se você faz um select e depois um insert, dois retries concorrentes passam os dois pela checagem. Segundo, você precisa decidir o que fazer quando a segunda requisição chega enquanto a primeira ainda está rodando. A gente retornava 409 com um Retry-After em vez de bloquear, o que mantinha o nosso pool de conexões saudável. Eu também guardo um hash do corpo da requisição, para que reusar uma chave com conteúdo diferente seja rejeitado em vez de devolver silenciosamente a resposta errada.

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 funciona

Perguntas de acompanhamento que você pode esperar

  • O que você retorna se a mesma chave chegar com um payload diferente?
  • Por quanto tempo você reteria chaves de idempotência, e por quê?
  • Como isso funciona quando a escrita atravessa dois serviços?

Mais perguntas para Engenheiro de Confiabilidade de Sites

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

Ensaie as perguntas difíceis antes que elas apareçam

Pratique com um copiloto ao vivo e depois entre pronto. Um Session Pass de $29 te leva até o fim da entrevista, sem assinatura e sem amarras.

Instalar o GhostPilot