Memcached

Performance elevate con Memcached

Memcached è un utilissimo strumento diffuso nel 2009 dalla Danga Interactive. Il suo obiettivo principale è quello di ridurre il carico sul database sfruttando direttamente la RAM disponibile sul server. I grandi colossi del web come Facebook, Wikipedia, Twitter, YouTube e WordPress sono i più famosi utilizzatori di Memcached, ma anche i siti meno conosciuti possono adottarlo per migliorare l’esperienza dei propri utenti.

Configurazione di Memcached

Per prima cosa è necessario andare sul sito ufficiale e scaricare l’ultima versione stabile disponibile. In Homepage è evidenziata di colore rosso sul lato destro. Assicuratevi di aver installato le librerie libevent e successivamente scompattate la cartella di Memcached. In questa cartella eseguite quindi i comandi:

./configure
make
make install

e se non visualizzate errori, procedete con l’avvio tramite il comando:

memcached -m 16 -p 15711 -u www-data -l 127.0.0.1 –d
  • -m: indica la quantità di RAM massima che il software può utilizzare;
  • -p: indica la porta di ascolto;
  • -u: ovvero l’utente;
  • -l: precede l’indirizzo IP sul quale Memcached sarà bindato
  • -d: serve per avviare il processo sotto forma di demone, in background.

Per avere una schermata con tutte le opzioni possibili, lanciate il comando: memcached -h

Integrare Memcached con PHP

Grazie anche all’utilizzo di questo software da parte dei Big di internet, ormai esistono le API per quasi tutti i linguaggi e database disponibili. In questa guida però vogliamo mostrarti come integrare Memcahced con PHP.

Prima di procedere però è necessario lanciare questo comando per installare l’estensione PECL:

pecl install memcache

Ora per connettersi a Memcached scrivi:

<?php
<?php
$memcached_host = "127.0.0.1";
$memcached_port = 15711;
$memcache = new Memcache;
$memcache->connect($memcached_host, $memcached_port);
?>
?>

Se ad esempio abbiamo questa funzione:

<?php
function getUserById($user_id)
{
    // recupera dal database i dati dell’utente
    $sql    = "SELECT * FROM users WHERE user_id = :user_id";
    $stmt   = $this->_db->prepare($sql);
    $result = $stmt->execute(array(":user_id" => $user_id));
    $user   = $stmt->fetch(PDO::FETCH_ASSOC);
    // restituisce il risultato
    return $user;
}
?>

dobbiamo impostare Memcached affinché i dati vengano chiesti direttamente alla cache di Memcached senza interrogare il database. Nel caso in cui questi dati non siano presenti dobbiamo indicare a Memcached di recuperali dal database e salvarli per restituirli all’utente. Questa regola può essere impostata così:

<?php
function getUserById($user_id)
{
    // controlla se l’utente è già presente in cache
    if($this->_cache->get('user'.$user_id) {
        // se lo trova, restituisce i dati
        return $this->_cache->get('user'.$user_id);
    }

    // recupera dal database i dati dell’utente
    $sql    = "SELECT * FROM users WHERE user_id = :user_id";
    $stmt   = $this->_db->prepare($sql);
    $result = $stmt->execute(array(":user_id" => $user_id));
    $user   = $stmt->fetch(PDO::FETCH_ASSOC);

    // salva i dati in memcached per la prossima volta
    $this->_cache->add('user'.$user_id, $user);

// restituisce il risultato
    return $user;
}
?>

Memcached: alcuni accorgimenti per la sicurezza

Non essendoci alcun sistema di autenticazione, è fondamentale proteggere il sistema assicurandosi innanzitutto che la porta d’ascolto sia accessibile solo a Memcached. Possiamo servirci di iptables per ovviare questo problema, le regole da aggiungere sono le seguenti:

iptables -A INPUT -s SERVER_IP –dport 15711 -j ACCEPT

iptables -A INPUT –dport 15711 -j DROP

La prima consente al server di accedere a Memcached, e va ripetuta per tutti gli indirizzi IP dei server; la seconda nega l’accesso a tutti gli IP non indicati precedentemente.

Sul fronte sicurezza recentemente è stata rilasciata l’autenticazione SASL, che deve essere abilitata nel caso in cui non sia possibile isolarsi attraverso il classico firewall. Per attivarla è necessario lanciare il comando

–enable-sasl e avviato col flag –s.

Lascia un commento

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