Una cache è una memoria tem­po­ra­nea digitale che conserva i dati con­sul­ta­ti una volta per un suc­ces­si­vo accesso ripetuto. Alle richieste suc­ces­si­ve, si può quindi ricevere risposta di­ret­ta­men­te dalla cache invece che dall’ap­pli­ca­zio­ne 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ù ra­pi­da­men­te, poiché i dati me­mo­riz­za­ti vengono re­cu­pe­ra­ti di­ret­ta­men­te dalla cache e non dal server.

De­fi­ni­zio­ne

Cache: una cache è una memoria tem­po­ra­nea che conserva i dati per l’accesso ripetuto e riduce così il tempo ne­ces­sa­rio per accedervi nuo­va­men­te. Le cache sono da con­si­de­rar­si come uno strato tra­spa­ren­te tra l’utente e la fonte effettiva dei dati. Il processo di me­mo­riz­za­zio­ne dei dati nella cache si chiama “caching”.

Per il­lu­stra­re il principio della cache, con­si­de­ria­mo un esempio analogo nell’ambito medico:

im­ma­gi­na­te un in­ter­ven­to dentale o chi­rur­gi­co. Il dottore chiede all’as­si­sten­te una risorsa, che può essere un bisturi, un di­sin­fet­tan­te o delle bende. Se la risorsa è già pronta, l’as­si­sten­te può ri­spon­de­re alla richiesta im­me­dia­ta­men­te e con­se­gnar­la al medico. In caso contrario, l’as­si­sten­te dovrà cercare la risorsa nell’ar­ma­diet­to in cui sono riposti i materiali e poi con­se­gnar­la al medico. Dopo l’utilizzo da parte del medico, la risorsa viene lasciata a di­spo­si­zio­ne dall’as­si­sten­te per un ulteriore accesso rapido.

Per il loro utilizzo, le singole risorse non sono com­ple­ta­men­te in­di­pen­den­ti l’una dall’altra: se il medico chiede un di­sin­fet­tan­te, avrà si­cu­ra­men­te bisogno anche di un tampone, così come non gli sarà possibile usare un ago senza il filo. L’as­si­sten­te con­ser­ve­rà insieme le risorse ne­ces­sa­rie per ridurre al minimo il tempo di accesso durante l’utilizzo.

Vedete: è un processo molto utile e comune tenere a di­spo­si­zio­ne le risorse richieste più spesso o uti­liz­za­te insieme. Nel mondo digitale, questi processi correlati con­flui­sco­no tutti nel co­sid­det­to “caching”.

Qual è lo scopo di una cache?

Lo scopo prin­ci­pa­le di una cache è ridurre il tempo di accesso ai dati im­por­tan­ti. Per dati “im­por­tan­ti” 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’ela­bo­ra­zio­ne ad alta intensità di calcolo, oppure devono essere combinati in parti diverse. In questi casi, si consiglia di me­mo­riz­za­re i dati finiti in una cache per le query suc­ces­si­ve.
  3. Dati richiesti in com­bi­na­zio­ne: in questo caso non sarebbe ef­fi­cien­te attendere il recupero dei dati per caricarli. Invece è utile tenerli insieme nella cache.

Come funziona una cache?

Esa­mi­nia­mo più da vicino il fun­zio­na­men­to base della cache. Ri­spon­de­re­mo a domande ri­guar­dan­ti 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 tra­sfe­ri­ta i in modo rapido e diretto con il co­sid­det­to “cache hit”ossia “cache colpita”.
  3. Se la risorsa non è contenuta nella cache, deve essere prima caricata nella memoria tran­si­to­ria dal sistema re­tro­stan­te e poi con­se­gna­ta. In questo caso si parla di “cache miss” ossia “fal­li­men­to della cache”.
  4. In caso di nuova query della risorsa in futuro, potrà essere con­se­gna­ta 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 im­me­dia­ta­men­te con­se­gna­ta al client (2). Nel caso di “cache miss” la risorsa richiesta non è contenuta nella cache e viene quindi richiesta dal sistema re­tro­stan­te al server (in questo caso un database) (2). Non appena la risorsa è di­spo­ni­bi­le (3), è con­se­gna­ta al client (4) e me­mo­riz­za­ta nella cache per un utilizzo suc­ces­si­vo.

Dove si trova una cache?

Una proprietà fon­da­men­ta­le 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 è in­vi­si­bi­le agli utenti rispetto all’effettiva me­mo­riz­za­zio­ne dei dati. Ciò significa che in qualità di utenti non dovete sapere nulla sulle proprietà interne della cache. Voi inviate sem­pli­ce­men­te delle richieste all’archivio dei dati senza ac­cor­ger­vi che in realtà è la cache a ri­spon­der­vi.

Quanti tipi di cache esistono in generale?

All’interno di un sistema digitale è presente un certo numero di cache attive. Im­ma­gi­na­te 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 at­tra­ver­san­do le seguenti cache: cache del pro­ces­so­re, cache di sistema e cache del browser del vostro di­spo­si­ti­vo, come la CDN (Content Delivery Network) e il web cache lato server.

Vantaggi e svantaggi di una cache

Dotare o meno un’ap­pli­ca­zio­ne di una cache è a di­scre­zio­ne dello svi­lup­pa­to­re. Abbiamo riassunto i vantaggi e gli svantaggi della soluzione di caching.

Vantaggio: aumento enorme della velocità

Un po­ten­zia­le vantaggio dell’utilizzo di una cache è un aumento enorme in termini di velocità. Un’ac­ce­le­ra­zio­ne di un fattore di cento non è per niente insolita. Tuttavia, tale ac­ce­le­ra­zio­ne si ottiene solo con l’accesso ripetuto agli stessi dati. La mole del vantaggio effettivo potrebbe quindi variare in modo si­gni­fi­ca­ti­vo a seconda dell’ap­pli­ca­zio­ne.

Vantaggio: riduzione del carico per il sistema re­tro­stan­te la cache

Poiché una cache fornisce i dati molto ra­pi­da­men­te, il carico sul sistema re­tro­stan­te subisce una riduzione notevole.

Per esempio, im­ma­gi­na­te che una pagina HTML dinamica sia generata da un template PHP: per creare il sito si accede a un database. Questo accesso è com­pli­ca­to a confronto. Inoltre, non è un processo ovvio scalare i server di database, perciò l’accesso al database si definisce “bot­tle­neck” (in italiano: “collo di bottiglia”) e può limitare il ren­di­men­to com­ples­si­vo del sistema. In questo caso, è utile me­mo­riz­za­re la pagina HTML generata in un web cache e sfruttare la capacità del server per altre funzioni.

Svan­tag­gio: l’in­va­li­da­zio­ne della cache è com­pli­ca­ta

Citazione

“There are only two hard things in Computer Science: cache in­va­li­da­tion and naming things.”
(“In in­for­ma­ti­ca esistono solo due cose difficili: l’in­va­li­da­zio­ne della cache e assegnare un nome alle cose.”)

Phil Karlton, https://www.mar­tin­fo­w­ler.com/bliki/Two­Hard­Things.html

Il termine in­va­li­da­zio­ne della cache si riferisce alla decisione da prendere quando i dati me­mo­riz­za­ti tem­po­ra­nea­men­te non sono più attuali e devono essere ag­gior­na­ti. Ripensate all’esempio analogo di prima: l’as­si­sten­te funge da cache per il dottore mettendo a di­spo­si­zio­ne le risorse già uti­liz­za­te per un uso suc­ces­si­vo. Poiché lo spazio di­spo­ni­bi­le sullo scaffale è limitato, l’as­si­sten­te riordina con­ti­nua­men­te durante l’in­ter­ven­to. Le risorse già uti­liz­za­te devono essere rimosse e ag­giun­ger­ne delle nuove. L’as­si­sten­te potrebbe anche rimuovere una risorsa che potrebbe servire di nuovo al dottore. In questo caso, a livello con­cet­tua­le si parla di cache miss. L’as­si­sten­te deve prima di tutto lo­ca­liz­za­re ac­cu­ra­ta­men­te la risorsa ne­ces­sa­ria.

Poiché il cache miss è un processo di­spen­dio­so, 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 ag­gior­na­ti. Il problema è aggravato dal fatto che restano attive diverse cache adiacenti a livello ge­rar­chi­co. Può essere quindi difficile de­ter­mi­na­re quando i dati nella cache non sono più attuali.

Quando una cache fornisce dati non più attuali, si ve­ri­fi­ca­no spesso problemi dal lato utente: il sito web visitato presenta errori di vi­sua­liz­za­zio­ne o nel recupero dati compaiono frammenti di oggetti passati. Può essere difficile de­ter­mi­na­re l’esatta origine dei problemi, perciò in questo caso la soluzione migliore è svuotare la cache.

Quali sono i tipi di cache?

Le cache sono co­sti­tui­te da com­po­nen­ti hardware o software. Una cache hardware è una memoria buffer veloce, che riduce i tempi di accesso alla memoria re­tro­stan­te. In linea di massima, le cache hardware sono molto piccole rispetto alla di­men­sio­ne totale della memoria dati ac­ce­le­ra­ta. Al contrario, le cache im­ple­men­ta­te nel software possono ad­di­rit­tu­ra superare le di­men­sio­ni della risorsa che le supporta. Ciò avviene in par­ti­co­la­re quando nella cache sono presenti diverse versioni di una risorsa.

Di seguito vi forniamo una pa­no­ra­mi­ca delle risorse comuni con la cache che vi mostra la di­men­sio­ne della cache, il tempo di accesso alla cache e un’in­di­ca­zio­ne sull’eventuale lentezza di accesso alla risorsa senza cache.

Risorse Cache Di­men­sio­ne della cache Tempo di accesso con la cache × volte più lento senza cache
Memoria prin­ci­pa­le Cache di livello 1 (hardware) Decine di kilobyte (KB) Meno di un na­no­se­con­do (ns) 200 ×
Disco rigido Cache del disco rigido (hardware) Decine di megabyte (MB) Centinaia di na­no­se­con­di (ns) 100 ×
Browser Cache del browser (Software) Diversi gigabyte (GB) Decine di mil­li­se­con­di (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 pro­ces­so­re

Un pro­ces­so­re moderno funziona in modo in­cre­di­bil­men­te veloce. Le sequenze sul chip ri­chie­do­no solo frazioni di na­no­se­con­di, vale a dire di un mi­liar­de­si­mo di secondo! Al contrario, l’accesso alla memoria prin­ci­pa­le è re­la­ti­va­men­te lento, e cioè di centinaia di na­no­se­con­di. Per questo motivo i pro­ces­so­ri moderni hanno una gerarchia di cache per pro­ces­so­ri.

Un cache hit sulla cache del pro­ces­so­re più veloce, nota come “Cache di livello 1” o “Cache L1”, è circa 200 volte più veloce di un accesso alla memoria prin­ci­pa­le.

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. Trat­tan­do­si 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 uti­liz­za­ti più di frequente, ad esempio parti del sistema operativo, non devono essere letti sempre dal disco fisso.

Le cache del disco rigido per­met­to­no di caricare i dati fon­da­men­ta­li circa 100 volte più ve­lo­ce­men­te e di renderli di­spo­ni­bi­li “im­me­dia­ta­men­te” all’utente.

Cache software

Cache del browser

Quando si visita un sito web, molti dei dati della pagina vengono tem­po­ra­nea­men­te me­mo­riz­za­ti sul di­spo­si­ti­vo del vi­si­ta­to­re. Oltre al contenuto effettivo, il sito si compone di varie risorse come immagini, fogli di stile e file Ja­va­Script. Molte di queste risorse sono ne­ces­sa­rie su più fronti. Per ac­ce­le­ra­re il ca­ri­ca­men­to delle pagine, è utile salvare queste risorse sempre ne­ces­sa­rie nella cache del browser del di­spo­si­ti­vo locale.

La cache del browser per navigare in rete è pratica ma può anche provocare problemi: ad esempio quando gli svi­lup­pa­to­ri 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 ve­ri­fi­car­si errori di vi­sua­liz­za­zio­ne. 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 ac­ces­si­bi­li anche se il sito web originale è offline. Lo stato delle pagine cor­ri­spon­de alla data dell’ultima in­di­ciz­za­zio­ne di Googlebot.

Cache DNS

Il Domain Name System, ab­bre­via­to con DNS, è un sistema di­stri­bui­to a livello globale per la tra­du­zio­ne di domini Internet in indirizzi IP (o viceversa). Il DNS re­sti­tui­sce un indirizzo IP per il nome di un dominio. Ad esempio, l’indirizzo IP 217.160.86.23 viene re­sti­tui­to per il dominio ionos.it.

Le query al DNS che hanno già trovato risposta vengono me­mo­riz­za­te lo­cal­men­te nella cache del DNS sul proprio di­spo­si­ti­vo. In questo modo, ogni ri­so­lu­zio­ne ha sempre la stessa velocità.

Tuttavia, l’uso della cache DNS può anche provocare problemi, ad esempio, quando l’indirizzo IP ap­par­te­nen­te a un dominio è cambiato per uno spo­sta­men­to del server, ma il vecchio indirizzo è ancora me­mo­riz­za­to nella cache DNS locale. In questo caso, la con­nes­sio­ne al server si in­ter­rom­pe e la soluzione migliore è can­cel­la­re la cache DNS.

Content Delivery Network (CDN)

Le Content Delivery Network (in italiano “reti per la consegna di contenuti”) di­stri­bui­te a livello globale, con­ser­va­no gran parte dei dati dei siti web più popolari sui co­sid­det­ti Edge Nodes (“nodi pe­ri­fe­ri­ci”). Questi tra­smet­to­no i dati ai “margini” di Internet. I nodi sono situati a livello locale vicino all’utente e sono tec­ni­ca­men­te pro­get­ta­ti 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, so­prat­tut­to 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 Ja­va­Script per un uso ripetuto. Web cache moderne come Varnish e Redis me­mo­riz­za­no i dati di uso frequente ottenendo così tempi di risposta par­ti­co­lar­men­te bassi.

Il caso di nuova richiesta di dati, per la risposta basta soltanto un accesso molto veloce alla memoria. Questo riduce dra­sti­ca­men­te i tempi di risposta e il carico sui sistemi re­tro­stan­ti la cache, come il web server e il database. Altre web cache molto co­no­sciu­te sono OPcache e PHP Cache (APC).

Vai al menu prin­ci­pa­le