La GNU GPL non è sempre accondiscendente; dice di "no" ad alcune delle cose che a volte la gente vuole fare. Alcuni utenti affermano che sia negativo il fatto che la GPL "escluda" alcuni sviluppatori di software proprietario che "hanno bisogno d'essere portati nella comunità del software libero." Ma non siamo noi ad escluderli dalla nostra comunità; sono loro che scelgono di non entrare. Decidere di produrre software proprietario equivale a decidere di starne fuori. Esservi dentro significa cooperare con noi; non possiamo "portarli nella nostra comunità" se non vogliono unirsi a noi. Ciò che possiamo fare è offrire un incentivo ad unirsi a noi. È per far sì che il nostro software già prodotto sia un incentivo che la GNU GPL è stata pensata: "Se renderete il vostro software libero, potete utilizzare questo codice". Di certo in questo modo non si vincerà sempre, ma qualche volta sì. "Ricard Stallman"

Memcached è un software opensource che permette la gestione di una cache condivisa.

giovedì 15 luglio 2010

Memcached è un software opensource che permette la gestione di una cache condivisa.

L'utilizzo di tale software permette di alleggerire il carico per quanto riguardo il dispositivo che fornisce lo storage dati.

Per esempio nel caso dell'utilizzo di un database, se un software richiede parecchi dati e le query eseguite sono spesso le stesse, sarebbe inutile continuare ad eseguire richieste procedurali al DBMS per reperire i dati, quando si possono facilmente salvare in una cache.

L'utilizzo più comune di Memcached è legato al WEB e l'utilizzo di pagine dinamiche.
Un esempio potrebbe essere quello di un blog: il blog è una pagina internet con aggiornamenti più o meno frequenti che restituisce però, sempre un elenco di post.
L'idea è quindi quella di inserire in una cache il contenuto di questi post per sgravare il dbms da continue richieste dello stesso tipo.


Nel caso di blog con una frequenza di aggiornamento di un post al giorno si potrebbe settare il time to live del dato in cache di 24 ore, o, per essere sicuri di non perdere aggiornamenti essenziali, a 12 ore.


Ovviamente si possono applicare algoritmi di controllo per eventuali aggiornamenti come per esempio un controllo sulla data di salvataggio della cache confrontata con la data dell'ultimo aggiornamento della tabella dei post.


Vediamo ora un esempio pratico:

Code:

$SQL_SERVER = "127.0.0.1";
$SQL_USER = "user";
$SQL_PASS = "pass";
$SQL_DBNAME = "myblog";
$conn = mysql_connect($SQL_SERVER,$SQL_USER,$SQL_PASS);
mysql_select_db($SQL_DBNAME);

$memcache = new Memcache;

$memcache->connect($MEMCACHED_SERVER, $MEMCACHED_PORT);
if($memcache->get('data')==FALSE)
{
$memcache->set('data',time());
$ISSET_CACHE = FALSE;
}
else
{
$last_update = $memcache->get('data');
$ISSET_CACHE = TRUE;
}

$dati = array();

if($ISSET_CACHE)
{
$sql = "SELECT data FROM blog ORDER BY data DESC LIMIT 1;";
$res = mysql_query($sql);
$res = mysql_fetch_assoc($res);
if($res['data']>$last_update)
{
$sql = "SELECT title,testo,data FROM blog;";
$res = mysql_query($sql);
$i=0;
while($row=mysql_fetch_assoc($res))
{
$dati[] = $row;
$memcached->set($i.'_title',$row['title']);
$memcached->set($i.'_testo',$row['testo']);
$memcached->set($i.'_data',$row['data']);
}
$memcached->set('count',$i);
}
else
{
$counter = $memcached->get('count');
for($i=0;$i<$counter;$i++) { $dati[] = array( "title" => $memcached->get($i.'_title'),
"testo" => $memcached->get($i.'_testo'),
"data" => $memcached->get($i.'_data')
);
}
}
}
else
{
$sql = "SELECT title,testo,data FROM blog;";
$res = mysql_query($sql);
$i=0;
while($row=mysql_fetch_assoc($res))
{
$dati[] = $row;
$memcached->set($i.'_title',$row['title']);
$memcached->set($i.'_testo',$row['testo']);
$memcached->set($i.'_data',$row['data']);
}
$memcached->set('count',$i);
}

for($i=0;$i

?>

Un altro aspetto interessantissimo di Memcached è l'applicazione di questo servizio per la condivisione del pool di sessioni HTTP nel WEB clustering.


Infatti, con l'apposito modulo PHP, si può configurare come handler di gestione delle sessioni memcached.


Questa configurazione risulta estremamente comoda per mantenere attive le sessioni anche se il Web Server reale che gestisce la connessione cambia.
Infatti il pool delle sessioni risulta condiviso e la scrittura di esse viene effettuata atomicamente garantendo quindi la coerenza dei dati.

Per configurare questo tipo di handler per le sessioni basterà andare a scommentare le righe del file di configurazione del modulo PHP che gestiscono memcached.
In particolare nell'ambito Fedora/CentOS i file sono

Code:

/etc/php.d/memcache.ini
/etc/php.d/memcached.ini
nei quali andremo a scommentare le seguenti linee: Code:
session.save_handler=memcache
session.save_path="tcp://localhost:11211"

Ovviamente all'indirizzo localhost e sulla porta 11211 sarà in funzione il demone memcached.

Otterremo così un pool di sessione condiviso rendendo completamente trasparente per l'utente la sua posizione nel cluster.

fonte: Codice a Sbarre

Screenshots.




Se ti è piaciuto l'articolo , iscriviti al feed cliccando sull'immagine sottostante per tenerti sempre aggiornato sui nuovi contenuti del blog:

0 commenti:

I miei preferiti

Antipixels

WebShake – tecnologia iFeed Aggregatore di blog ”Giornale Aggregatore Blogstreet - dove il blog è di casa Vero Geek iwinuxfeed.altervista.org Paperblog Add to Technorati Favorites Directory dei blog italiani tutto blog BlogItalia.it - La directory italiana dei blog Feed XML offerto da BlogItalia.it BlogNews Il Bloggatore web counter Feedelissimo

Ultimi post pubblicati

Mutui & Finanza