Mod_pagespeed, Varnish y problemas de caché de Apache después de la introducción de nuevos códigos

2

Tengo un problema bastante extraño. En mi entorno, estamos ejecutando un clúster de carga equilibrada de 8 servidores apache con un servidor MySQL maestro-maestro. Frente a apache tenemos Barniz en la capa de caché.

Llevamos varias semanas ejecutando Apache mod_pagespeed y, en su mayor parte, ha funcionado muy bien. El problema surge cuando realizamos nuevas actualizaciones de código desde Git, y / y todos los activos de JS / CSS cambian.

Básicamente, el problema parece ser doble. Uno, después de la inserción del código, generalmente aprovechamos la oportunidad para vaciar el barniz, reiniciar apache y reiniciar el barniz. Al hacer esto, todos los archivos combinados / minificados mod_pagespeed se borran asegurando que todos los nuevos activos JS / CSS estén actualizados. El problema es que, al hacer esto, los nombres de archivo que mod_pagespeed crean cambios, pero los archivos antiguos (aparecen) aún se almacenan en caché para muchas personas del lado del cliente, lo que conduce a resultados muy inesperados. Sin embargo, si no reiniciamos apache, los cambios en los archivos pueden aparecer o no en el lado del cliente debido a los activos minificados en caché.

La solución simple es deshabilitar mod_pagespeed, sin embargo, preferiría no hacerlo, ya que ha tenido un impacto bastante grande en el rendimiento.

Siento que debe haber una mejor manera de lidiar con las inconsistencias en la memoria caché entre el cliente y el servidor para evitar que las personas hagan grandes esfuerzos o realicen una gran cantidad de actualizaciones de página para ver una página de trabajo.

Puedo proporcionar fragmentos de configuración si alguien los necesita.

Si desea inspeccionar el sitio, la fuente, los encabezados o cualquier otra cosa, pruebe las siguientes direcciones:

http://wellplayed.org

http://wellplayed.org/tv

¡Gracias por adelantado!

WerkkreW
fuente
Lo primero que viene a la mente es el almacenamiento en caché del lado del cliente
3molo

Respuestas:

1

Solo para asegurarme de que entiendo el problema, parece que está modificando archivos que se sirvieron hasta mod_pagespeed desde el barniz con encabezados caducados que lo mantienen en caché más allá cuando se ha cambiado en el back-end.

Tienes un par de opciones aquí si ese es el caso. Puede configurar su backend (barniz) para enviar encabezados de caducidad más cortos. O puede configurar sus activos no almacenados en caché para que se vinculen a las versiones almacenadas en caché con números de parche que puede incrementar cuando realice cambios. Entonces se convierten en:

http://site.com/asset.gif?p=930024982afb191

También parece que hay otros botones que puede modificar en mod_pagespeed para cambiar los tiempos de caducidad de ciertos archivos:

http://code.google.com/speed/page-speed/docs/filter-cache-extend.html

También en relación con el lado del cliente, aquí hay más información sobre cómo actúan que ayudará a configurar tanto barniz como mod_pagespeed:

http://code.google.com/speed/page-speed/docs/filter-cache-extend.html

polinomio
fuente
1

Escribiste sobre el lavado de Barniz. En realidad, hay dos formas diferentes de hacerlo:

  1. eliminar un documento específico (página HTML, imagen, archivo CSS o lo que sea) en función de una URL específica y sus variantes (por lo general, diferentes versiones de idioma o versiones comprimidas / sin comprimir); esto se denomina principalmente purga
  2. anular un grupo de documentos (página HTML, imagen, archivo CSS o lo que sea) basado en una expresión regular, esto se llama prohibición

En su caso, puede ser una buena idea prohibir todos los archivos HTML, CSS y JS.

Para obtener más información, siga este enlace o pregunte: https://www.varnish-cache.org/docs/3.0/tutorial/purging.html

Jens Bradler
fuente