Isso é um cache stampede, às vezes chamado de thundering herd. Milhares de requisições concorrentes dão miss no mesmo instante e todas recalculam o mesmo valor. Corrija com lock de single flight, para que só um worker recalcule enquanto os outros esperam ou servem dado obsoleto. Acrescente jitter aos TTLs para que as chaves não expirem juntas, atualize chaves quentes em segundo plano antes da expiração, e sirva dado obsoleto em caso de erro.
Por que os entrevistadores perguntam isso
Essa é uma favorita porque a resposta ingênua (aumentar o TTL) não corrige nada, só torna o evento mais raro e maior. Entrevistadores querem ver coalescência de requisições, expiração antecipada probabilística e semântica de stale while revalidate. Também revela se você pensa em falha correlacionada, que é o tema por trás da maioria das perguntas de confiabilidade.
Como estruturar sua resposta
- Nomeie o modo de falha e explique por que os misses se correlacionam no tempo.
- Dê a correção principal: coalescer os recálculos concorrentes.
- Acrescente jitter no TTL e atualização em segundo plano para chaves quentes.
- Descreva servir dado obsoleto como um modo degradado deliberado.
- Mencione um cache negativo para misses que não retornam nada.
Exemplo de resposta
É um stampede. A chave expira, dez mil requisições em voo dão miss simultaneamente, e todas rodam a mesma query cara, então o banco vê dez mil cópias de uma query que ele normalmente vê uma vez por minuto. A primeira correção é coalescência, então um lock de single flight no cache faz um worker recalcular e todo mundo esperar aquele resultado ou receber o valor obsoleto. A gente usou um lock com SETNX no Redis, com um TTL curto, e a carga no banco naquele caminho caiu umas duas ordens de grandeza. Além disso eu acrescento jitter em todo TTL, então em vez de exatamente 300 segundos é 300 mais ou menos 10%, o que descorrelaciona a expiração entre as chaves. Para chaves genuinamente quentes eu prefiro recálculo antecipado probabilístico, em que uma requisição perto do fim do TTL atualiza em segundo plano enquanto ainda serve o valor em cache. E eu sempre cacheio resultados negativos, senão uma linha ausente vira um loop de query sem limite.
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ê implementaria single flight sem um lock distribuído?
- Qual é o risco de servir dado obsoleto, e onde isso é inaceitável?
- Como você lida com um nó de cache morrendo em vez de uma chave expirando?
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