Come ottimizzare la cache di Dispatcher?
Questo articolo offre istruzioni dettagliate sui diversi modi per ottimizzare la cache di Dispatcher. Descrive inoltre i passaggi per abilitare le invalidazioni in stile TTL ("durata" o scadenza), tra cui la disabilitazione degli agenti di svuotamento del Dispatcher e il recupero dello svuotamento di Dispatcher.
Descrizione description
Ambiente
Adobe Experience Manager
Problemi/Sintomi
Questo articolo si concentra sulle ultime ottimizzazioni nel Dispatcher dell’AEM e su come sfruttarle al meglio. Il Dispatcher AEM è un server proxy inverso di memorizzazione nella cache progettato per l'utilizzo con Adobe Experience Manager. Può essere installato ed eseguito come modulo all’interno di un software server web esistente. Al momento della scrittura di questo articolo, il modulo Dispatcher è supportato su Apache HTTP Server, Microsoft IIS e iPlanet.
Risoluzione resolution
Come funziona il caching di Dispatcher?
Al livello più elementare, il dispatcher AEM è un proxy inverso che funziona eseguendo la memorizzazione in cache, lo svuotamento della cache e l’invalidamento della cache.
Per ulteriori informazioni su Dispatcher, consulta i collegamenti correlati:
- Funzionamento e installazione di Dispatcher.
- Opzioni di configurazione disponibili in Dispatcher.
- Webinar sul funzionamento di Dispatcher. Tieni presente che alcune informazioni contenute nella presentazione si basano su versioni precedenti di Dispatcher.
- Sessione del webinar Gems sulle funzionalità di Dispatcher, l'utilizzo della rete CDN e la sicurezza.
- Sessione Gems sulle nuove funzionalità di Dispatcher (dopo la versione 4.1.9).
Ottimizzazione della cache di Dispatcher
Di seguito sono riportati alcuni modi per ottimizzare la cache di Dispatcher:
-
Memorizza quasi tutti gli elementi nella cache. Ciò significa inserire nella cache tutti i contenuti che verrebbero richiesti più di una volta dagli utenti.
-
Memorizza nella cache i contenuti personalizzati per diversi periodi di tempo. Se il tuo sito dispone di contenuti personalizzati, considera l'utilizzo di Apache Sling Dynamic Includes nell'applicazione AEM per sfruttare Ajax (Asynchronous JavaScript and XML effettua chiamate a livello di browser), SSI (Server-Side Includes a livello di server web) ed ESI (Edge-side Includes a livello di CDN) al fine di memorizzare nella cache diverse parti della pagina per diversi periodi di tempo.
-
Non eliminare mai la cache di Dispatcher in un Dispatcher attivo. Se un Dispatcher sta distribuendo contenuti live ed elimini la cache, questo causerà un massiccio flusso di richieste per tornare all'AEM. Per questo motivo, la cache di Dispatcher non deve mai essere eliminata su un Dispatcher live.
-
Prepara la cache . Prima di eliminare la cache di Dispatcher, estrai il Dispatcher dal load balancer, elimina la cache, quindi esegui uno strumento Web crawler per memorizzare i file nella cache del Dispatcher prima di inserirlo nel load balancer.
-
Memorizza nella cache le pagine di errore - Sfrutta la direttiva DispatcherPassError 1 (specifica per server web Apache) per distribuire le pagine di errore, ad esempio 404, dalla cache di Dispatcher.
-
GZip comprimi tutti i tipi di file, tranne quelli precompressi . Nel server web Apache è possibile utilizzare mod_deflate, ma accertarsi che Vary: User-Agent header non sia impostato. In Microsoft IIS, utilizza la compressione dinamica.
Esempio di configurazione di Apache (specificando solo determinati tipi di contenuto per evitare tipi di file precompressi):
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript
-
Abilitare /serveStaleOnError nella configurazione /cache. Eseguire il server del file della cache precedente quando le istanze AEM presentano errori.
-
Aggiungi /gracePeriod alla configurazione /cache. Definisci il numero di secondi dopo i quali una risorsa obsoleta e auto-invalidata può essere servita dalla cache dopo l'ultimo evento di pubblicazione di contenuti ("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”.
-
Aggiungi regole a /ignoreUrlParams. Ignora i parametri querystring non richiesti o utilizzati dall'applicazione. Ciò consente la memorizzazione nella cache di URL anche quando è presente una querystring.
-
Memorizza nella cache le intestazioni di risposta Cache-Control e Last-Modified. Utilizza la configurazione /headers per memorizzare nella cache le intestazioni di risposta HTTP Cache-Control e Last-Modified (e/o ETag se l'invio proviene 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.
-
Memorizza il contenuto nella cache il più a lungo possibile e riduci le richieste che tornano all'AEM. Ottimizza le richieste di svuotamento abilitando il recupero dello svuotamento su tutti gli agenti di svuotamento. Vedere la sezione seguente con titolo Recupero di Dispatcher Flush. Oppure usa /enableTTL e imposta l'intestazione Cache-Control: max-age=… per memorizzare i file nella cache il più a lungo possibile. Per ulteriori informazioni su questo argomento, vedi di seguito.
Utilizzo di TTL
A partire dalla versione 4.1.11 di Dispatcher, /enableTTL 1 può essere impostato in qualsiasi configurazione di file. Questa impostazione fa in modo che Dispatcher rispetti le scadenze della cache impostate nell’intestazione di risposta HTTP Cache-Control. In altre parole, Dispatcher funzionerà in modo simile a una rete CDN, in cui la forma principale di invalidamento della cache si verifica alla scadenza dei file. Dopo aver implementato questa impostazione e aver iniziato a inviare Cache-Control: max-age=… per tutte le risposte dall'AEM, puoi disabilitare in modo sicuro gli agenti di svuotamento del Dispatcher nelle istanze di pubblicazione.
Dopo aver disabilitato gli agenti di svuotamento sulle istanze di pubblicazione, potrebbe essere comunque necessario svuotare la cache di 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):
- Modificare il codice sorgente nell'applicazione AEM per inviare l'intestazione Cache-Control e Last-Modified per tutte le richieste in cui non è già impostata.
- Installa Dispatcher 4.1.11 o versione successiva.
- Impostare /enableTTL 1 in qualsiasi configurazione di farm del sito.
- Imposta la configurazione /headers per memorizzare nella cache le intestazioni Cache-Control e Last-Modified.
- Riavvia il server web.
II. Disabilita agenti di svuotamento Dispatcher nelle istanze di pubblicazione:
Dispatcher ora utilizzerà l’intestazione Cache-Control per controllare l’invalidamento dei file della cache. In questo caso, non è più necessario eseguire lo scaricamento di Dispatcher dalle istanze di pubblicazione.
- Vai a /etc/replication/agents.publish.html su ogni istanza di pubblicazione.
- Vai alla configurazione di ogni agente di svuotamento e disabilita l’agente.
III. Consenti richieste manuali di svuotamento del Dispatcher dall'istanza di authoring:
Ora che gli agenti di svuotamento sono disabilitati, puoi basarti interamente sull'intestazione Cache-Control per controllare le tempistiche di aggiornamento del contenuto nel dispatcher. Puoi comunque consentire agli utenti di eseguire lo svuotamento manuale della cache di Dispatcher:
- Installa ACS Commons - Interfaccia utente di Svuotamento del Dispatcher sull’istanza dell’autore.
- Configura gli agenti di svuotamento sull’istanza dell’autore.
- In ognuna delle configurazioni degli agenti, impostare Triggers =
>
Ignora l'opzione predefinita per abilitarla. 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 dello svuotamento del Dispatcher
Per ottimizzare le richieste di svuotamento del Dispatcher, tutti gli agenti di svuotamento del Dispatcher devono avere una funzione chiamata "recupero dello svuotamento" abilitata.
Per abilitare il recupero dello svuotamento del dispatcher, effettua le seguenti operazioni:
-
Vai a http://aemhost:port/crx/packmgr/index.jsp e accedi come amministratore.
-
Scarica il pacchetto da questa pagina.
-
Carica e installa il pacchetto in Gestione pacchetti.
-
Vai alla configurazione dell’agente di svuotamento del Dispatcher. Ad esempio, /etc/replication/agents.author/flush.html
-
Fai clic su Modifica
-
Imposta le opzioni seguenti
- Tipo di serializzazione = Recupero svuotamento del Dispatcher
- Esteso =
>
Metodo HTTP = POST
-
Fai clic su Salva
Nota: il pacchetto installato sopra è 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 come parametri che indicano a Dispatcher quali percorsi recuperare. Puoi aggiungere altri percorsi in base ai requisiti dell’applicazione per ottimizzare le funzionalità di memorizzazione nella cache del sito.
Spiegazione dettagliata del recupero dello svuotamento
Normalmente lo scaricamento di un Dispatcher funziona eliminando i file:
- Toccare i file .stat
- Elimina /content/foo.*
- Elimina /content/foo/_jcr_content
Poiché i file vengono eliminati nel passaggio 2, alla richiesta successiva di un file da parte dell’utente, ad esempio /content/foo.html o /content/foo.json, durante il "recupero" del file, le richieste successive per lo stesso file vengono 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 una funzione di Dispatcher denominata "recupero". Questa funzione ti consente di inviare un elenco di URI che 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.