Memcached in breve: funzione e utilizzo
Memcached è spesso utilizzato allo scopo di migliorare le prestazioni di applicazioni dinamiche basate su database. Si tratta di un database in-memory grazie al quale viene meno la necessità di accedere al disco rigido per recuperare i dati presenti nella memoria RAM, consentendo allo stesso tempo di ottenere una significativa riduzione sia del carico sui sistemi di back end sia della latenza. YouTube, Facebook, Twitter e Wikipedia, per citare alcuni tra i siti web più noti, utilizzano Memcached per migliorare l’esperienza di navigazione dei propri utenti. Ma come funziona esattamente questa soluzione open source e come si presenta la sua implementazione? In questo articolo scoprite tutto quello che c’è da sapere su questo popolare sistema di cache.
Che cos’è Memcached?
Memcached è il nome di un sistema di cache ad alte prestazioni nato dal lavoro della società Danga Interactive, che per quasi vent’anni ne ha portato avanti lo sviluppo per migliorare la velocità del portale LiveJournal. Memcached è un server di cache creato allo scopo di ridurre, sostanzialmente azzerandoli, i tempi di accesso al database contestualmente all’utilizzo di applicazioni web dinamiche che fanno uso di banche di dati. Memcached assolve a questo scopo grazie a una memoria dati in-memory in grado di fornire elementi salvati nella cache agli utenti del sito web in tempi molto brevi. Un ulteriore punto a favore di Memcached è rappresentato dalla sua grande intuitività e semplicità di utilizzo e di installazione, configurazione e gestione. È un software open source distribuito con licenza BSD e può quindi essere utilizzato, modificato o copiato liberamente.
Com’è strutturata l’architettura di Memcached?
L’architettura di Memcached presenta una struttura relativamente semplice: ricorda un sistema di database distribuito ed è costituito dall’applicazione, da una libreria client e da un pool di istanze Memcached installabili sulla memoria principale del server in un numero qualsiasi scelto in base alle preferenze dell’utente. La soluzione migliore è quella di attivare un’istanza su ogni server che necessita di spazio in memoria; in questo modo, le istanze acquisiranno lo spazio libero disponibile per la cache. L’interfaccia tra la rispettiva applicazione e Memcached è la libreria client, che prende i dati da memorizzare e li carica su un server disponibile. Grazie alla sua architettura multi-thread, Memcached è inoltre in grado di utilizzare diversi core di processo contemporaneamente.
Anche Redis, come Memcached, è una memoria dati in-memory che vanta grande popolarità. Tuttavia, mentre Memcached si distingue per la sua semplicità, Redis offre una varietà di utilizzi e caratteristiche. Nel nostro articolo Memcached vs. Redis mettiamo a confronto i due software e ne analizziamo nel dettaglio aspetti in comune e differenze.
Come funziona Memcached?
I database tradizionali memorizzano i dati su un disco rigido, preferibilmente un disco a stato solido (SSD). Ciò comporta lunghi tempi di accesso quando si richiamano i dati nel database. Mantenendo i dati in memoria, così che siano sempre disponibili e richiamabili istantaneamente, Memcached annulla questi tempi di attesa, migliorando la velocità delle applicazioni dinamiche basate su banche dati. Sebbene sia possibile memorizzare i dati per periodi di tempo anche lunghi, la maggior parte dei dati viene automaticamente cancellata una volta trascorso un determinato intervallo. Questo avviene perché Memcached è una semplice cache e non un database in senso classico e i dati meno richiesti vengono rimossi non appena non vi è più spazio per i nuovi elementi. Ma come funziona esattamente il processo di archiviazione?
Quando ci si riferisce a Memcached, si è soliti parlare di un database in-memory chiave-valore. Attraverso i protocolli TCP e IP, viene prima stabilita una connessione con il server. Se un utente vuole recuperare alcuni dati, Memcached verifica se questi siano disponibili nella cache. Se così non è, i dati richiesti vengono recuperati dalla memoria principale. Il client fornisce quindi i rispettivi dati con un valore chiave oppure questi vengono serializzati dalla libreria del programma. Utilizzando un algoritmo di hash, il client seleziona quindi su quale server Memcached verranno memorizzati i dati sotto forma di stringhe. Di seguito i cinque punti più importanti che caratterizzano Memcached:
- I dati vengono inoltrati a un solo server.
- I dati vengono memorizzati sotto forma di coppie chiave-valore.
- I diversi server non condividono dati tra loro.
- I server memorizzano i dati solo nella memoria RAM.
- Se lo spazio disponibile risulta insufficiente, il server scarta i dati più vecchi.
Quali sono i vantaggi e gli svantaggi di Memcached?
Se Memcached rappresenti la migliore soluzione di cache oppure no dipende dai requisiti e dalla complessità della rispettiva applicazione. L’archiviazione temporanea dei dati si rivela particolarmente utile, per esempio, per le applicazioni web con traffico elevato e le pagine che accedono a enormi database. Oltre a molti vantaggi, Memcached presenta naturalmente anche alcuni possibili svantaggi. Li illustriamo di seguito:
Vantaggi | Svantaggi |
---|---|
Tempi di risposta estremamente brevi grazie alla memorizzazione dei valori in memoria | Memorizza i dati solo temporaneamente e li perde quando un’istanza di Memcached non funziona correttamente |
L’architettura multi-thread permette di scalare verticalmente la capacità del computer | I dati non possono essere visualizzati, il che rende difficile il debugging |
Soluzione open source dalla comprovata affidabilità con memoria dati aperta | La lunghezza dei valori della chiave è limitata a 250 caratteri (1 MB) |
Facilità d’uso e flessibilità nello sviluppo di applicazioni | La mancanza di meccanismi di sicurezza richiede un firewall aggiuntivo |
Supporta formati di dati aperti e i client e i linguaggi di programmazione più comuni | Non ridondante, ovvero nessuna sicurezza contro i malfunzionamenti tramite mirroring o backup dei dati |
Dove viene utilizzato Memcached?
Le funzionalità di Memcached includono il caching e la memorizzazione dei dati di sessione. Il caching consente di accedere a elementi presenti nella cache come file, metadati e immagini alla velocità della luce, permettendo la scalabilità a un costo contenuto in caso di aumento del carico di lavoro e migliorando le prestazioni dell’applicazione. La memoria in-memory è inoltre utilizzata dagli sviluppatori per gestire i dati di sessione come i profili utente o lo stato della sessione a livello di Internet; ciò presuppone, tuttavia, che la persistenza dei dati non costituisca un criterio importante. Nella maggior parte dei casi, Memcached rappresenta una buona soluzione quando le applicazioni richiedono una cache ad alte prestazioni e su larga scala.
Muovere i primi passi in Memcached
I maggiori punti di forza di Memcached sono senza ombra di dubbio la sua velocità, la scalabilità e la possibilità di supportare tutte le principali API e i linguaggi di programmazione, tra cui Ruby, Java, JavaScript, Python, Go, PHP, C, C++, C# e Node.js. Inoltre, il processo di installazione su un sistema operativo Windows o Unix non cela particolari difficoltà. Il demone Memcached è reso disponibile per il download gratuito da Danga Interactive. Oltre al pacchetto per sviluppatori giusto, avrete bisogno anche di una libreria libevent che consenta la notifica di eventi asincroni. Al termine dell’installazione si dovranno settare diverse opzioni di configurazione per client e server a seconda del relativo linguaggio di programmazione.
La caratteristica di Memcached di essere un progetto open source ne ha favorito a lungo l’uso e la diffusione all’interno di una grande community, con il vantaggio rappresentato dalla possibilità di accedere con facilità a informazioni dettagliate su applicazioni, amministrazione e risoluzione dei problemi online per varie API e sistemi operativi.