Optimización de la caché de Dispatcher

Descripción

Entorno

  • Experience Manager



 

Problemas/Síntomas
Este artículo se centra en las últimas optimizaciones de AEM Dispatcher y en cómo aprovecharlas al máximo. El AEM Dispatcher es un almacenamiento en caché proxy inverso servidor diseñado para usar con Adobe Experience Manager. Se puede instalar y ejecutar como un módulo dentro del software de servidor web existente. En el momento de escribir este artículo, la variable módulo de dispatcher compatible en el servidor HTTP Apache, Microsoft IIS e iPlanet.

Resolución

Cómo funciona el almacenamiento en caché de Dispatcher

En el nivel más básico, el Dispatcher AEM es un proxy inverso que funciona realizando almacenamiento en caché, vaciado de caché e invalidación de caché.

Consulte los vínculos relacionados para obtener más detalles sobre Dispatcher:

  1. Cómo funciona Dispatcher y cómo instalarlo.
  2. Opciones de configuración disponibles en Dispatcher.
  3. Seminario web sobre el funcionamiento de Dispatcher. Tenga en cuenta que parte de la información de la presentación se basa en versiones antiguas de Dispatcher.
  4. Sesión de seminario web de Gems sobre las características de Dispatcher, el uso de CDN y la seguridad.
  5. Sesión de Gems sobre las nuevas características de Dispatcher (después de la v4.1.9).

Optimización de la caché de Dispatcher

Estas son algunas maneras de optimizar la caché del dispatcher:

  1. Almacénelo casi todo en caché. Esto significa almacenar en la caché cualquier contenido que los usuarios solicitarían más de una vez.

  2. Almacenar en caché el contenido personalizado durante diferentes períodos de tiempo - Si su sitio tiene contenido personalizado, considere la posibilidad de utilizar Apache Sling Dynamic Includes en su aplicación AEM para aprovechar Ajax (llamadas asincrónicas de JavaScript y XML a nivel de explorador), SSI (Server Side Includes a nivel de servidor web) y ESI (Edge-side Includes a nivel de CDN) para almacenar en caché diferentes partes de la página durante diferentes períodos de tiempo.

  3. Nunca borre la caché de Dispatcher en uno activo. Si borra la caché cuando Dispatcher está activo, causará una avalancha masiva de peticiones que regresarán a AEM.  Debido a esto, la caché de Dispatcher nunca debe borrarse en un Dispatcher activo.

  4. Purgue la caché - Antes de eliminar la caché de Dispatcher, retire el Dispatcher del equilibrador de carga, elimine la caché y, a continuación, ejecute una herramienta de rastreo web para almacenar en caché los archivos en el despachante antes de ponerlo en el equilibrador de carga.

  5. Páginas de error de caché - Aproveche el DispatcherPassError 1 (específico de Apache Web Server) para servir páginas de error como 404s de la caché de Dispatcher.

  6. GZip comprime todos los tipos de archivo excepto los que están precomprimidos - En el servidor web Apache, mod_deflate se puede usar, pero asegúrese de que Varía: User-Agent header no está configurado.  En Microsoft IIS, use la compresión dinámica.

    Ejemplo de configuración de Apache (que especifica solo ciertos tipos de contenido para evitar tipos de archivo precomprimidos):

    AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript

  7. Habilitar /serveStaleOnError en la configuración /cache : sirva el archivo de caché antiguo cuando AEM instancias están sirviendo errores.

  8. Agregar /GracePeriod a la configuración /cache : defina el número de segundos que un recurso obsoleto e invalidado automáticamente puede servirse desde la caché después del último evento de publicación de contenido ("activación").  Esto reduce el número de peticiones que vuelven a las instancias de publicación durante una actividad de publicación de contenidos de gran envergadura, como una "activación del árbol".

  9. Añada reglas a /ignoreUrlParams. Ignore los parámetros de la cadena de consulta que no sean necesarios o que la aplicación no use.  Esto permite el almacenamiento en caché de las URLs incluso cuando haya una cadena de consulta.

  10. Almacenar en caché los encabezados de respuesta Cache-Control y Last-Modified - Utilice la variable /headers configuración para almacenar en caché los encabezados de respuesta HTTP Cache-Control y Última modificación (y/o ETag si la envía desde AEM).  Esto ayuda a simplificar y optimizar el almacenamiento en caché a nivel de la CDN y del navegador.  El almacenamiento en caché de estas cabeceras hace que solo AEM establezca las cabeceras, no el propio servidor web.  Tenga en cuenta que cuando haga esto tendrá que empezar a enviar las cabeceras desde su aplicación AEM.

  11. Almacene el contenido durante el mayor tiempo posible y reduzca las solicitudes que vuelven a AEM. Optimice las solicitudes de vaciado habilitando el vaciado de recuperación en todos los agentes de vaciado.  O use /enableTTL y establezca Cache-Control: max-age=… para almacenar archivos en caché el mayor tiempo posible.  Vea a continuación los detalles sobre este tema.

Uso de TTL

A partir de la versión 4.1.11 de Dispatcher, /enableTTL 1 se puede configurar en la configuración del archivo .any.  Esta configuración hace que Dispatcher respete las caducidades de caché establecidas en el encabezado de respuesta HTTP Cache-Control.  Es decir, Dispatcher funcionará de forma similar a una CDN en la que la forma primaria de invalidación de la caché se produce cuando los archivos caducan.  Una vez implementado, comience a enviar Cache-Control: max-age=… para todas las respuestas de AEM, puede deshabilitar de forma segura sus agentes de vaciado de Dispatcher en las instancias de publicación.

Después de deshabilitar los agentes de vaciado en las instancias de publicación, es posible que aún desee poder vaciar la caché de Dispatcher.  En ese caso, puede usar ACS Commons - Interfaz de usuario de vaciado de Dispatcher.  Esta herramienta se instala en la instancia de autor.  Le ofrece a los usuarios una interfaz en la que pueden realizar peticiones manuales de vaciado de caché.

I. Pasos para habilitar las invalidaciones del estilo TTL ("Time to Live" o caducidad):

  1. Modifique el código fuente en la aplicación AEM para enviar Cache-Control encabezado y Última modificación para todas las solicitudes en las que aún no se haya establecido.
  2. Instale Dispatcher 4.1.11 o posterior.
  3. Establezca /enableTTL 1 en la configuración de granja .any del sitio.
  4. Configure las variables /headers configuración para almacenar en caché el Cache-Control y Última modificación encabezados.
  5. Reinicie el servidor web.

II. Desactivar los agentes de vaciado de Dispatcher en las instancias de publicación:

Dispatcher utilizará ahora el encabezado Cache-Control para controlar la invalidación de los archivos de caché.  Dado que este es el caso, ya no es necesario vaciar Dispatcher de las instancias de publicación.

  1. Vaya a /etc/replication/agents.publish.html en cada instancia de publicación.
  2. Vaya a la configuración de cada agente de vaciado y desactive el agente.

III. Permitir las solicitudes de vaciado manual de Dispatcher desde la instancia del autor:

Ahora que los agentes de vaciado están desactivados, debe confiar completamente en la variable Cache-Control para controlar cuándo se actualiza el contenido en Dispatcher.  Todavía puede permitir que los usuarios realicen vaciados manuales de la caché de Dispatcher:

  1. Instalar ACS Commons - Interfaz de usuario de vaciado de Dispatcher en la instancia del autor.
  2. Configure los agentes de vaciado en la instancia de autor.
  3. En cada una de las configuraciones de los agentes, seleccione la opción Activadores = Ignorar por defecto y actívela. Esta opción hace que los agentes de vaciado ignoren cuando los usuarios hacen clic en (Des)publicar o (Des)activar en la interfaz de usuario de AEM.

Recuperación del vaciado de Dispatcher

Para optimizar las solicitudes de vaciado de Dispatcher, todos los agentes de vaciado de Dispatcher deben tener habilitada una función llamada descarga de recuperación.

Para habilitar el vaciado de recuperación de Dispatcher, haga lo siguiente:

  1. Vaya a http://aemhost:port/crx/packmgr/index.jsp y entre como administrador.
  2. Descargue el paquete desde aquí.
  3. Cargue e instale el paquete en el gestor de paquetes.
  4. Vaya a la configuración de su agente de vaciado de Dispatcher. Por ejemplo /etc/replication/agents.author/flush.html
  5. Haga clic en Editar
  6. Configure lo siguiente
    • Tipo de serialización = Vaciado de recuperación de Dispatcher
    • Extendido = Método HTTP = POST
  7. Haga clic en Guardar

Tenga en cuenta que el paquete instalado arriba solo es un ejemplo básico.  Para personalizar y optimizar el vaciado de recuperación puede modificar la lista de URI que envía.  Es de código abierto y se puede encontrar aquí.  El código añade una lista de URI al cuerpo de la petición como parámetros que indican a Dispatcher qué rutas debe recuperar.  Puede añadir más rutas según los requisitos de su aplicación para optimizar las capacidades de almacenamiento en caché de su sitio.

Una explicación más detallada de la descarga de recuperación

Normalmente, una descarga de Dispatcher funciona eliminando archivos:

  1. Archivos .stat táctiles
  2. Eliminar /content/foo.*
  3. Eliminar /content/foo/_jcr_content

Debido al hecho de que los archivos se eliminan en el paso 2, la próxima vez que un usuario solicite un archivo como /content/foo.html o /content/foo.json, mientras que el archivo se está "recuperando", las solicitudes posteriores para el mismo archivo también se enviarán a las instancias de publicación hasta que el archivo se almacene en caché.  En el caso de respuestas lentas o páginas con mucho tráfico, como las páginas de inicio, esto puede provocar una inundación del nivel de instancia de publicación.

Para resolver este problema, habilite una función de Dispatcher llamada "recuperación".  Esta función le permite enviar una lista de URI que Dispatcher debe "recuperar" de forma proactiva y reemplazar en lugar de borrar.

Consulte el 22:41-27:05 en la grabación de esta presentación para ver una demostración de cómo funciona y cómo configurarlo.

En esta página