Pergunta de entrevista para Desenvolvedor Backend

Você precisa atualizar o banco de dados e publicar um evento. Como você impede que os dois saiam de sincronia?

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

Resposta rápida

Use o padrão transactional outbox: grave o evento numa tabela de outbox dentro da mesma transação da mudança de estado, e depois tenha um relay separado que faz polling ou lê o log e publica, marcando como enviado. Assim existe um único commit, então você nunca tem uma linha sem evento nem um evento sem linha. O relay dá entrega pelo menos uma vez, então os consumidores ainda precisam ser idempotentes.

Por que os entrevistadores perguntam isso

O problema da escrita dupla é um dos modos de falha que definem sistemas distribuídos, e muitos candidatos nunca souberam nomeá-lo. O entrevistador quer ver que você reconhece que publicar depois do commit pode perder eventos e publicar antes do commit pode inventar eventos. Conhecer o outbox, e saber que change data capture é a mesma ideia conduzida a partir do write ahead log, sinaliza experiência real com eventos.

Como estruturar sua resposta

  • Nomeie o problema da escrita dupla e as duas direções em que ele falha.
  • Descreva o outbox mecanicamente: uma transação, relay separado.
  • Mencione change data capture como a variante baseada em log.
  • Aponte as consequências: ordenação, entrega pelo menos uma vez, limpeza do outbox.

Exemplo de resposta

Exemplo falado, em primeira pessoa

A armadilha é que um commit de banco e uma publicação no broker são dois sistemas separados, então qualquer ordem que você escolha tem um modo de falha. Publique primeiro e a transação pode dar rollback, então consumidores agem sobre algo que nunca aconteceu. Comite primeiro e o processo pode morrer antes de publicar, então o evento se perde e nada tenta de novo. O padrão outbox elimina essa lacuna: a linha do evento é inserida numa tabela de outbox dentro da mesma transação da mudança de negócio, então ou as duas acontecem ou nenhuma. Depois um relay lê as linhas não enviadas em ordem e publica, marcando como enviadas, e se ele cair no meio da publicação ele só republica, e é por isso que os consumidores precisam ser idempotentes. Se estou no Postgres e quero menos polling, uso change data capture a partir do write ahead log com algo como o Debezium, que é a mesma garantia com menos código sob medida. Os detalhes operacionais que vale planejar são a limpeza do outbox e o monitoramento do atraso do relay, porque um outbox que parou de escoar parece completamente saudável do lado da aplicação.

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

  • Como você monitoraria se o relay está acompanhando o ritmo?
  • Que garantias de ordenação o outbox realmente te dá?
  • Quando você escolheria change data capture em vez de um outbox escrito na aplicação?

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

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