Memcached – 1

Sui sistemi che devono fornire contenuti web dinamici la cache diventa rapidamente un aspetto cruciale al crescere del traffico; su web infatti si possono raggiungere frequenze di accessi ai dati veramente notevoli. Per fortuna, anche se questo è sempre meno vero, c’è una fortissima sproporzione tra gli accessi in lettura e quelli in scrittura e questo permette notevoli semplificazioni nelle soluzione di questo problema.

Di fatto il modo migliore per gestire la massa degli accessi in lettura è l’utilizzo di un qualche sistema di cache. Cache che dovrà essere quanto possibile veloce e semplice. Memcached nasce proprio per questo scopo: permette di riservare su un server un’area di memoria, renderla accessibile via TCP e di salvare su memoria dei valori recuperabili successivamente sulla base di una chiave.

Per rimanere semplice e veloce, memcached mantiene i dati solo in memoria e non li scrive su disco, ne consegue che ogni volta che viene riavviato perde tutti i propri dati. Questo però è un compromesso assolutamente ragionevole per della cache.

Supponiamo ora di dover gestire un sito ad alto traffico e di renderci conto che il nostro database sta divenendo un collo di bottiglia per il nostro sistema. Decidiamo quindi di introdurre memcached e di riuscire in questo modo sia a migliorare le prestazioni del sito sia a ridurre notevolmete gli accessi al database. Nei mesi successivi il traffico sul nostro sito potrà quindi crescere ancora. Si è venuto a creare in questo modo un problema piuttosto insidioso: se il daemon memcached si dovesse riavviare, perderemmo la nostra cache e ci troveremmo con un database non più sufficiente a supportare il nostro sito: sarebbe quindi molto difficile far ripartire il sistema nel suo insieme.

In pratica, se si vogliono sfruttare veramente i vantaggi di memcached bisogna distribuire la cache su diversi server (tutti i server apache ad esempio) in modo tale che al riavvio di un demone memcached si perderebbe solo una parte della cache e il sovraccarico sui database sarebbe quindi contenuto.

I cluster di server memcached sono peculiari in quanto ogni server è un’ entità a se che si preoccupa solamente di immagazzinare e restituire i dati dalla propria memoria e non ha conoscenza del fatto di essere parte di un pool. La logica della gestione del pool è demandata completamente ai client.

Ogni client suddivide la cache in tante parti sulla base della conoscenza deila lista dei server del pool e si andrà a poi a connettere sul server corretto per il salvataggio o il recupero dei dati. L’algoritmo utilizzato per questa operazione è piuttosto interessante e sarà argomento di un altro post.

Un altro problema che si può presentare con questi sistemi deriva dal fatto che su molti siti web ci sono pagine molto accedute e pagine a basso traffico: su un portale probabilmente gran parte degli accessi saranno sulla homepage. Oggetti della cache che vengono utilizzati in queste pagine saranno quindi particolarmente critici e la perdita di uno di questi potrebbe essere un problema anche se percentualmente gran parte della cache è comunque disponibile.

Come detto gà più volte il daemon è piuttosto semplice e semplice è anche la sua configurazioni. La configurazione si riduce di fatto a scegliere:

    • la memoria da riservare
    • il numero massimo di connessioni accettabili
    • se salvare dei log su file

One thought on “Memcached – 1

Lascia un commento

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