Memcached è spesso uti­liz­za­to allo scopo di mi­glio­ra­re le pre­sta­zio­ni di ap­pli­ca­zio­ni dinamiche basate su database. Si tratta di un database in-memory grazie al quale viene meno la necessità di accedere al disco rigido per re­cu­pe­ra­re i dati presenti nella memoria RAM, con­sen­ten­do allo stesso tempo di ottenere una si­gni­fi­ca­ti­va 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, uti­liz­za­no Memcached per mi­glio­ra­re l’espe­rien­za di na­vi­ga­zio­ne dei propri utenti. Ma come funziona esat­ta­men­te questa soluzione open source e come si presenta la sua im­ple­men­ta­zio­ne? 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 pre­sta­zio­ni nato dal lavoro della società Danga In­te­rac­ti­ve, che per quasi vent’anni ne ha portato avanti lo sviluppo per mi­glio­ra­re la velocità del portale Li­ve­Jour­nal. Memcached è un server di cache creato allo scopo di ridurre, so­stan­zial­men­te az­ze­ran­do­li, i tempi di accesso al database con­te­stual­men­te all’utilizzo di ap­pli­ca­zio­ni 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 è rap­pre­sen­ta­to dalla sua grande in­tui­ti­vi­tà e sem­pli­ci­tà di utilizzo e di in­stal­la­zio­ne, con­fi­gu­ra­zio­ne e gestione. È un software open source di­stri­bui­to con licenza BSD e può quindi essere uti­liz­za­to, mo­di­fi­ca­to o copiato li­be­ra­men­te.

Com’è strut­tu­ra­ta l’ar­chi­tet­tu­ra di Memcached?

L’ar­chi­tet­tu­ra di Memcached presenta una struttura re­la­ti­va­men­te semplice: ricorda un sistema di database di­stri­bui­to ed è co­sti­tui­to dall’ap­pli­ca­zio­ne, da una libreria client e da un pool di istanze Memcached in­stal­la­bi­li sulla memoria prin­ci­pa­le del server in un numero qualsiasi scelto in base alle pre­fe­ren­ze dell’utente. La soluzione migliore è quella di attivare un’istanza su ogni server che necessita di spazio in memoria; in questo modo, le istanze ac­qui­si­ran­no lo spazio libero di­spo­ni­bi­le per la cache. L’in­ter­fac­cia tra la ri­spet­ti­va ap­pli­ca­zio­ne e Memcached è la libreria client, che prende i dati da me­mo­riz­za­re e li carica su un server di­spo­ni­bi­le. Grazie alla sua ar­chi­tet­tu­ra multi-thread, Memcached è inoltre in grado di uti­liz­za­re diversi core di processo con­tem­po­ra­nea­men­te.

N.B.

Anche Redis, come Memcached, è una memoria dati in-memory che vanta grande po­po­la­ri­tà. Tuttavia, mentre Memcached si distingue per la sua sem­pli­ci­tà, Redis offre una varietà di utilizzi e ca­rat­te­ri­sti­che. Nel nostro articolo Memcached vs. Redis mettiamo a confronto i due software e ne ana­liz­zia­mo nel dettaglio aspetti in comune e dif­fe­ren­ze.

Come funziona Memcached?

I database tra­di­zio­na­li me­mo­riz­za­no i dati su un disco rigido, pre­fe­ri­bil­men­te un disco a stato solido (SSD). Ciò comporta lunghi tempi di accesso quando si ri­chia­ma­no i dati nel database. Man­te­nen­do i dati in memoria, così che siano sempre di­spo­ni­bi­li e ri­chia­ma­bi­li istan­ta­nea­men­te, Memcached annulla questi tempi di attesa, mi­glio­ran­do la velocità delle ap­pli­ca­zio­ni dinamiche basate su banche dati. Sebbene sia possibile me­mo­riz­za­re i dati per periodi di tempo anche lunghi, la maggior parte dei dati viene au­to­ma­ti­ca­men­te can­cel­la­ta una volta trascorso un de­ter­mi­na­to in­ter­val­lo. 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 esat­ta­men­te il processo di ar­chi­via­zio­ne?

Quando ci si riferisce a Memcached, si è soliti parlare di un database in-memory chiave-valore. At­tra­ver­so i pro­to­col­li TCP e IP, viene prima stabilita una con­nes­sio­ne con il server. Se un utente vuole re­cu­pe­ra­re alcuni dati, Memcached verifica se questi siano di­spo­ni­bi­li nella cache. Se così non è, i dati richiesti vengono re­cu­pe­ra­ti dalla memoria prin­ci­pa­le. Il client fornisce quindi i ri­spet­ti­vi dati con un valore chiave oppure questi vengono se­ria­liz­za­ti dalla libreria del programma. Uti­liz­zan­do un algoritmo di hash, il client seleziona quindi su quale server Memcached verranno me­mo­riz­za­ti i dati sotto forma di stringhe. Di seguito i cinque punti più im­por­tan­ti che ca­rat­te­riz­za­no Memcached:

  • I dati vengono inoltrati a un solo server.
  • I dati vengono me­mo­riz­za­ti sotto forma di coppie chiave-valore.
  • I diversi server non con­di­vi­do­no dati tra loro.
  • I server me­mo­riz­za­no i dati solo nella memoria RAM.
  • Se lo spazio di­spo­ni­bi­le risulta in­suf­fi­cien­te, il server scarta i dati più vecchi.

Quali sono i vantaggi e gli svantaggi di Memcached?

Se Memcached rap­pre­sen­ti la migliore soluzione di cache oppure no dipende dai requisiti e dalla com­ples­si­tà della ri­spet­ti­va ap­pli­ca­zio­ne. L’ar­chi­via­zio­ne tem­po­ra­nea dei dati si rivela par­ti­co­lar­men­te utile, per esempio, per le ap­pli­ca­zio­ni web con traffico elevato e le pagine che accedono a enormi database. Oltre a molti vantaggi, Memcached presenta na­tu­ral­men­te anche alcuni possibili svantaggi. Li il­lu­stria­mo di seguito:

Vantaggi Svantaggi
Tempi di risposta estre­ma­men­te brevi grazie alla me­mo­riz­za­zio­ne dei valori in memoria Memorizza i dati solo tem­po­ra­nea­men­te e li perde quando un’istanza di Memcached non funziona cor­ret­ta­men­te
L’ar­chi­tet­tu­ra multi-thread permette di scalare ver­ti­cal­men­te la capacità del computer I dati non possono essere vi­sua­liz­za­ti, il che rende difficile il debugging
Soluzione open source dalla com­pro­va­ta af­fi­da­bi­li­tà con memoria dati aperta La lunghezza dei valori della chiave è limitata a 250 caratteri (1 MB)
Facilità d’uso e fles­si­bi­li­tà nello sviluppo di ap­pli­ca­zio­ni La mancanza di mec­ca­ni­smi di sicurezza richiede un firewall ag­giun­ti­vo
Supporta formati di dati aperti e i client e i linguaggi di pro­gram­ma­zio­ne più comuni Non ri­don­dan­te, ovvero nessuna sicurezza contro i mal­fun­zio­na­men­ti tramite mirroring o backup dei dati

Dove viene uti­liz­za­to Memcached?

Le fun­zio­na­li­tà di Memcached includono il caching e la me­mo­riz­za­zio­ne dei dati di sessione. Il caching consente di accedere a elementi presenti nella cache come file, metadati e immagini alla velocità della luce, per­met­ten­do la sca­la­bi­li­tà a un costo contenuto in caso di aumento del carico di lavoro e mi­glio­ran­do le pre­sta­zio­ni dell’ap­pli­ca­zio­ne. La memoria in-memory è inoltre uti­liz­za­ta dagli svi­lup­pa­to­ri per gestire i dati di sessione come i profili utente o lo stato della sessione a livello di Internet; ciò pre­sup­po­ne, tuttavia, che la per­si­sten­za dei dati non co­sti­tui­sca un criterio im­por­tan­te. Nella maggior parte dei casi, Memcached rap­pre­sen­ta una buona soluzione quando le ap­pli­ca­zio­ni ri­chie­do­no una cache ad alte pre­sta­zio­ni 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 sca­la­bi­li­tà e la pos­si­bi­li­tà di sup­por­ta­re tutte le prin­ci­pa­li API e i linguaggi di pro­gram­ma­zio­ne, tra cui Ruby, Java, Ja­va­Script, Python, Go, PHP, C, C++, C# e Node.js. Inoltre, il processo di in­stal­la­zio­ne su un sistema operativo Windows o Unix non cela par­ti­co­la­ri dif­fi­col­tà. Il demone Memcached è reso di­spo­ni­bi­le per il download gratuito da Danga In­te­rac­ti­ve. Oltre al pacchetto per svi­lup­pa­to­ri giusto, avrete bisogno anche di una libreria libevent che consenta la notifica di eventi asincroni. Al termine dell’in­stal­la­zio­ne si dovranno settare diverse opzioni di con­fi­gu­ra­zio­ne per client e server a seconda del relativo lin­guag­gio di pro­gram­ma­zio­ne.

La ca­rat­te­ri­sti­ca di Memcached di essere un progetto open source ne ha favorito a lungo l’uso e la dif­fu­sio­ne all’interno di una grande community, con il vantaggio rap­pre­sen­ta­to dalla pos­si­bi­li­tà di accedere con facilità a in­for­ma­zio­ni det­ta­glia­te su ap­pli­ca­zio­ni, am­mi­ni­stra­zio­ne e ri­so­lu­zio­ne dei problemi online per varie API e sistemi operativi.

Vai al menu prin­ci­pa­le