Panoramica

L'aumento del Cache Hit Ratio (CHR) con CloudFront migliora le prestazioni di un'applicazione web e riduce il carico sulla relativa origine. Il CHR è il rapporto tra le richieste HTTP servite dalla cache di CloudFront e il numero totale di richieste. Le richieste servite dalla cache di CloudFront beneficiano di una migliore latenza (ad esempio tempo all'ultimo byte), il che rende il CHR un buon indicatore del trasferimento dall'origine e delle prestazioni dell'applicazione. Il CHR di una distribuzione CloudFront può essere monitorato utilizzando il parametro CloudWatch Percentuale di riscontri nella cache. Per aumentare il CHR puoi ottimizzare la configurazione della cache in CloudFront, abilitare Origin Shield (Scudo Origine) e ottimizzare il comportamento della tua applicazione.

Creare siti web a bassa latenza con Amazon CloudFront

Aumentare il Time to Live (TTL) della cache

Puoi controllare per quanto tempo un oggetto viene memorizzato nella cache in CloudFront utilizzando l'intestazione Cache-Control inviata dalla tua origine, limitata dalle impostazioni Time To Live configurate in Policy Cache. L'aumento dei TTL ha un impatto positivo sul CHR; di conseguenza, consigliamo di:

  • Configurare le intestazioni Cache-Control sull'origine per controllare meglio il TTL in CloudFront e sfruttare la memorizzazione nella cache del browser.
  • Memorizzare nella cache le risorse statiche come oggetti immutabili (ad esempio Cache-Control: max-age=31536000, immutable) e modificare il loro percorso URL (ad esempio /static/app.1be87a.js).
  • Implementare gli ETAG sui tuoi oggetti per beneficiare delle richieste HTTP condizionali alla tua origine.
  • Trovare il giusto equilibrio per contenuti più dinamici come HTML tra la memorizzazione nella cache (TTL elevato) e la tolleranza dell'applicazione per i contenuti obsoleti (TTL basso).

Ottimizzare le impostazioni delle chiavi della cache

Le impostazioni della chiave della cache che utilizzano Policy Cache determinano se CloudFront riutilizza o meno un oggetto memorizzato nella cache per una richiesta HTTP. Le impostazioni ottimizzate della chiave della cache determinano una relazione 1 a 1 tra chiavi cache uniche e oggetti unici. Prendi in considerazione l'utilizzo di un'applicazione web che serva lo stesso /about.html, a prescindere dai parametri di query aggiunti (ad esempio /about.html? utm_medium=social). Se la chiave della cache è configurata per includere il parametro di query utm_medium, CloudFront memorizzerà nella cache diversi URL (ad esempio /about.html? utm_medium=social e /about.html? utm_medium=email) utilizzando due chiavi di cache distinte. Ciò comporta due errori di cache nell'origine, anche se entrambe le richieste riguardano esattamente lo stesso file sull'origine, il che non è ottimale.

La prima procedura consigliata per ottimizzare le impostazioni della chiave della cache consiste nell'includere nella cache esclusivamente gli attributi di richiesta della chiave che variano le risposte all'origine. Per raggiungere questo obiettivo, si consiglia di:

  • Configurare comportamenti cache separati per gli oggetti che richiedono impostazioni diverse della chiave della cache.
  • Se i parametri della query, gli header o i cookie variano nelle risposte all'origine, includere solo quelle che effettivamente richiedono una impostazione diversa (ad esempio cookie user_id invece di tutti i cookie).
  • Usare le Policy di risposta dell'intestazione in CloudFront per gestire CORS, invece di aggiungere intestazioni CORS (ad es. Origin, Access-Control-Request-Method, Access-Control-Request-Headers) alla chiave della cache, e gestire i CORS a livello di origine.
  • Trasferire il controllo degli accessi a CloudFront utilizzando URL firmati, Funzioni CloudFront o Lambda@Edge, invece di aggiungere l'intestazione di autorizzazione alla chiave della cache e gestirla a livello di origine.
  • Utilizzare la Polici di richiesta origine su CloudFront per inoltrare gli attributi HTTP all'origine anziché aggiungerli alla chiave della cache.

La seconda best practice consiste nel normalizzare un attributo di richiesta prima di aggiungerlo alla chiave della cache per ridurre la cardinalità dei suoi possibili valori, ciascuno dei quali risulta in una chiave cache univoca. Per raggiungere questo obiettivo, si consiglia di:

  • Invia i parametri di ricerca, se utilizzati, nello stesso ordine e con le stesse lettere maiuscole e minuscole
  • Utilizza le intestazioni generate da CloudFront come CloudFront-is-Mobile-Viewer per identificare un tipo di dispositivo invece di aggiungere l'intestazione User-agent alla chiave della cache.
  • Utilizzo delle Funzioni CloudFront per applicare normalizzazioni avanzate, ad esempio: riordinamento e riduzione delle maiuscole e minuscole dei parametri di query; pubblicazione di una versione diversa di una pagina web in base all'esistenza di un cookie, anziché aggiungere il cookie alla chiave della cache; riduzione della varianza delle risposte che cambiano in base ai Paesi, quando è possibile inviare la stessa risposta per un gruppo di Paesi; ulteriore riduzione della cardinalità di Accept-Encoding quando è necessaria la compressione, oppure la cardinalità delle intestazioni di rilevamento del dispositivo di CloudFront quando ne sono utilizzati più di uno.

Abilita Origin Shield

Per impostazione predefinita, CloudFront riduce il numero di mancate cache all'origine utilizzando due livelli di cache di alto livello: uno a livello PoP e un altro livello a livello di Cache Edge Regionale (Regional Edge Cache, REC). Un PoP di CloudFront è associato nominalmente a uno degli oltre 10 REC globali. Quando una richiesta comporta una perdita di cache a livello PoP, CloudFront controlla la cache del REC associato per soddisfare la richiesta e, solo se non è memorizzata nella cache in quel REC, inoltra la richiesta all'origine. I REC sono isolati l'uno dall'altro per mantenere un'elevata disponibilità e, di conseguenza, non condividono le loro cache. Di conseguenza, quando vengono richiesti oggetti popolari da diverse località in tutto il mondo, CloudFront invierà all’origine più richieste per gli stessi oggetti da diversi REC.

Per ridurre il numero di richieste inoltrate all'origine, puoi abilitare Origin Shield in CloudFront, una terza fase di memorizzazione della cache di alto livello tra i REC e la tua origine. Invece di richiedere oggetti direttamente dall'origine, i REC cercano innanzitutto di soddisfare le richieste dalla cache di Origin Shield.

Ottimizzare il comportamento delle applicazioni

Valuta le modifiche a livello di applicazione che possono influenzare positivamente il tasso di successo della cache. Alcuni esempi includono:

  • Ridurre gli oggetti di cardinalità serviti dall'applicazione. Quando l'applicazione produce più rappresentazioni della stessa risorsa, ad esempio dimensioni diverse di un'immagine per adattarsi a schermi diversi, valuta la possibilità di limitare il numero dei valori possibili per larghezza e altezza.
  • Sfruttare la memorizzazione della cache del browser. Ciò può essere fatto utilizzando l'intestazione Cache-Control inviata dalla tua origine. Puoi differenziare i TTL tra CloudFront e il browser utilizzando max-age con le direttive s-maxage nell'intestazione Cache-Control, oppure utilizzando l'intestazione Cache-Control per il browser e controllare i TTL di CloudFront utilizzando Policy Cache.
  • Utilizza le richieste di intervallo di byte nei tuoi client per scaricare solo ciò che è necessario.

Risorse

Questa pagina ti è stata utile?