Guía de almacenamiento en caché e implementaciones con Varnish

Índice :




Principio de Cachés - Visión General

Los cachés, especialmente Varnish, son muy efectivos para el rendimiento pero agregan una capa de complejidad que necesita ser comprendida para mitigar cualquier efecto secundario.

Independientemente de las consideraciones de PrestaShop, es importante entender cómo funciona el caché :

  • En la primera llamada, se construye el caché
  • En llamadas subsiguientes, el código no se ejecuta y se devuelve el caché
  • El caché debe limpiarse en ciertos eventos para mantenerse actualizado

Su propósito es acelerar una respuesta evitando la ejecución.

Debe mantenerse actualizado ya sea mediante una limpieza inteligente del caché o mediante la expiración del caché.




Diferentes Tipos de Cachés

En el caso de PrestaShop, existen diferentes tipos de cachés, que actúan sobre :

  • Fragmentos de código específicos (por ejemplo, ganchos de módulos)
  • Páginas enteras (por ejemplo, Varnish, página de caché final)

Se implementan en diferentes formas :




Principio de Caché de Varnish

  • Está configurado en un HAProxy
  • En 7724: Influencia en inicio / categorías / productos / CMS / marcas
  • Para productos/categorías/CMS/marcas, se limpia el caché de la URL correspondiente en cada actualización
  • Caché de la página completa
  • Requiere ejecuciones dinámicas para ciertos bloques contextuales (por ejemplo, carrito)
  • También cachéa recursos estáticos
  • Puede diferenciar entre caché de escritorio/móvil




Anidamiento de Cachés

Los cachés operan en diferentes niveles. Entender su anidamiento es crucial porque limpiar un caché en un nivel superior cuando el nivel inferior no está actualizado no sirve de nada.
En su versión más completa, podemos tener esta pila de anidamiento :

Por ejemplo, limpiar Varnish mientras PageCache Ultimate aún devuelve una versión antigua de una página no tendrá efecto.




Varnish - Verificación de Cabeceras

Para confirmar si una respuesta es de Varnish o no, debes verificar las cabeceras de respuesta, por ejemplo, HTML :

El encabezado x-cache puede tener dos valores :

HIT : El caché respondió
MISS : El caché no fue consultado; el recurso no está en caché

El encabezado x-cache-hits muestra cuántas veces se ha accedido al caché. Limpiar el caché de una página (a través del back office o del código PHP) restablecerá este encabezado a 0.
Si el valor permanece consistentemente en cero, el caché no se está construyendo.

El encabezado x-via proporciona información sobre qué HAProxy respondió (por ejemplo, ha1) al navegador y qué servidor PHP proporcionó la respuesta (por ejemplo, Frt01)




Visualizar Cambios a Pesar del Caché

  • Varnish no tiene en cuenta los parámetros GET. Al agregar ?nocache=1 a la URL de la página, evitamos el caché de Varnish para la página HTML. Esto debe confirmarse en las cabeceras de respuesta (x-cache = MISS)
  • Si desplegar un cambio simple muestra la modificación correctamente, entonces solo es necesario limpiar Varnish, ya que los otros parecen haberse actualizado




Módulo - Eo_clearcache

Este módulo permite limpiar varios niveles de caché.

Agrega una interfaz visible en el menú: Configuración Avanzada > Rendimiento




Funcionamiento de las Infraestructuras

En el caso de una infraestructura, es importante entenderla.
Tiene 3 tipos de servidores :

  • HAProxy: Recibe las solicitudes, contiene Varnish, consulta al servidor PHP
  • Servidor PHP: Ejecuta el código PHP, consulta al servidor de bases de datos
  • Servidor de Bases de Datos: Contiene la base de datos

Más información en : https://www.772424.com/fr/nos-offres/infra




¿Cuáles son las Mejores Prácticas para la Implementación en Producción ?

Fuera de los Problemas de Caché, una Implementación en Producción Debe Seguir las Mejores Prácticas :

  • Asegúrese de que su sistema de versionado contenga la versión actual de los códigos
  • Asegúrese de que su sistema de versionado contenga la nueva versión de los códigos
  • Sea capaz de proporcionar la diferencial de la entrega
  • Sea capaz de volver rápidamente al estado anterior al despliegue




¿Cómo Visualizar un Cambio de Contenido o Configuración que no es Visible en el Front End ?


El botón "impactar el front office" limpia cachés relacionados con la visualización de contenidos (es decir, sin modificación de archivos) en el orden correcto. Sin embargo, no limpia los cachés de compilación de Smarty. Si su sitio no está optimizado o experimenta un alto tráfico, podría experimentar ralentizaciones.




¿Cómo Implementar una Modificación de Plantilla? o ¿Cambio de Configuración ?

Para este tipo de despliegue, PrestaShop si está configurado para hacerlo :

detecta y aplica automáticamente las modificaciones.

Sin embargo, los cachés de niveles superiores deben limpiarse :

  • Módulo de caché adicional (por ejemplo, PageCache Ultimate)
  • Caché del servidor (Varnish)

Antes de limpiar Varnish, limpie si está presente el módulo de caché adicional y luego pruebe si la modificación es visible fuera del caché (ver párrafo asociado). Si es así, se puede limpiar Varnish; de lo contrario, otro tipo de caché puede estar influyendo debajo de Varnish (que llega por encima de todos los demás, aparte de las memorias caché remotas tipo CDN).




¿Cómo Implementar un CSS o JS ?

El procedimiento es similar al anterior, pero si los CCC (Combinación, Compresión y Caché) están activados y PrestaShop no versiona el nombre del archivo comprimido o si los CCC no están activados, las modificaciones en los recursos CSS y JS no serán visibles al agregar ?nocache=1 a la URL de la página.
Esto se debe a que Varnish también almacena en caché los recursos estáticos.

En este caso, puede :

  • Limpiar solo el caché de Varnish que reconstruirá sus cachés de archivos estáticos
  • Agregar ?nocache=1 al archivo CSS para verificar la presencia correcta de sus modificaciones

Si tiene CloudFlare, actúa sobre Varnish, por lo que enfrentará la misma problemática y deberá limpiar su caché después del de Varnish.




¿Qué pasa con una implementación que involucre diferentes tipos de archivos/modificaciones?

Si su PrestaShop está configurado correctamente, gestionará adecuadamente sus cachés.
Deberá limpiar los cachés superiores en el orden correcto :

  • Módulo de caché adicional si está presente
  • Caché del servidor Varnish
  • CDN externo si está presente


El botón "impactar el front office" limpia de manera global en el orden correcto. Sin embargo, no limpia los cachés de compilación de Smarty. Si su sitio no está optimizado o experimenta un alto tráfico, podría experimentar ralentizaciones.

El botón "limpiar todos los cachés" realiza una limpieza similar, pero también limpia el caché de compilación de Smarty, por lo que consume más recursos.

No use esta función con demasiada frecuencia; espere al menos unos minutos antes de volver a utilizarla y controle su tráfico y rendimiento al mismo tiempo.

Es importante destacar que el orden de limpieza sigue el orden de las diferentes pilas de caché, desde la más baja hasta la más alta :

  • Limpiar la caché de PrestaShop y Smarty
  • Limpiar la caché de Varnish
  • Limpiar la caché de CloudFlare si está presente




¿Es Posible Limpiar Varnish para una Sola URL ?

Sí, completamente. En caso de que una modificación solo afecte a una página, es preferible limpiar solo esa página (para no restablecer todo el caché).

Para hacer esto, vaya a: Configuración Avanzada > Rendimiento
y haga clic en el botón para acceder a la configuración avanzada :

Este bloque :

le permite limpiar el caché de la página de inicio o ingresar una URL y limpiar su caché.

ATENCIÓN: si tiene varios idiomas, no olvide limpiar la URL para cada uno de los idiomas.




¿Qué pasa con el modo de mantenimiento?

l activar o desactivar el modo mantenimiento, para mostrar páginas normales o la página de mantenimiento según la dirección IP del visitante, se aplica una funcionalidad automática :

En modo de mantenimiento, se desactiva el caché del servidor Varnish para las páginas HTML
Al activar/desactivar el mantenimiento, se limpia el caché del servidor Varnish

El comportamiento para recursos estáticos sigue siendo el mismo (se almacenan en el caché del servidor).
Para otros aspectos, se aplican las reglas de implementación.




¿Qué pasa con las infraestructuras?

En el caso de infraestructuras, los archivos pueden provenir de diferentes servidores. Por ejemplo, el HTML podría ser solicitado desde el servidor #1 y el CSS correspondiente podría ser solicitado desde el servidor #2.
Este segundo servidor podría no haber ejecutado la página aún y, por lo tanto, no haber generado el CSS comprimido asociado, por ejemplo.

No se preocupe, la limpieza global del caché se encarga de sincronizar todo en su infraestructura.

En el caso de usar PageCache Ultimate, debe configurarse en modo "memcached" para que su caché se comparta en la infraestructura. 7724 se encarga de esta configuración para que todo sea transparente para usted.

Puede haber retrasos y algunas páginas pueden tardar unos segundos en obtener los CSS y JS, dependiendo del tiempo de difusión en la infraestructura. Por lo general, el tiempo es de unos segundos, pero puede ser más largo con Cloudflare (que comunica sobre un plazo máximo de 30 segundos en sus interfaces, pero implementa menos en la práctica).




¿Qué Hacer en Caso de Problemas ?

En caso de problemas no reproducibles, (nota el problema solo en ciertas estaciones de trabajo o un cliente informa un problema no reproducible), podría ser un problema que ocurre solo en un servidor específico de la infraestructura.

La interfaz en la configuración de eo_clearcache le permite forzar un servidor específico :

y verificar los servidores uno por uno.

Si la pérdida de CSS o JS no se resuelve después de esperar unos segundos, puede contactar a nuestro soporte proporcionando la siguiente informació :

  • El diferencial de su entrega, o el archivo que causa el problema, o la identificación de la línea que causa el problema (si es posible)
  • Descripción del problema (modificación invisible, error 404 en un recurso, etc.)
  • Identificación del archivo problemático (su URL)
  • En el caso de una infraestructura: Captura de pantalla de las cabeceras de respuesta (prefijadas con "x-") del recurso problemático

La compresión CCC agrega complejidad, y varía según su versión de PrestaShop y sus componentes de software y servidor. Para resolver temporalmente el problema, puede desactivar la compresión CCC y volver a limpiar. Pero esto debe ser temporal mientras comprende y resuelve el problema.

En cualquier caso, si una limpieza global del caché no resuelve el problema, no lo limpie varias veces, tendrá el mismo efecto y podría dañar su alojamiento. La clave del éxito es comprender el problema en su contexto :

  • ¿Estoy o no en una página en caché del servidor Varnish ?
  • ¿Estoy o no dentro de una infraestructura ?
  • ¿Cuál es el nivel de caché que no está actualizado ?

Si no logra entender su problema, estamos aquí para ayudarlo. Proporcionar elementos técnicos precisos nos ayudará a brindarle el apoyo necesario.

Si Necesita Deshabilitar Varnish Debido a Cualquier Efecto No Deseado
En tal caso, no desactive el módulo eo_clearcache porque :

  • El caché del lado del servidor seguiría activo pero con un software degradado
  • El módulo eo_clearcache tiene varios overrides; en algunas versiones, PrestaShop intentará desinstalarlos, lo que podría causar inestabilidad

Para desactivar Varnish

  • Vaya a: Configuración Avanzada > Rendimiento
  • En el panel agregado por eo_clearcache, haga clic en "acceder a la configuración"
  • Cambie la activación de Varnish a falso :

  • Luego, vuelva a agregar la restricción de los módulos dinámicos cambiando esta configuración a verdadero :

  • Finalmente, limpie el caché de Varnish para restablecer los cachés del servidor :

Entonces, su sitio funcionará sin Varnish, ya que el módulo eo_clearcache le dice al servidor que no aplique el caché de Varnish.