Caratteristiche e quali sono le architetture di Caching in informatica

Caratteristiche e quali sono le architetture di Caching in informatica

Che cos’è il caching?

Il caching è una tecnica, che aiuta a portare una parte rilevante dei dati da elaborare in una posizione (memoria cache) più prossima al luogo dove saranno manipolati. Inizialmente sono state utilizzate all’interno dei sistemi operativi, distribuiti e non, al fine di accrescere le prestazioni del file system e accelerare le operazioni di Input/Output (I/O). Nell’ambito di questi sistemi le tecniche e le strategie di caching sono state ampiamente studiate ed ottimizzate. Negli ultimi anni tali tecniche sono tornate prepotentemente alla ribalta in seguito allo sviluppo ed alla diffusione delle reti telematiche, e di Internet in particolare. Il crescente ed inaspettato, almeno in termini di dimensioni, successo di Internet ha determinato la riscoperta di queste tecniche di ottimizzazione delle prestazioni, in quanto la capillare diffusione di questa rete ha ben presto sovraccaricato la sua struttura determinando un rapido declino delle prestazioni. Per rimediare a questo problema si è deciso di applicare ad Internet il concetto di caching.
Negli ultimi anni, inoltre, le tecniche di caching hanno assunto un ruolo fondamentale grazie alla formalizzazione del concetto di scalabilità, divenuto nel frattempo di fondamentale importanza per ogni tipo di applicazione delle tecnologie informatiche.

Caratteristiche e quali sono le architetture di Caching in informatica

Architetture di caching

In questo articolo informatico descriviamo architetture di cache più sofisticate e non necessariamente hardware. La necessità di definire architetture complesse nasce dalla volontà di applicare il concetto di caching a strutture più estese dei calcolatori (quali le reti telematiche), in cui l’organizzazione delle informazioni riveste quindi un’importanza cruciale al fine di ottenere prestazioni accettabili, dato che la vastità delle strutture impone tempi di recupero degli oggetti più lunghi.

Cache singole

L’architettura più semplice di caching è quella composta da una cache autonoma ed isolata sulla singola postazione (come per i processori), intesa come stazione di lavoro o terminale, o su ogni singolo client che viene eseguito sulla postazione. In questo modo ogni singola postazione può limitare il proprio traffico di rete. Si può pensare, ad esempio, ad una rete locale costituita da un server e da un certo numero di postazioni client che utilizzano tale server. Le varie postazioni possono usufruire di un proprio servizio di caching per limitare le comunicazioni con il server.

Una struttura di questo tipo però porta inevitabilmente ad una duplicazione di risorse che, a lungo andare, può rivelarsi molto onerosa (si pensi alla quantità di informazioni duplicate, memorizzate nelle varie cache, che hanno generato traffico parzialmente evitabile). Inoltre, può capitare che la cache di una postazione disponga del documento cercato dalla cache di un’altra postazione ma quest’ultima sia costretta a generare un cache miss (si ha un cache miss quando la cache non è in grado di soddisfare una richiesta) dato che le due non possono comunicare. Un’architettura di questo tipo presenta il vantaggio della semplicità ma è difficilmente applicabile a strutture molto estese, come quelle tipiche delle applicazioni distribuite, a causa della sua ridotta efficienza in termini di traffico.

Quest’architettura può essere applicata in svariati modi grazie alla sua semplicità. Si può utilizzare, nell’ambito dei sistemi operativi, all’interno dei singoli processi client, attraverso un processo di gestione della cache che fornisca il servizio a tutti i client o si può implementare a livello di postazione all’interno delle reti, in maniera tale da rendere il servizio trasparente ai vari client. In questo caso, ogni client provveda a gestire autonomamente la propria cache, realizzata all’interno del proprio spazio. Nel secondo caso, invece, il processo di gestione della cache interagisce autonomamente con il disco al fine di fornire ai vari processi client il servizio di caching, qualora questi lo richiedano. I client non sono obbligati a far uso del caching ma possono anche funzionare senza questo servizio interagendo direttamente con il disco attraverso il file system. Così facendo si ha il vantaggio che la cache sopravvive alla morte dei processi client. Nel terzo caso, il caching è realizzato sulle postazioni client di una rete (locale o meno) direttamente all’interno del sistema operativo di rete di ogni postazione (è per questo motivo che i client interagiscono con la cache e non con il disco5 della postazione). In questo caso, attraverso la cache è possibile recuperare documenti del server senza accessi alla rete.

Cache gerarchiche

Una prima evoluzione della struttura precedente, che accresce l’efficienza e di conseguenza riduce i costi a parità di prestazioni, si ha con l’utilizzo del concetto di gerarchia introdotto per le memorie. Utilizzando una gerarchia si possono avere ottenere vantaggi in termini prestazionali.
Una cache gerarchica, ad esempio organizzata con livelli a base geografica, può servire molti più utenti ed avere molti più accessi della cache locale. Se posizionate strategicamente, queste cache possono avere grandi capacità di memorizzazione e collegamenti di rete molto veloci, così che l’accesso alle loro informazioni risulti veloce almeno quanto gli accessi in una rete LAN. Queste cache potrebbero inoltre essere utilizzate come punto di distribuzione dove gli “editori” automaticamente depositano le informazioni. Intercettando richieste analoghe di utenti diversi, un cache server (o proxy) può essere in grado di soddisfare le richieste di più utenti attraverso una sola connessione con il sito remoto, nell’ipotesi che tali richieste giungano al proxy in un breve lasso di tempo, cosi che la copia del documento nella cache possa ritenersi ancora conforme con l’originale. Per ottenere la maggior riduzione di traffico sulla rete, la raccolta di richieste individuali dovrebbe essere eseguita il più vicino possibile agli utenti. Quando una cache riceve una richiesta, questa è confrontata con le richieste recenti. Se una richiesta per quel documento si è già verificata, allora la cache restituisce la propria copia del documento.

Il vantaggio nell’uso di una gerarchia di cache si ha quando accadono cache miss; in tal caso, infatti, le varie cache possono passare le proprie richieste inevase al livello superiore della struttura così da recuperare l’oggetto desiderato da una postazione comunque più vicina rispetto al server proprietario dell’oggetto. In questo modo è possibile costruire una gerarchia dove ogni livello “serva” una comunità molto vasta di utenti. I vantaggi principali di quest’architettura sono perciò la possibilità di aggregare un alto numero di utenti e la possibilità, che ogni cache ha, di sfruttare la cache di livello superiore (il genitore) in modo tale da accrescere la capacità di memorizzazione della singola cache. Il problema principale di questa struttura è il costo della replicazione delle informazioni nelle cache6 e l’overhead generato dalla gerarchia. Per cache semplici la larghezza della gerarchia è un problema serio dato che cache allo stesso livello non possono comunicare tra loro e quindi la duplicazione dei dati non può essere attenuata dalla collaborazione.

Cache cooperanti o rete di cache (Cache Mesh)

Le Cache cooperanti o rete di cache (Cache Mesh) è, attualmente, l’ultima evoluzione delle architetture di caching, introdotta per rendere le implementazioni del caching nelle reti di telecomunicazioni più efficienti. È stata introdotta dal progetto Harvest dell’università del Colorado che ha anche sviluppato l’Internet Cache Protocol (ICP) per supportare questa architettura (ultimamente si è proposto il Cache Array Routing Protocol (CARP), come alternativa a ICP per supportare questa architettura).

L’architettura delle cache cooperanti è una evoluzione della gerarchia ed introduce una nuova “figura” nella struttura, denominata sibling. La relazione che istituisce una famiglia di sibling si affianca alla relazione di discendenza, che determina legami del tipo padre–figlio (parent-son), per permettere ai vari oggetti dell’architettura di colloquiare anche orizzontalmente (ossia consente a proxy appartenenti allo stesso livello gerarchico di interagire tra loro). Da notare che, teoricamente, la nuova relazione potrebbe collegare cache di livelli differenti. La selezione del sibling con cui colloquiare può essere fatta tramite un confronto fra le specifiche della richiesta da soddisfare e le caratteristiche dei vari sibling, alcuni dei quali potrebbero applicare strategie di aggregazione di dominio o tematiche dei documenti. Si è quindi passati dalla struttura ad albero, tipica delle gerarchie, a quella a grafo. Tuttavia, i software che consentono di gestire una struttura di questo tipo differenziano l’utilizzo delle due relazioni, al fine di evitare cicli infiniti (loop). La relazione di discendenza è, solitamente, utilizzata per risolvere cache miss mentre i sibling sono utilizzati per bilanciare il carico tra le varie cache della struttura. Attualmente ICP è supportato solo dai software di cache che hanno avuto origine con il progetto Harvest.

Il funzionamento di questa struttura è, ovviamente, leggermente più complesso di quello delle architetture precedenti. Ogni proxy che appartiene alla rete di cache possiede l’elenco dei propri sibling, a cui può inviare messaggi IPC, e del proprio proxy-padre del livello superiore della gerarchia. Quando una richiesta ad un proxy della struttura genera un cache miss, il proxy stesso invia, in parallelo, un messaggio ICP ai propri sibling (e’ anche possibile indirizzare i messaggi ICP sulla base delle caratteristiche della richiesta che ha generato il cache miss).

  1. Se il proxy riceve, da almeno un sibling, una risposta affermativa (il sibling può soddisfare la richiesta) allora avvia il recupero dell’oggetto tramite una normale connessione con il primo sibling che ha risposto affermativamente. Se l’oggetto della richiesta è di dimensioni ridotte, allora può essere spedito dai sibling al proxy direttamente con il pacchetto ICP di risposta ed in questo caso non è necessaria la normale connessione HTTP.
  2. Se, al contrario, il proxy non ottiene nessuna risposta positiva dai sibling allora inoltra la richiesta al livello superiore della gerarchia proprio come avveniva nella struttura gerarchica.

Una gerarchia di parent e sibling implementata con ICP è molto meno rigida dell’albero imposto dalle cache gerarchiche. La capacità di inviare richieste multiple ai sibling dà accesso ai documenti memorizzati dai cache server dello stesso livello gerarchico. È appunto questa la differenza sostanziale tra cache cooperanti e cache semplici. Da notare che un proxy può essere configurato per mantenere copie locali degli oggetti ottenuti dai sibling, oppure può semplicemente “spedire” a questi ultimi le successive richieste per tali oggetti. Quest’ultima opzione riduce notevolmente la quantità di repliche dei documenti e le richieste di disco di ogni cache server, ma incrementa la quantità di traffico tra gli stessi. Le cache cooperanti non hanno effetto quando il documento è trovato nella cache di primo livello.
Il vantaggio principale di quest’architettura è l’aumento della probabilità di trovare una copia del documento più vicino, al richiedente, dell’originale (attraverso la relazione sibling che aumenta il numero di proxy con cui colloquiare) e, di conseguenza, la riduzione del traffico sulla rete. Gli svantaggi sono la complessità di gestione di una struttura a grafo ed il pericolo che si verifichino dei cicli in fase di “risoluzione” della richiesta.

Pubblicato da Vito Lavecchia

Lavecchia Vito Ingegnere Informatico (Politecnico di Bari) Email: [email protected] Sito Web: https://vitolavecchia.altervista.org

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *