This is the Trace Id: 3577aea7f7ec520bd73853208bd5df58
Passa a contenuti principali
Azure
sfondo sfumato

Che cos'è la memorizzazione nella cache?

Scopri come la memorizzazione nella cache migliora le prestazioni e l'efficienza del sistema.

Significato di memorizzazione nella cache

La memorizzazione nella cache conserva in memoria copie riutilizzabili dei dati a cui si accede frequentemente, consentendo alle applicazioni di evitare ripetute chiamate al database e di restituire i risultati più rapidamente.

Punti chiave

  • La memorizzazione nella cache archivia i dati richiesti di frequente in una memoria veloce, consentendo alle applicazioni di rispondere più rapidamente senza dover accedere ogni volta al database primario.
  • Una richiesta tipica controlla prima la cache, quindi, in caso di mancato riscontro, recupera i dati dal database di origine e aggiorna la cache usando i modelli di lettura/scrittura comuni.
  • Se eseguita correttamente, la memorizzazione nella cache riduce la latenza e il carico back-end, consente di gestire i picchi di traffico e supporta scenari comuni come siti Web, API e stato della sessione.
  • La memorizzazione nella cache è presente a più livelli e funziona al meglio quando si scelgono dati stabili e con intensa attività di lettura e si mantiene un'origine di riferimento durevole con un piano di fallback.

Comprendere la memorizzazione nella cache

Che cos'è una cache?

La memorizzazione nella cache consiste nell'archiviare dati sotto forma di coppie chiave-valore in una memoria temporanea (ad esempio un database SQL (Structured Query Language) non relazionale (NoSQL)), in modo che le applicazioni possano recuperarli più velocemente rispetto a quanto potrebbero fare da un sistema di archiviazione convenzionale. Nelle architetture di archiviazione nel cloud, dove le richieste spesso attraversano reti e coinvolgono servizi condivisi, la memorizzazione nella cache può contribuire a mantenere bassi i tempi di risposta e a ridurre il lavoro ripetuto.

Come funziona la memorizzazione nella cache?

La maggior parte dei sistemi mantiene un'origine di riferimento durevole (un database) per i set di dati completi, quindi conserva una cache per subset temporanei che vengono letti spesso. Quando arriva una richiesta, l'app controlla prima la cache; se i dati sono presenti, li restituisce rapidamente senza interrogare di nuovo il back-end. Gli sviluppatori memorizzano nella cache anche i dati elaborati e li riusano per rispondere alle richieste più velocemente rispetto alle query standard sui database relazionali, sui database SQL o sui database PostgreSQL open source.

Principi chiave alla base della memorizzazione nella cache

1. Memorizzare nella cache i dati letti frequentemente

Tra i dati più adatti figurano quelli letti ripetutamente e quelli che cambiano raramente (ad esempio, informazioni sui prodotti e sui prezzi o risorse statiche condivise la cui creazione è dispendiosa).

2. Memorizzare nella cache i risultati di operazioni ripetute

Se un'operazione trasforma i dati o esegue un calcolo complesso, memorizzarne il risultato nella cache può evitare di ricalcolarlo per le richieste successive.

3. Usare livelli di cache quando serve

Gli sviluppatori usano cache multilivello ("livelli di cache") per archiviare diversi tipi di dati in cache separate, in base alla domanda. L'aggiunta di uno o più livelli di cache può migliorare la velocità effettiva e la latenza in un livello di dati.

4. Mantenere lo stato della sessione vicino per app reattive

Gli archivi in memoria vengono spesso usati per contenere grandi volumi di dati di sessione, ad esempio input dell'utente, elementi del carrello o preferenze di personalizzazione, per brevi periodi. Per le app con stato, i team archiviano anche lo stato della sessione nella cache in modo che l'app possa essere senza stato.

Impatto sulle prestazioni del sistema

La memorizzazione nella cache può migliorare le prestazioni in diversi modi concreti:

  • La lettura dei dati da una cache in memoria è molto più veloce rispetto all'accesso ai dati da un archivio dati basato su disco.
  • Un numero minore di query può ridurre il carico e limitare la necessità di dimensionare l'infrastruttura del database, con un possibile risparmio sui costi.
  • I livelli di cache possono migliorare velocità effettiva e latenza, e le cache in memoria possono aiutare a mitigare la latenza durante i picchi di utilizzo.
  • Un'istanza della cache può gestire milioni di richieste al secondo, offrendo una velocità effettiva che molti database non riescono a eguagliare.

Come funziona la memorizzazione nella cache?

Il flusso di base: cache + archivio dati di origine

In molti progetti cloud, una cache si affianca a un archivio dati primario (ad esempio un database). L'archivio primario contiene il set di dati completo e durevole sul server cloud, mentre la cache conserva un subset più piccolo e temporaneo, più veloce da leggere.

Una configurazione comune prevede un livello di cache autonomo oppure una cache integrata nel livello dell'app o del database, a seconda di dove sono necessarie letture veloci.

Livelli di cache: più di un "percorso veloce"

Alcuni sistemi usano la memorizzazione nella cache multilivello ("livelli di cache"), in modo che diversi tipi di dati risiedano in cache diverse a seconda della richiesta. L'aggiunta di uno o più livelli di cache può migliorare la velocità effettiva e la latenza per il livello dati e ridurre il costo complessivo, diminuendo il carico sul back-end.

Cosa viene memorizzato nella cache (e perché)

I team in genere memorizzano nella cache i dati che rientrano in alcune categorie:

  • Dati letti di frequente (soprattutto se cambiano di rado), come informazioni su prodotti o prezzi e risorse statiche condivise, dispendiose da creare.
  • Calcoli ripetuti, quando un'operazione trasforma i dati o esegue un calcolo complesso: memorizzare il risultato nella cache evita di rifare lo stesso lavoro per le richieste successive.
  • Stato della sessione per le app con stato, dove archiviare lo stato della sessione nella cache può aiutare a mantenere il livello dell'app senza stato.

Modelli comuni di memorizzazione nella cache (flussi di lavoro di lettura/scrittura)

Esistono diversi modi standard in cui le app leggono e scrivono nella cache. Ecco i modelli più comuni e cosa significano in pratica.

  • Cache-aside: caricamento dei dati su richiesta da un archivio dati.
  • Read-through: lettura dalla cache, che a sua volta recupera i dati dall'archivio dati se necessario.
  • Write-through: scrittura nella cache, che si sincronizza con l'archivio dati in modo sincrono.
  • Writeback (write-behind): scrittura nella cache, che a sua volta scrive i dati nell'archivio dati in batch.
  • Write-around: scrittura nell'archivio dati e lettura dalla cache; la cache si aggiorna su richiesta.

Perché questo riduce il carico e velocizza le operazioni

L'uso di livelli di cache può migliorare velocità effettiva e latenza, gestendo le richieste comuni dalla cache invece di interrogare ripetutamente l'archivio di back-end. Questo può ridurre la necessità di dimensionare l'infrastruttura del database, perché meno richieste raggiungono il database fin dall'inizio.

Per le app con picchi di utilizzo, le cache in memoria possono aiutare a ridurre la latenza mantenendo i dati richiesti di frequente vicino al punto in cui vengono usati.

Guida rapida: scelta di un modello

Usare questi elementi come punto di partenza per la scelta di un flusso di lavoro:

  • Preferire il modello cache-aside quando l'app può decidere cosa archiviare e quando aggiornarlo.
  • Preferire il modello read-through quando si desidera che sia la cache a occuparsi del recupero dall'archivio dati "se necessario".
  • Considerare il modello write-through o writeback quando il comportamento di scrittura è importante e si vuole un approccio di risincronizzazione definito.

Vantaggi e applicazioni della memorizzazione nella cache

Risposte più veloci con meno lavoro di backend

La memorizzazione nella cache migliora le prestazioni dell'applicazione perché leggere da una cache in memoria è più veloce che leggere da un archivio dati basato su disco. Quando più richieste vengono gestire dalla cache, i sistemi inviano meno query ai database back-end, il che può ridurre la necessità di dimensionare l'infrastruttura del database e abbassare i costi correlati.

Cosa si ottiene spesso dalla memorizzazione nella cache
  • Latenza inferiore per le letture comuni, perché i dati richiesti di frequente provengono da un livello più veloce.
  • Riduzione del carico e dei costi del database, perché la memorizzazione nella cache comporta meno query al database e minore pressione per un provisioning eccessivo delle istanze del database.
  • Velocità effettiva più prevedibile, perché una cache può gestire volumi di richieste molto elevati rispetto a molti database.
  • Gestione più fluida dei picchi di traffico, perché le cache in memoria possono ridurre la latenza durante i periodi di velocità effettiva elevata.

Un uso migliore delle risorse di calcolo e archiviazione

La memorizzazione nella cache aiuta a ridurre le operazioni ripetute. I dati letti ripetutamente, o dispendiosi da creare, possono essere archiviati una sola volta e riusati. Se un'operazione esegue un calcolo complesso o trasforma i dati, memorizzare nella cache il risultato riduce i calcoli ripetuti per le richieste successive.

Esempi comuni di "dati adatti alla cache"
  • Dati che cambiano di rado (ad esempio, informazioni su prodotti e prezzi).
  • Risorse statiche condivise e dispendiose da creare.
  • Risultati di operazioni calcolate ripetutamente.

Applicazioni reali (dove si usa la memorizzazione nella cache)

Siti Web: caricamento delle pagine più rapido e meno round trip

Molti siti memorizzano nella cache l'output delle pagine (ad esempio HTML e script client) in modo che il server possa restituire l'output memorizzato nella cache invece di rieseguire ogni volta il codice della pagina. La memorizzazione nella cache supporta anche scenari multimediali Web tramite Web cache e cache di rete, come le reti per la distribuzione dei contenuti (CDN).

Usi tipici nei siti Web
  • Memorizzare nella cache l'output dell'intera pagina per le visualizzazioni ripetute.
  • Memorizzare nella cache le risorse statiche tramite la cache di rete/CDN.
App e API: letture più veloci per dati condivisi

Le app spesso archiviano in una cache sottoinsiemi temporanei di dati per un recupero rapido, mentre il database primario conserva il set di dati completo e durevole. La memorizzazione nella cache dei dati elaborati e il relativo riutilizzo consentono di soddisfare le richieste più velocemente rispetto alle query su database standard.

Modelli comuni delle app
  • Memorizzare nella cache i dati di riferimento letti di frequente (ad esempio i prezzi) per ridurre le chiamate ripetute al database.
  • Memorizzare nella cache i risultati calcolati per evitare di ripetere operazioni dispendiose.
Server e servizi: scalabilità delle letture e attenuazione dei picchi

I team aggiungono spesso uno o più livelli di cache per migliorare velocità effettiva e latenza, gestendo le query comuni dalla cache e riducendo il carico sul database. Le cache in memoria possono essere utili quando aumentano i picchi di utilizzo e la domanda di velocità effettiva, riducendo la latenza durante questi periodi.

Dove risulta più utile
  • Endpoint con molte letture in cui le stesse chiavi vengono richieste spesso.
  • Sistemi che registrano picchi di traffico periodici.
Sistemi aziendali: stato delle sessioni e dati operativi condivisi

La memorizzazione nella cache viene spesso usata per archiviare grandi volumi di dati di sessione a breve durata (ad esempio input dell'utente o preferenze di personalizzazione) in un archivio in memoria. Alcuni team archiviano anche lo stato della sessione nella cache, in modo che le app con stato possano mantenere il livello applicativo senza stato. Per i sistemi operativi, i dati che cambiano di rado, ad esempio informazioni su prodotti e prezzi, sono un obiettivo comune per la memorizzazione nella cache.

Esempi che è possibile collegare ai carichi di lavoro aziendali
  • Dati di sessione per app Web e per dispositivi mobili (a breve durata, ad alto volume).
  • Dati di riferimento operativi letti di frequente (prezzi, risorse condivise).

Tipi di cache

La memorizzazione nella cache avviene in più livelli tra un'app e i relativi dati, inclusi gli approcci lato client e lato server.

Cache del browser (lato client)

Nella cache del browser vengono archiviate copie di risorse statiche sul dispositivo dell'utente, in modo che, in caso di visite successive, sia possibile riusare tali file invece di scaricarli nuovamente.

Casi d'uso comuni
  • Risorse statiche del sito come immagini, file CSS e file JavaScript.
  • Riduzione dei round-trip al server di origine per le risorse già recuperate in precedenza.

Cache lato server

La memorizzazione nella cache lato server avviene nei processi che eseguono servizi commerciali in remoto, anziché sul dispositivo dell'utente finale. Le cache lato server sono spesso private, ovvero locali con una singola istanza dell'app, oppure condivise, ovvero usate da più istanze dell'app.

Casi d'uso comuni
  • Cache privata in memoria all'interno di un singolo processo per quantità limitate di dati statici.
  • Servizio cache condivisa in modo che più istanze dell'app leggano gli stessi valori memorizzati nella cache ed evitino "versioni diverse" tra le istanze.
  • Dati letti frequentemente ma modificati di rado (ad esempio, dati di riferimento su prodotti e prezzi).

Cache della rete CDN

Una rete CDN memorizza nella cache i contenuti su server edge più vicini agli utenti finali, in modo che le richieste non debbano sempre tornare all'origine. A differenza di una cache del browser (un solo utente), la cache di una rete CDN è condivisa: la richiesta di un utente può popolare contenuti che un altro utente riceverà in seguito.

Casi d'uso comuni
  • Distribuzione condivisa di contenuti memorizzabili nella cache da posizioni edge per ridurre le richieste all'origine.
  • Risorse statiche che traggono vantaggio dall'essere gestite vicino agli utenti (gli stessi tipi di risorse che i browser memorizzano nella cache, ma condivisi tra più utenti).

Cache della CPU o della memoria

La memorizzazione nella cache non è solo un modello di cloud computing: viene usata anche al livello hardware e di memoria.

La cache della CPU è una piccola area di memoria veloce vicino al processore, o integrata in esso, in cui vengono archiviate copie di dati e istruzioni usati di frequente per ridurre il tempo di attesa nella memoria principale.

La cache della memoria (in memoria) è il tipo di cache software più semplice: un archivio in memoria situato nello spazio indirizzi di un singolo processo e accessibile direttamente da tale processo.

Casi d'uso comuni
  • Cache della CPU: accesso ripetuto alle stesse istruzioni o agli stessi dati senza frequenti accessi alla memoria principale.
  • Cache in memoria: letture rapide di quantità limitate di dati relativamente statici all'interno di un singolo servizio in esecuzione.

Memorizzazione nella cache distribuita

Una cache distribuita si estende su più server, consentendo alla cache di crescere e alla capacità transazionale di superare i limiti di una singola macchina. Molti servizi di cache condivisa usano un cluster di server e distribuiscono i dati memorizzati nella cache all'interno del cluster; dimensionare la cache può essere semplice come aggiungere altri server. Alcune architetture distribuite usano anche cache a livelli, in modo che un errore a un livello richieda il recupero dei dati da un provider upstream e archivi il risultato localmente per la richiesta successiva.

Casi d'uso comuni
  • Un livello di cache condivisa per più istanze di app e macchine.
  • Carichi di lavoro che richiedono capacità e velocità effettiva della cache superiori a quelli di un singolo host.
  • Configurazioni di cache a livelli in cui i dati dei mancati riscontri vengono recuperati da upstream e quindi ne viene mantenuta una copia locale per le richieste successive.

Introduzione alla memorizzazione nella cache

Perché la memorizzazione nella cache è ancora importante

La memorizzazione nella cache mantiene i dati a cui si accede frequentemente più vicino al punto in cui vengono usati, migliorando i tempi di risposta e aiutando un sistema a gestire più richieste simultanee. Può anche ridurre la contesa nell'archivio dati originale, ad esempio quando un database ha un numero limitato di connessioni.

Nelle applicazioni distribuite, la memorizzazione nella cache spesso avviene in più punti: lato client (ad esempio in un browser) e lato server (in un'applicazione o in un servizio cache condivisa).

Un modo pratico per iniziare

Inizia in piccolo e concentrati sui dati che offrono il ritorno più evidente

  • Memorizza nella cache i dati a lettura intensa, lenti da recuperare e che cambiano di rado (ad esempio, i dati di riferimento).
  • Decidi quando i dati entrano nella cache:
    • Su richiesta dopo la prima richiesta, in modo da memorizzare solo ciò che viene effettivamente usato.
    • Prepopola (effettua il seeding) alcuni elementi all'avvio se sai che verranno richiesti presto, monitorando al contempo il carico iniziale sull'archivio originale.
  • Scegli un modello che puoi gestire. Il modello cache-aside è comune e le relative indicazioni evidenziano come scadenza, rimozione e coerenza influenzano i risultati.

Mantieni aggiornati i dati memorizzati nella cache (e la resilienza del sistema)

In genere una cache contiene copie di dati di un archivio primario, quindi è importante prestare attenzione all'aggiornamento:

  • Usa criteri di scadenza per limitare per quanto tempo i dati possono rimanere nella cache prima di essere aggiornati.
  • Controlla il comportamento di rimozione quando le cache si riempiono (molti sistemi rimuovono per impostazione predefinita gli elementi usati meno di recente).
  • Non considerare la cache come l'unica sede dei dati critici. Mantieni l'origine di riferimento nell'archiviazione permanente, in modo che il sistema possa continuare a funzionare anche se la cache non è disponibile.
  • Prevedi un percorso di fallback all'archivio dati originale se la cache non è raggiungibile e ripopola i dati man mano che avvengono le letture.

La memorizzazione nella cache è un elemento fondamentale per i sistemi moderni perché si adatta a molte architetture, dai singoli servizi alle app distribuite e alla distribuzione edge. Per un provider di servizi cloud che offre una cache gestita in memoria, puoi valutare Azure.

sfondo sfumato
Risorse

Risorse

Formazione
Risorse di Azure
Esplora la tecnologia per sviluppatori più recente e acquisisci nuove competenze.
Istruzione
Risorse per studenti sviluppatori
Ottieni competenze per dare slancio alla tua carriera e avere un impatto positivo sul mondo.
Eventi
Eventi e webinar di Azure
Sviluppa nuove competenze, scopri nuove tecnologie e interagisci con la tua community partecipando in modalità digitale o di persona.
Domande frequenti

Domande frequenti

  • La memorizzazione nella cache conserva i dati a cui si accede frequentemente nella memoria veloce, consentendo alle applicazioni di restituire risultati rapidamente senza dover accedere ogni volta al database primario. Ciò riduce la latenza e il carico sul back-end, consentendo ai sistemi di gestire un maggior numero di richieste simultanee.
  • La memorizzazione nella cache migliora le prestazioni fornendo i dati richiesti più frequentemente da una memoria veloce, riducendo la latenza, il carico e i costi del database, supportando un elevato volume di richieste e risultando utile durante i picchi di traffico.
  • Un esempio è la memorizzazione nella cache dell'output: un server Web memorizza l'output sottoposto a rendering di una pagina (HTML e script lato client) in memoria, quindi fornisce quell'output memorizzato nella cache nelle visite successive invece di rieseguire il codice della pagina.
  • Una cache archivia un sottoinsieme di dati più piccolo e temporaneo per un accesso rapido, mentre un database o un archivio contiene il set di dati completo e durevole per la conservazione a lungo termine. Se i dati memorizzati nella cache vengono persi, la copia permanente è comunque nel database; le cache non sono pensate per essere l'archivio autorevole dei dati critici.