Pergunta de entrevista para Engenheiro de Software

Como você projetaria um rate limiter para uma API pública?

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

Resposta rápida

Escolha primeiro a dimensão do limite, geralmente a chave de API e não o IP, e aí escolha um algoritmo: token bucket para permitir rajadas, janela deslizante para imposição mais suave. Mantenha os contadores num store compartilhado como o Redis para toda instância concordar, usando incrementos atômicos com expiração. Devolva 429 com um header Retry After e a cota restante, e falhe aberto se o próprio limitador estiver indisponível, para ele não derrubar sua API.

Por que os entrevistadores perguntam isso

Isso testa pensamento de sistemas num problema pequeno e delimitado. O entrevistador quer o problema de estado distribuído nomeado, porque contadores por instância não impõem um limite global, além de uma escolha de algoritmo com motivo, semântica HTTP correta na rejeição, e discernimento operacional sobre o que acontece quando o store de contadores cai. Também revela se você pensa na experiência do cliente ao ser limitado.

Como estruturar sua resposta

  • Escolha a dimensão da chave e justifique.
  • Escolha um algoritmo e diga que comportamento ele produz.
  • Explique como os contadores ficam consistentes entre instâncias.
  • Defina a resposta e o modo de falha do próprio limitador.

Exemplo de resposta

Exemplo falado, em primeira pessoa

Eu começo por qual é a unidade do limite, e para uma API pública isso é a chave de API, não o IP, porque clientes atrás de um NAT não deveriam derrubar uns aos outros. Depois o algoritmo. Token bucket é meu padrão, porque deixa o cliente estourar um pouco, o que combina com como integrações reais se comportam: elas acordam, disparam vinte requests, e depois ficam quietas por uma hora. Um log de janela deslizante é mais preciso mas guarda mais por chave. A parte importante é que o contador tem que ser compartilhado, porque se cada uma das minhas seis instâncias contar a própria conta o limite real é seis vezes o que eu anunciei, então Redis com incremento atômico e expiração, ou um script Lua pequeno quando eu preciso da checagem e do decremento juntos. Na rejeição eu devolvo 429 com Retry After e a cota restante nos headers, porque um cliente que consegue recuar direito para de me martelar. E eu falho aberto, já que um limitador que derruba a API fez mais mal do que o abuso que ele evitou.

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ê daria a um cliente um limite temporariamente maior?
  • O que muda se você precisar do limite imposto na borda?
  • Como você limitaria endpoints caros de forma diferente?

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