Cos’è una cache?

Una cache è una memoria temporanea digitale che conserva i dati consultati una volta per un successivo accesso ripetuto. Alle richieste successive, si può quindi ricevere risposta direttamente dalla cache invece che dall’applicazione vera e propria. I web browser ne sono un tipico esempio: hanno una propria cache che memorizza alcuni contenuti di un sito web. A una nuova visita della pagina in un secondo momento, questa sarà caricata più rapidamente, poiché i dati memorizzati vengono recuperati direttamente dalla cache e non dal server.

Definizione

Cache: una cache è una memoria temporanea che conserva i dati per l’accesso ripetuto e riduce così il tempo necessario per accedervi nuovamente. Le cache sono da considerarsi come uno strato trasparente tra l’utente e la fonte effettiva dei dati. Il processo di memorizzazione dei dati nella cache si chiama “caching”.

Per illustrare il principio della cache, consideriamo un esempio analogo nell’ambito medico:

immaginate un intervento dentale o chirurgico. Il dottore chiede all’assistente una risorsa, che può essere un bisturi, un disinfettante o delle bende. Se la risorsa è già pronta, l’assistente può rispondere alla richiesta immediatamente e consegnarla al medico. In caso contrario, l’assistente dovrà cercare la risorsa nell’armadietto in cui sono riposti i materiali e poi consegnarla al medico. Dopo l’utilizzo da parte del medico, la risorsa viene lasciata a disposizione dall’assistente per un ulteriore accesso rapido.

Per il loro utilizzo, le singole risorse non sono completamente indipendenti l’una dall’altra: se il medico chiede un disinfettante, avrà sicuramente bisogno anche di un tampone, così come non gli sarà possibile usare un ago senza il filo. L’assistente conserverà insieme le risorse necessarie per ridurre al minimo il tempo di accesso durante l’utilizzo.

Vedete: è un processo molto utile e comune tenere a disposizione le risorse richieste più spesso o utilizzate insieme. Nel mondo digitale, questi processi correlati confluiscono tutti nel cosiddetto “caching”.

Qual è lo scopo di una cache?

Lo scopo principale di una cache è ridurre il tempo di accesso ai dati importanti. Per dati “importanti” si intendono:

  1. dati richiesti con frequenza: in questo caso sarebbe uno spreco se i dati fossero caricati dalla memoria più lenta che segue la cache, la quale invece li fornisce con un tempo di accesso più breve.
  2. Dati generati da un processo complesso: alcuni dati sono il risultato di un’elaborazione ad alta intensità di calcolo, oppure devono essere combinati in parti diverse. In questi casi, si consiglia di memorizzare i dati finiti in una cache per le query successive.
  3. Dati richiesti in combinazione: in questo caso non sarebbe efficiente attendere il recupero dei dati per caricarli. Invece è utile tenerli insieme nella cache.

Come funziona una cache?

Esaminiamo più da vicino il funzionamento base della cache. Risponderemo a domande riguardanti il suo modo di operare e la sua posizione precisa.

Schema di base di una cache

  1. Si pone la richiesta di una risorsa al sistema o al software dotati di una cache.
  2. Se la risorsa è già contenuta nella cache, viene trasferita i in modo rapido e diretto con il cosiddetto “cache hit”ossia “cache colpita”.
  3. Se la risorsa non è contenuta nella cache, deve essere prima caricata nella memoria transitoria dal sistema retrostante e poi consegnata. In questo caso si parla di “cache miss” ossia “fallimento della cache”.
  4. In caso di nuova query della risorsa in futuro, potrà essere consegnata dalla cache come cache hit.

La figura illustra uno schema di base: un client fa una richiesta di risorsa al server (1). In caso di “cache hit” la risorsa è già contenuta nella cache e viene immediatamente consegnata al client (2). Nel caso di “cache miss” la risorsa richiesta non è contenuta nella cache e viene quindi richiesta dal sistema retrostante al server (in questo caso un database) (2). Non appena la risorsa è disponibile (3), è consegnata al client (4) e memorizzata nella cache per un utilizzo successivo.

Dove si trova una cache?

Una proprietà fondamentale di una cache è che funziona “di nascosto”. Questo si evince già dal termine stesso: la parola “cache” deriva dal francese e significa “nascosto”. La cache è invisibile agli utenti rispetto all’effettiva memorizzazione dei dati. Ciò significa che in qualità di utenti non dovete sapere nulla sulle proprietà interne della cache. Voi inviate semplicemente delle richieste all’archivio dei dati senza accorgervi che in realtà è la cache a rispondervi.

Quanti tipi di cache esistono in generale?

All’interno di un sistema digitale è presente un certo numero di cache attive. Immaginate di accedere a un sito web: il vostro browser comunica con un server e recupera una serie di risorse. Fin quando non vedrete il contenuto della pagina nel vostro browser, alcune sue parti stanno attraversando le seguenti cache: cache del processore, cache di sistema e cache del browser del vostro dispositivo, come la CDN (Content Delivery Network) e il web cache lato server.

Vantaggi e svantaggi di una cache

Dotare o meno un’applicazione di una cache è a discrezione dello sviluppatore. Abbiamo riassunto i vantaggi e gli svantaggi della soluzione di caching.

Vantaggio: aumento enorme della velocità

Un potenziale vantaggio dell’utilizzo di una cache è un aumento enorme in termini di velocità. Un’accelerazione di un fattore di cento non è per niente insolita. Tuttavia, tale accelerazione si ottiene solo con l’accesso ripetuto agli stessi dati. La mole del vantaggio effettivo potrebbe quindi variare in modo significativo a seconda dell’applicazione.

Vantaggio: riduzione del carico per il sistema retrostante la cache

Poiché una cache fornisce i dati molto rapidamente, il carico sul sistema retrostante subisce una riduzione notevole.

Per esempio, immaginate che una pagina HTML dinamica sia generata da un template PHP: per creare il sito si accede a un database. Questo accesso è complicato a confronto. Inoltre, non è un processo ovvio scalare i server di database, perciò l’accesso al database si definisce “bottleneck” (in italiano: “collo di bottiglia”) e può limitare il rendimento complessivo del sistema. In questo caso, è utile memorizzare la pagina HTML generata in un web cache e sfruttare la capacità del server per altre funzioni.

Svantaggio: l’invalidazione della cache è complicata

Citazione

“There are only two hard things in Computer Science: cache invalidation and naming things.”
(“In informatica esistono solo due cose difficili: l’invalidazione della cache e assegnare un nome alle cose.”)

Phil Karlton, https://www.martinfowler.com/bliki/TwoHardThings.html

Il termine invalidazione della cache si riferisce alla decisione da prendere quando i dati memorizzati temporaneamente non sono più attuali e devono essere aggiornati. Ripensate all’esempio analogo di prima: l’assistente funge da cache per il dottore mettendo a disposizione le risorse già utilizzate per un uso successivo. Poiché lo spazio disponibile sullo scaffale è limitato, l’assistente riordina continuamente durante l’intervento. Le risorse già utilizzate devono essere rimosse e aggiungerne delle nuove. L’assistente potrebbe anche rimuovere una risorsa che potrebbe servire di nuovo al dottore. In questo caso, a livello concettuale si parla di cache miss. L’assistente deve prima di tutto localizzare accuratamente la risorsa necessaria.

Poiché il cache miss è un processo dispendioso, una strategia di caching ottimale ha lo scopo di evitarlo il più possibile. D’altra parte, questo può portare la cache a fornire dati non aggiornati. Il problema è aggravato dal fatto che restano attive diverse cache adiacenti a livello gerarchico. Può essere quindi difficile determinare quando i dati nella cache non sono più attuali.

Quando una cache fornisce dati non più attuali, si verificano spesso problemi dal lato utente: il sito web visitato presenta errori di visualizzazione o nel recupero dati compaiono frammenti di oggetti passati. Può essere difficile determinare l’esatta origine dei problemi, perciò in questo caso la soluzione migliore è svuotare la cache.

Quali sono i tipi di cache?

Le cache sono costituite da componenti hardware o software. Una cache hardware è una memoria buffer veloce, che riduce i tempi di accesso alla memoria retrostante. In linea di massima, le cache hardware sono molto piccole rispetto alla dimensione totale della memoria dati accelerata. Al contrario, le cache implementate nel software possono addirittura superare le dimensioni della risorsa che le supporta. Ciò avviene in particolare quando nella cache sono presenti diverse versioni di una risorsa.

Di seguito vi forniamo una panoramica delle risorse comuni con la cache che vi mostra la dimensione della cache, il tempo di accesso alla cache e un’indicazione sull’eventuale lentezza di accesso alla risorsa senza cache.

Risorse Cache Dimensione della cache Tempo di accesso con la cache × volte più lento senza cache
Memoria principale Cache di livello 1 (hardware) Decine di kilobyte (KB) Meno di un nanosecondo (ns) 200 ×
Disco rigido Cache del disco rigido (hardware) Decine di megabyte (MB) Centinaia di nanosecondi (ns) 100 ×
Browser Cache del browser (Software) Diversi gigabyte (GB) Decine di millisecondi (ms) 10–100 ×
Siti web CDN, Google Page Cache, Wayback Machine (Software) Migliaia di terabyte (Petabyte, PB) Pochi secondi (s) 2–5 ×

Cache hardware

Cache del processore

Un processore moderno funziona in modo incredibilmente veloce. Le sequenze sul chip richiedono solo frazioni di nanosecondi, vale a dire di un miliardesimo di secondo! Al contrario, l’accesso alla memoria principale è relativamente lento, e cioè di centinaia di nanosecondi. Per questo motivo i processori moderni hanno una gerarchia di cache per processori.

Un cache hit sulla cache del processore più veloce, nota come “Cache di livello 1” o “Cache L1”, è circa 200 volte più veloce di un accesso alla memoria principale.

Cache del disco rigido

Un disco rigido compie diverse migliaia di giri al minuto. La testina di lettura-scrittura scorre sui dischi e legge i dati in sequenza. Trattandosi di un processo fisico, l’accesso a un disco rigido è lento a confronto.

Per questo motivo, ogni disco rigido ha la sua piccola cache. Ciò significa che almeno i dati utilizzati più di frequente, ad esempio parti del sistema operativo, non devono essere letti sempre dal disco fisso.

Le cache del disco rigido permettono di caricare i dati fondamentali circa 100 volte più velocemente e di renderli disponibili “immediatamente” all’utente.

Cache software

Cache del browser

Quando si visita un sito web, molti dei dati della pagina vengono temporaneamente memorizzati sul dispositivo del visitatore. Oltre al contenuto effettivo, il sito si compone di varie risorse come immagini, fogli di stile e file JavaScript. Molte di queste risorse sono necessarie su più fronti. Per accelerare il caricamento delle pagine, è utile salvare queste risorse sempre necessarie nella cache del browser del dispositivo locale.

La cache del browser per navigare in rete è pratica ma può anche provocare problemi: ad esempio quando gli sviluppatori hanno apportato delle modifiche a una risorsa del sito, ma nella cache del browser è ancora presente la vecchia versione della risorsa. In questo caso possono verificarsi errori di visualizzazione. Si può rimediare a questo svuotando la cache del browser.

Cache di Google

La funzione “copia cache” di Google conserva le pagine di molti siti web. Ciò significa che le pagine restano comunque accessibili anche se il sito web originale è offline. Lo stato delle pagine corrisponde alla data dell’ultima indicizzazione di Googlebot.

Cache DNS

Il Domain Name System, abbreviato con DNS, è un sistema distribuito a livello globale per la traduzione di domini Internet in indirizzi IP (o viceversa). Il DNS restituisce un indirizzo IP per il nome di un dominio. Ad esempio, l’indirizzo IP 217.160.86.23 viene restituito per il dominio ionos.it.

Le query al DNS che hanno già trovato risposta vengono memorizzate localmente nella cache del DNS sul proprio dispositivo. In questo modo, ogni risoluzione ha sempre la stessa velocità.

Tuttavia, l’uso della cache DNS può anche provocare problemi, ad esempio, quando l’indirizzo IP appartenente a un dominio è cambiato per uno spostamento del server, ma il vecchio indirizzo è ancora memorizzato nella cache DNS locale. In questo caso, la connessione al server si interrompe e la soluzione migliore è cancellare la cache DNS.

Content Delivery Network (CDN)

Le Content Delivery Network (in italiano “reti per la consegna di contenuti”) distribuite a livello globale, conservano gran parte dei dati dei siti web più popolari sui cosiddetti Edge Nodes (“nodi periferici”). Questi trasmettono i dati ai “margini” di Internet. I nodi sono situati a livello locale vicino all’utente e sono tecnicamente progettati per fornire i dati nel modo più rapido possibile. Un CDN funge da cache per i dati dei siti web contenuti. Questo riduce al minimo i tempi di accesso, soprattutto alle offerte di streaming e ai siti web.

Web cache

Una web cache contiene documenti web come pagine HTML, immagini, fogli di stile o file JavaScript per un uso ripetuto. Web cache moderne come Varnish e Redis memorizzano i dati di uso frequente ottenendo così tempi di risposta particolarmente bassi.

Il caso di nuova richiesta di dati, per la risposta basta soltanto un accesso molto veloce alla memoria. Questo riduce drasticamente i tempi di risposta e il carico sui sistemi retrostanti la cache, come il web server e il database. Altre web cache molto conosciute sono OPcache e PHP Cache (APC).

Per offrirti una migliore esperienza di navigazione online questo sito web usa dei cookie, propri e di terze parti. Continuando a navigare sul sito acconsenti all’utilizzo dei cookie. Scopri di più sull’uso dei cookie e sulla possibilità di modificarne le impostazioni o negare il consenso.