Nell'ambito dell'elaborazione, la cache è un livello di storage dei dati ad alta velocità che memorizza un sottoinsieme di dati, in genere di natura temporanea, per rispondere alle richieste più rapidamente di quanto non sarebbe possibile accedendo ogni volta al percorso principale in cui si trovano i dati. Il caching permette di riutilizzare in modo efficiente dati già recuperati o elaborati. I dati nella cache vengono generalmente archiviati in hardware ad accesso rapido, ad esempio la RAM, e possono essere elaborati con l'ausilio di un componente software. Lo scopo principale della cache è aumentare le prestazioni di recupero dei dati riducendo la necessità di accedere al livello di storage sottostante, più lento. La cache sacrifica la capacità in favore della velocità, perciò in genere può memorizzare solo un sottoinsieme temporaneo di dati, mentre nei database i dati vengono memorizzati in modo completo e durevole.
La cache può essere utilizzata su diversi livelli e con tecnologie di vario tipo, tra cui sistemi operativi, livelli di rete (ad esempio reti per la distribuzione di contenuti e DNS), applicazioni Web e database.
Grazie alle elevate percentuali di richieste o IOPS (operazioni input/output al secondo) supportate dalla RAM e dai motori di caching in memoria, le prestazioni di recupero dei dati sono migliori e i costi su larga scala ridotti. Per operare su una scala altrettanto grande con database tradizionali e hardware basato su disco, sarebbero necessarie risorse aggiuntive. Tali risorse naturalmente farebbero lievitare i costi e comunque non raggiungerebbero gli stessi risultati in fatto di latenza che garantisce la cache in memoria.
La cache può essere utilizzata per ridurre in modo significativo la latenza e migliorare le prestazioni IOPS per i carichi di lavoro di applicazioni particolarmente gravosi in lettura, ad esempio portali di assistenza, videogiochi, soluzioni di condivisione di file e social network. Le informazioni memorizzate nella cache possono includere i risultati di query di database, calcoli complessi dal punto di vista computazionale, richieste e risposte API e Web artifact quali HTML o JavaScript e file di immagine. I carichi di lavoro con elevate esigenze di elaborazione che operano su set di dati, ad esempio motori di raccomandazione e simulazioni ad alte prestazioni, potranno inoltre trarre molti vantaggi da un livello di dati in memoria con funzione di caching. In tali applicazioni, è necessario accedere in tempo reale a set di dati di dimensioni molto grandi su più cluster di macchine, che possono coprire centinaia di nodi. Data la velocità dell'hardware, intervenire su tali dati in uno store basato su disco costituirebbe un collo di bottiglia significativo.
In un ambiente di elaborazione distribuito, un livello di caching dedicato consente l'esecuzione di sistemi e applicazioni con cicli di vita specifici indipendentemente dalla cache, senza il rischio di comprometterla. La cache verrebbe così utilizzata come livello centralizzato a cui accedere da diversi sistemi, ciascuno con il proprio ciclo di vita e la propria topologia. Si tratta di una soluzione particolarmente rilevante in sistemi i cui nodi delle applicazioni dispongono di scalabilità sia orizzontale sia verticale, applicabile in modo dinamico. Se la cache si trova nello stesso nodo dell'applicazione o dei sistemi che la utilizzano, la ricalibrazione potrebbe intaccare l'integrità della cache. Inoltre, quando viene impiegata la cache locale, i vantaggi si applicano esclusivamente alle applicazioni che usano dati in locale. In un ambiente di caching distribuito, i dati possono essere distribuiti su più server di cache e memorizzati in un percorso centralizzato a vantaggio di tutti i consumer.
| Livello | Lato client | DNS | Web | App | Database |
| Caso d'uso | Recupero più rapido di contenuti dai siti Web (browser o dispositivo) | Risoluzione di domini in IP | Recupero più rapido di contenuti da server Web o di applicazioni Gestione di sessioni Web (lato server) | Prestazioni delle applicazioni e accesso ai dati migliorati | Riduzione della latenza associata alle richieste di query di database |
| Tecnologie | Intestazioni di cache HTTP, browser | Server DNS | Intestazioni di cache HTTP, CDN, reverse proxy, acceleratori Web, store chiave-valore | Datastore chiave-valore, cache locale | Buffer di database, datastore chiave-valore |
| Soluzioni | Specifiche per browser | Amazon Route 53 | Amazon CloudFront, ElastiCache per Redis, ElastiCache per Memcached, soluzioni di partner | Framework di applicazioni, ElastiCache per Redis, ElastiCache per Memcached, soluzioni di partner | ElastiCache per Redis, ElastiCache per Memcached |
Quando viene implementato un livello di cache, è importante comprendere la durata dei dati memorizzati. La cache è funzionale quando offre una hit rate elevata, perciò quando la richiesta di ripristino individua i dati cercati. Un mancato riscontro si verifica quando i dati ricercati non sono presenti nella cache. È possibile applicare diversi tipi di controllo, ad esempio specificare il time-to-live o TTL, per decidere i termini della scadenza dei dati. Un altro elemento importante può essere la necessità o meno operare in un ambiente di caching a disponibilità elevata, esigenza che può essere soddisfatta con un motore in memoria, ad esempio Redis. In alcuni casi, un livello di storage dei dati in memoria può essere utilizzato come livello autonomo, non solo per la memorizzazione dei dati dal percorso principale. In questo scenario, è importante che per i dati nel motore in memoria siano definiti i tempi di recupero previsti o RTO (Recovery Time Objective), ovvero il tempo necessario per recuperare il sistema dopo un'interruzione, e i punti di recupero previsti o RPO (Recovery Point Objective), ovvero l'ultimo punto o transazione acquisiti in fase di ripristino, per determinarne l'eventuale idoneità. Per soddisfare tali requisiti, è possibile applicare diverse strategie di progettazione e verificare le caratteristiche dei diversi motori in memoria.
Amazon ElastiCache è un servizio Web che semplifica distribuzione, funzionamento e ridimensionamento di cache e datastore in memoria nel cloud. Si tratta di un servizio che potenzia le prestazioni delle applicazioni Web facilitando il recupero delle informazioni dai datastore gestiti in memoria, molto più rapide dei database basati su disco.
Scopri come implementare una strategia di caching efficace con questo whitepaper tecnico sul caching in memoria.
Poiché la memoria è di diversi ordini di grandezza più veloce rispetto ai dischi (magnetici o SSD), la lettura dei dati nella cache in memoria è estremamente rapida (inferiore al millisecondo). L'accesso ai dati è perciò significativamente più rapido, così come le prestazioni generali dell'applicazione.
Una singola istanza della cache è in grado di fornire centinaia di migliaia di IOPS (operazioni input/output al secondo) e può, potenzialmente, sostituire diverse istanze database, contribuendo alla riduzione dei costi. Si tratta di una soluzione particolarmente rilevante se la tariffa del database primario è basata sul throughput. In questo caso, il risparmio potrebbe essere di decine di punti percentuali.
Reindirizzando una porzione elevata del carico di lettura dal database di back-end al livello di caching in memoria, è possibile ridurre il carico che grava sul database ed evitare i rallentamenti sotto sforzo e le eventuali interruzioni nei momenti di picco.
Una problematica frequente, nelle applicazioni moderne, è come affrontare i picchi di utilizzo delle applicazioni. Ad esempio, i momenti di picco possono essere quelli a cui sono sottoposte le app di social network durante il Super Bowl o le elezioni, o ancora i siti di e-commerce durante il Black Friday. Il maggiore carico sul database provoca un aumento della latenza di accesso ai dati, perciò le prestazioni dell'applicazione diventano difficili da prevedere. L'elevato throughput della cache in memoria permette di mitigare questo problema.
In molte applicazioni, è facile che un piccolo sottoinsieme di dati, ad esempio il profilo di una celebrità o un prodotto molto venduto, ricevano più accessi rispetto agli altri dati. Alcune aree del database, perciò, potrebbero ricevere molte più richieste e quindi necessitare di maggiori risorse, a seconda dei requisiti di throughput stabilite per i dati con maggiori accessi. L'archiviazione di chiavi comuni in una cache in memoria limita la necessità di acquisire risorse in eccesso, fornendo al contempo prestazioni elevate e prevedibili per i dati più richiesti.
Oltre a offrire bassa latenza, i sistemi in memoria forniscono una frequenza di elaborazione delle richieste (IOPS) molto maggiore rispetto a quella di un database basato su disco con risorse analoghe. Una singola istanza può essere usata come cache ausiliaria distribuita per rispondere a centinaia di migliaia di richieste al secondo.
Iniziare a usare il caching nel cloud è semplice, grazie a un servizio completamente gestito come Amazon ElastiCache. Questa soluzione libera dalla pressione di dover configurare, gestire e amministrare la cache e permette di concentrare l'attenzione su ciò che offre valore all'impresa. Registrati oggi stesso per ottenere Amazon ElastiCache.

