Caducidad aleatoria de caché

13

He estado experimentando con tiempos de caducidad de caché aleatorios para evitar situaciones en las que una solicitud individual obliga a actualizar varias cosas a la vez. Por ejemplo, una página web puede incluir cinco componentes diferentes. Si cada uno está configurado para agotar el tiempo de espera en 30 minutos, el usuario tendrá un largo tiempo de espera cada 30 minutos. Por lo tanto, los establece a todos en un tiempo aleatorio entre 15 y 45 minutos para que sea probable que a lo sumo solo se vuelva a cargar un componente por cada carga de página dada.

Estoy tratando de encontrar alguna investigación o pautas sobre este tema, por ejemplo, parámetros de variación óptimos. Recuerdo haber visto un artículo sobre cómo Google (?) Usa esta técnica, pero no puede localizarla, y no parece haber mucho escrito sobre el tema.

mahemoff
fuente
¿Puedes reformular esto como una pregunta? No está claro qué espera para una respuesta.
Derek
Ok, ya está hecho.
mahemoff

Respuestas:

4

Algunos documentos:

haylem
fuente
3
Gracias por estos enlaces, pero ninguno de ellos menciona aleatoriedad.
mahemoff
2
Sé cuántos años tiene esta pregunta, pero Matthew Neale de EstarOnline Limited hizo exactamente esto (PDF): estaronline.com/images/assetimages/…
Nick Bedford
@ NickBedford Esta es la respuesta que estaba buscando. Su comentario debe ser la respuesta aceptada.
WhiteHotLoveTiger
0

Volviendo a responder mi propia pregunta, el principal problema aquí es cómo evitar que todo expire al mismo tiempo. Si se permite que eso suceda, el sistema se ralentizará y se congestionará mientras vuelve a llenar el caché.

La mayoría de las veces, esto realmente no es un problema en la práctica. Con el tiempo, todos los componentes tienden a derivar en términos del tiempo que caducan. Si hay varios componentes que se están reconstruyendo todos al mismo tiempo, es un olor a código porque probablemente deberían almacenarse en caché como un solo componente (por ejemplo, si tenía un encabezado, cuerpo y pie de página únicos almacenados en caché por separado, tal vez pueda solo almacena la página en caché).

Ciertamente, hay momentos en los que es necesario almacenar en caché muchas cosas al mismo tiempo, por ejemplo, después de iniciar un sistema, si borramos todo el caché o rotamos las claves del caché. En este caso, generalmente no es tan malo porque los componentes se llenan rápidamente y las caducidades se separan posteriormente.

En la medida en que esto sea un problema, hay un par de soluciones:

  • Simplemente elija una duración de caducidad de caché aleatoria dentro de un rango en lugar de una duración fija, por ejemplo, un entero aleatorio entre 15 y 90 minutos en lugar de 60 minutos.
  • Permitir respuestas rancias. El hecho de que un elemento de caché haya caducado no significa que no pueda usarlo si todavía está allí. Dependiendo de las necesidades del negocio, puede ser aceptable usarlo si hay un problema de rendimiento al buscar la versión original después de la expiración. En HTTP, este es el propósito de "must-revalidate" (si es verdadero, significa no usar la versión en caché después de la expiración).
mahemoff
fuente