Pergunta de entrevista para Engenheiro de Software

Sua API tem muita leitura e o banco está a noventa por cento de CPU. Como você escalaria isso?

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

Resposta rápida

Descubra o que está queimando a CPU antes de comprar qualquer coisa. Se um punhado de queries domina, indexe ou reescreva. Se for volume de leitura genuíno, adicione réplicas e roteie tráfego só de leitura para lá, e aí faça cache dos resultados mais quentes com tempo de vida curto. Remover padrões de N mais um e limitar tamanho de página costuma render mais do que hardware. Escale a instância verticalmente para ganhar tempo, e depois arrume o padrão de query direito.

Por que os entrevistadores perguntam isso

Os entrevistadores querem ver se você faz profiling antes de gastar. Adicionar réplicas numa carga dominada por uma query sem índice desperdiça dinheiro e esconde o problema. Eles também checam se você sabe que replicação é assíncrona, então mover leituras introduz defasagem que você precisa desenhar em volta, e que cache carrega um custo de correção. Respostas fortes ordenam as correções por custo, risco e tempo de implementação.

Como estruturar sua resposta

  • Meça quais queries dominam antes de mudar qualquer coisa.
  • Corrija problemas de query e de índice primeiro, são os mais baratos.
  • Adicione réplicas ou cache para volume genuíno.
  • Aponte a defasagem de replicação e como você lida com ela.

Exemplo de resposta

Exemplo falado, em primeira pessoa

Antes de adicionar qualquer coisa eu quero saber o que a CPU está fazendo, então eu puxo as queries com maior tempo total do pg_stat_statements ou do equivalente. Na minha experiência um número pequeno de queries faz a maior parte do estrago, e muitas vezes uma delas é um N mais um de um ORM que piorou conforme um cliente cresceu. Corrigir isso é de graça comparado a rodar réplicas. Se o perfil realmente disser volume de leitura uniforme, aí réplicas fazem sentido e eu roteio endpoints só de leitura para lá. O detalhe é a defasagem de replicação, então qualquer coisa que lê logo depois de escrever vai para o primário, senão um usuário vê a própria atualização sumir. Depois disso eu faço cache dos poucos endpoints mais quentes com tempo de vida curto. Em paralelo eu escalaria a instância verticalmente, porque é uma mudança de quinze minutos que compra fôlego para fazer o resto direito. Eu tento ser explícito com o time de que escalar para cima é um cronômetro, não uma correçã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ê rotearia leituras e escritas no código da aplicação?
  • Como você lida com um usuário lendo imediatamente depois de escrever?
  • A partir de que ponto você faria sharding em vez disso?

Mais perguntas para Engenheiro de Software

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