Expiração aleatória do cache

13

Tenho experimentado tempos de expiração aleatórios de cache para evitar situações em que uma solicitação individual força várias coisas a serem atualizadas de uma só vez. Por exemplo, uma página da web pode incluir cinco componentes diferentes. Se cada um estiver definido para atingir o tempo limite em 30 minutos, o usuário terá um longo tempo de espera a cada 30 minutos. Então, em vez disso, você define todos eles para um tempo aleatório entre 15 e 45 minutos para tornar provável que no máximo apenas um componente seja recarregado para qualquer carregamento de página.

Estou tentando encontrar alguma pesquisa ou diretrizes sobre esse tópico, por exemplo, parâmetros de variação ideais. Lembro-me de ver um artigo sobre como o Google (?) Usa essa técnica, mas não é possível localizá-la, e não parece haver muita coisa escrita sobre o assunto.

mahemoff
fonte
Você pode reformular isso como uma pergunta? Não está claro o que você está esperando por uma resposta.
Derek
Ok, está feito.
mahemoff

Respostas:

4

Alguns documentos:

haylem
fonte
3
Obrigado por esses links, mas nenhum deles menciona aleatoriedade.
mahemoff
2
Eu sei quantos anos esta pergunta é, mas Matthew Neale de EstarOnline limitada fez exatamente isso (PDF): estaronline.com/images/assetimages/...
Nick Bedford
@NickBedford Esta é a resposta que eu estava procurando. Seu comentário deve ser a resposta aceita.
WhiteHotLoveTiger 20/03
0

Voltando para responder à minha própria pergunta, o principal problema aqui é como evitar que tudo sempre expire ao mesmo tempo. Se isso acontecer, o sistema diminuirá a velocidade e ficará congestionado enquanto repovoa o cache.

Na maioria das vezes, isso realmente não é um problema na prática. Com o tempo, todos os componentes tendem a flutuar em termos de tempo em que estão expirando. Se houver vários componentes sendo reconstruídos ao mesmo tempo, é um cheiro de código, porque provavelmente eles devem ser armazenados em cache como um único componente (por exemplo, se você tiver o cabeçalho, o corpo e o rodapé exclusivos de uma página armazenados em cache separadamente, talvez você possa apenas armazene em cache a página).

Certamente, há momentos em que muitas coisas precisam ser armazenadas em cache ao mesmo tempo, por exemplo, após iniciar um sistema, se limpamos todo o cache ou giramos as chaves do cache. Nesse caso, geralmente não é tão ruim porque os componentes se enchem rapidamente e as expirações se separam.

Na medida em que isso é um problema, existem algumas soluções:

  • Basta escolher uma duração de expiração aleatória de cache dentro de um intervalo em vez de uma duração fixa, por exemplo, um número inteiro aleatório entre 15 e 90 minutos em vez de 60 minutos.
  • Permitir respostas obsoletas. Só porque um item de cache expirou, não significa que você não possa usá-lo se ele ainda estiver lá. Dependendo das necessidades da empresa, pode ser aceitável usá-lo se houver um problema de desempenho ao buscar a versão original após a expiração. No HTTP, esse é o objetivo de "deve revalidar" (se verdadeiro, significa não usar a versão em cache após a expiração).
mahemoff
fonte