Come ottimizzare la cache del Dispatcher

Descrizione

Ambiente

  • Experience Manager



 

Problemi/Sintomi
Questo articolo si concentra sulle ultime ottimizzazioni nel dispatcher di AEM e su come sfruttarle al meglio. Il dispatcher AEM è una memorizzazione in cache proxy inverso server progettato per l’utilizzo con Adobe Experience Manager. Può essere installato ed eseguito come un modulo all’interno del software del server web esistente. Al momento della stesura di questo articolo, il modulo dispatcher supportato su Apache HTTP Server, Microsoft IIS e iPlanet.

Risoluzione

Come funziona la memorizzazione in cache del dispatcher

Al livello più semplice, il dispatcher AEM è un proxy inverso che funziona eseguendo la memorizzazione in cache, lo scaricamento della cache e l’invalidazione della cache.

Vedi i collegamenti correlati per maggiori dettagli sul dispatcher:

  1. Funzionamento e installazione del dispatcher.
  2. Opzioni di configurazione disponibili nel dispatcher.
  3. Webinar sul funzionamento del dispatcher: alcune informazioni contenute nella presentazione si basano su versioni precedenti.
  4. Sessione del webinar Gems sulle caratteristiche del dispatcher, l’utilizzo della CDN e la sicurezza.
  5. Sessione Gems sulle nuove funzionalità del dispatcher (versione 4.1.9 e successive).

Ottimizzazione della cache del Dispatcher

Di seguito sono riportati alcuni modi per ottimizzare la cache del dispatcher:

  1. Memorizza quasi tutti gli elementi nella cache. Ciò significa inserire nella cache tutti i contenuti che verrebbero richiesti più di una volta dagli utenti.

  2. Memorizza in cache contenuti personalizzati per diversi periodi di tempo - Se il sito dispone di contenuti personalizzati, considera l'utilizzo di Apache Sling Dynamic Includes nell'applicazione AEM per sfruttare Ajax (chiamate Asincrone JavaScript e XML a livello di browser), SSI (Server Side Includes a livello di Web Server) ed ESI (Edge-side Includes a livello di CDN) per memorizzare nella cache diverse parti della pagina per diversi periodi di tempo.

  3. Non eliminare mai la cache del dispatcher su un dispatcher live. Se elimini la cache di un dispatcher che sta distribuendo contenuti live, sarà necessario un massiccio flusso di richieste per tornare ad AEM.  Per questo motivo, la cache del dispatcher non deve mai essere eliminata su un dispatcher live.

  4. Preparare la cache - Prima di eliminare la cache del dispatcher, estrai il dispatcher dal load balancer, elimina la cache, quindi esegui uno strumento web crawler per memorizzare in cache i file sul dispatcher prima di metterlo sul load balancer.

  5. Pagine degli errori della cache - Sfruttare DispatcherPassError 1 Direttiva (specifica di Apache Web Server) per distribuire pagine di errore come 404s dalla cache del dispatcher.

  6. Comprimi tutti i tipi di file eccetto quelli pre-compressi - In Apache Web Server, mod_deflate potrebbe essere utilizzato, ma assicurati che Varia: Agente utente header non è impostato.  In Microsoft IIS, utilizza la compressione dinamica.

    Esempio di configurazione Apache (specificando solo alcuni tipi di contenuto per evitare tipi di file precompressi):

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

  7. Abilita /serveStaleOnError nella configurazione /cache - serve il vecchio file di cache quando AEM istanze servono gli errori.

  8. Aggiungi /gracePeriod alla configurazione /cache - definisci il numero di secondi in cui una risorsa obsoleta e auto-invalidata può ancora essere servita dalla cache dopo l’ultimo evento di pubblicazione del contenuto ("attivazione").  Ciò riduce il numero di richieste che tornano alle istanze di pubblicazione durante un’attività di pubblicazione di contenuti di grandi dimensioni, come ad esempio un’operazione di “attivazione ad albero”.

  9. Aggiungi regole a /ignoreUrlParams. Questa operazione consente di ignorare i parametri querystring non richiesti o utilizzati dall’applicazione.  Ciò consente la memorizzazione nella cache di URL anche quando è presente una querystring.

  10. Memorizza in cache le intestazioni di risposta Cache-Control e Last-Modified - Utilizzare /headers configurazione per memorizzare in cache le intestazioni di risposta HTTP Controllo cache e Ultima modifica e/o ETag intestazione se la stai inviando da AEM).  Ciò consente di semplificare e ottimizzare la memorizzazione nella cache a livello di CDN e browser.  La memorizzazione nella cache di queste intestazioni fa sì che solo AEM imposti le intestazioni, non il server web.  Quando esegui questa operazione, inizia a inviare le intestazioni dall’applicazione AEM.

  11. Memorizza il contenuto nella cache il più a lungo possibile e riduci le richieste che tornano ad AEM. Ottimizza le richieste di svuotamento abilitando il recupero dello svuotamento su tutti gli agenti di svuotamento.  O utilizzare /enableTTL e impostare Controllo cache: max-age=… intestazione per memorizzare in cache i file il più a lungo possibile.  Per ulteriori informazioni su questo argomento, vedi di seguito.

Utilizzo dei TTL

Dalla versione 4.1.11 di Dispatcher, /enableTTL 1 può essere impostato nella configurazione del file .any.  Questa impostazione fa sì che il dispatcher rispetti le scadenze della cache impostate nell'intestazione di risposta HTTP Cache-Control.  In altre parole, il dispatcher funzionerà in modo simile a una rete CDN, in cui la forma principale di invalidamento della cache si verifica alla scadenza dei file.  Una volta implementata questa e inizia a inviare Controllo cache: max-age=… per tutte le risposte da AEM, puoi tranquillamente disabilitare gli agenti di flush del dispatcher nelle istanze di pubblicazione.

Dopo aver disabilitato gli agenti di svuotamento nelle istanze di pubblicazione, è probabile che tu voglia eseguire lo svuotamento della cache del dispatcher.  In tal caso, puoi utilizzare ACS Commons - Interfaccia utente di Svuotamento del Dispatcher.  Questo strumento è installato sull’istanza dell’autore e  offre agli utenti un’interfaccia utente in cui è possibile eseguire richieste manuali di svuotamento della cache.

I. Passaggi per abilitare le invalidazioni in stile (“durata” o scadenza):

  1. Modificare il codice sorgente nell'applicazione AEM da inviare Controllo cache intestazione e Ultima modifica per tutte le richieste in cui non è già impostato.
  2. Installa Dispatcher 4.1.11 o successivo.
  3. Imposta /enableTTL 1 nella configurazione .any farm del sito.
  4. Imposta la /headers configurazione per memorizzare nella cache Controllo cache e Ultima modifica intestazioni.
  5. Riavvia il server web.

II. Disattiva gli agenti di svuotamento del dispatcher sulle istanze di pubblicazione:

Il dispatcher utilizzerà ora l'intestazione Cache-Control per controllare l'invalidazione dei file di cache.  In questo caso, non è più necessario eseguire lo svuotamento del dispatcher dalle istanze di pubblicazione.

  1. Vai a /etc/replication/agents.publish.html su ogni istanza di pubblicazione.
  2. Vai alla configurazione di ogni agente di svuotamento e disabilita l’agente.

III. Consenti le richieste manuali di svuotamento del dispatcher dall’istanza dell’autore:

Ora che gli agenti di pulizia sono disabilitati, ci si può basare interamente su Controllo cache intestazione per controllare quando il contenuto viene aggiornato sul dispatcher.  Puoi comunque consentire agli utenti di eseguire lo svuotamento manuale della cache del dispatcher:

  1. Installa ACS Commons - Interfaccia utente di Svuotamento del Dispatcher sull’istanza dell’autore.
  2. Configura gli agenti di svuotamento sull’istanza dell’autore.
  3. In ogni configurazione degli agenti, imposta l’opzione Trigger = Ignora predefinito su abilitato. Questa opzione consente di ignorare gli agenti di svuotamento quando gli utenti fanno clic su (Un)Publish (Pubblica/Annulla pubblicazione) o (De)Activate (Attiva/Disattiva) nell’interfaccia utente di AEM.

Recupero del flush del dispatcher

Per ottimizzare le richieste di flush del dispatcher, tutti gli agenti di flush del dispatcher devono avere una funzione chiamata refetching flush abilitata.

Per abilitare il recupero dello svuotamento del dispatcher, procedi come segue:

  1. Vai a http://aemhost:port/crx/packmgr/index.jsp e accedi come amministratore.
  2. Scarica il pacchetto da questa pagina.
  3. Carica e installa il pacchetto in Gestione pacchetti.
  4. Vai alla configurazione dell’agente di svuotamento del dispatcher. Ad esempio, /etc/replication/agents.author/flush.html
  5. Fai clic su Modifica
  6. Imposta le opzioni seguenti
    • Tipo di serializzazione = Recupero svuotamento del Dispatcher
    • Esteso = Metodo HTTP = POST
  7. Fai clic su Salva

Il pacchetto installato precedentemente è solo un esempio di base.  Per personalizzare e ottimizzare il recupero dello svuotamento, puoi modificare l’elenco degli URI inviati.  Il codice è open source ed è disponibile in questa pagina.  Il codice aggiunge un elenco di URI al corpo della richiesta, ad esempio parametri che indicano al dispatcher quali percorsi recuperare.  Puoi aggiungere altri percorsi in base ai requisiti dell’applicazione per ottimizzare le funzionalità di memorizzazione nella cache del sito.

Una spiegazione più dettagliata del recupero del flush

Normalmente lo scaricamento di un dispatcher funziona eliminando i file:

  1. File Touch .stat
  2. Elimina /content/foo.*
  3. Elimina /content/foo/_jcr_content

A causa del fatto che i file vengono eliminati nel passaggio 2, la prossima volta che un utente richiede un file come /content/foo.html o /content/foo.json, mentre il file viene "ri-recuperato", le richieste successive per lo stesso file verranno inviate anche alle istanze di pubblicazione fino a quando il file non viene memorizzato nella cache.  In caso di risposte lente o pagine con traffico elevato, come le home page, ciò può causare il flooding a livello di istanza di pubblicazione.

Per risolvere questo problema, abilita la funzione del dispatcher denominata “recupero”.  Questa funzione ti consente di inviare un elenco di URI che il dispatcher deve “recuperare” e sostituire in modo proattivo, invece di eliminarli.

Per una dimostrazione del funzionamento e della configurazione di questa funzione, vai al minuto 22:41-27:05 di questa registrazione della presentazione.

In questa pagina