Memcached: installiamo e configuriamo il CMS per velocizzarlo!


Postato in data giugno 29th, da Danilo Stefani in Blog. No Comments

Memcached è un sistema cache in RAM a oggetti distribuiti, gratis e open-source. E’ stato sviluppato da “Danga Interactive” per migliorare la velocità del portale “LiveJournal” che ancora oggi è uno dei domini che usano tale sistema di cache (tra i molti cito “Wikipedia”, “Flickr”, “WordPress.com”). Sito ufficiale.Memcached logo

L’idea è quella di memorizzare in RAM piccoli frammenti di dati che vengono chiamati molto spesso, come risultati di chiamate di database o chiamate API o rendering di intere pagine.
Essendo la RAM una memoria molto veloce, tali chiamate verranno effettuate solamente una volta (la prima volta) e saranno memorizzate in RAM da memcached che le “servirà” direttamente invece che farle nuovamente processare.
Risparmio in termini di tempo di attesa e CPU elevatissimo, soprattutto se si ha il problema di memorizzare tanti dati in cache (in termini di megabyte, basta pensare ad uno dei portali sopra citati).

Ormai quasi tutti i CMS più diffusi (wordpress tramite plugin aggiuntivo, joomla, prestashop) hanno implementato il supporto a questa cache…per nosta fortuna è praticamente tutto pronto :) Bastano pochi click.

INSTALLAZIONE

Se hai una VPS/Cloud o server dedicato presso di noi con “Intrepid Support” attivo ti basta inviare una richiesta al reparto Supporto, effettueremo noi l’installazione di memcached e la configurazione del server :) Se l’Intrepid Support ti ha già installato memcached…puoi andare subito in fondo alla guida, direttamente alla configurazione del tuo CMS!

Per installare il demone bastano pochi passi in tutti gli ambienti:

– CentOS/Fedora/Red HAT:

# yum install memcached

– Ubuntu/debian

$ sudo apt-get install memcached

E’ anche possibile compilare manualmente dai sorgenti ufficiali. Per prima cosa installa il pacchetto “libevent-devel” (compilando il sorgente oppure con yum/apt-get) e successivamente scarica e compila:

$ wget https://memcached.org/latest
$ tar -zxf memcached-1.x.x.tar.gz
$ cd memcached-1.x.x
$ ./configure –prefix=/usr/local/memcached
$ make && make test && sudo make install

Non scordarti di impostare il demone per avviarsi automaticamente:

CentOS 6 / Ubuntu / debian

# chkconfig memcached on

CentOS 7:

# systemctl enable memcached.service

CONFIGURAZIONE

Il file di configurazione è /etc/sysconfig/memcached e non devi dimenticare di inserire questo:

OPTIONS=”-l 127.0.0.1″

Tale riga è molto importante, fa in modo che vengano accettate chiamate verso il demone solamente da “localhost” (127.0.0.1) quindi solo ed esclusivamente dal server stesso. Visto che i dati non sono cryptati, se memcached accettasse richieste anche dall’esterno, sarebbe molto facile rubare i dati! Quindi attenzione!

I due parametri “MAXCONN” e “CACHESIZE” sono rispettivamente le massime connessioni che il demone può supportare e la massima RAM che può usare. Questi parametri vanno impostati in base alle risorse del server (più connessioni supportate = più CPU usata, più cache può scrivere = più RAM usata dal demone) e in base alle visite che il dominio riceve.

Manca solo la libreria PHP “memcached” e potrai usare il demone via PHP o direttamente nella configurazione dei CMS.

Server con pannello cPanel:

# pecl install memcached

altrimenti dal WHM sezione “Module Installers” —> “PHP Pecl”

Server con pannello Plesk:

Installa i seguenti pacchetti:

CentOS 6:

# yum install plesk-php56-devel zlib-devel libmemcached10-devel gcc

CentOS 7:

# yum install plesk-php56-devel zlib-devel libmemcached-devel gcc

Adesso devi installare il modulo:

# /opt/plesk/php/5.6/bin/pecl install memcache

Cambia “5.6” in base al PHP che stai usando.

Se non hai un pannello di controllo installa il pacchetto del PHP dai repo, esempio

# yum install php5-memcached

questo cambia in base al vostro sistema e come avete installato PHP.

Siamo pronti!

# service memcached start

Possiamo controllare il demone tramite una chiamata in telnet sulla porta 11211 (se avete lasciato quella di default) e scrivendo “stats”:

# telnet localhost 11211
Trying 127.0.0.1…
Connected to localhost.
Escape character is ‘^]’.
stats
STAT pid 6144
STAT uptime 2052736
STAT time 1497951631
STAT version 1.4.15
STAT libevent 2.0.21-stable
STAT pointer_size 64
STAT rusage_user 31.555958
STAT rusage_system 30.582629
STAT curr_connections 5
STAT total_connections 664
STAT connection_structures 15
STAT reserved_fds 20
STAT cmd_get 658
STAT cmd_set 3176
STAT cmd_flush 0
STAT cmd_touch 0
STAT get_hits 588
STAT get_misses 70
STAT delete_misses 5
STAT delete_hits 659
STAT incr_misses 0
STAT incr_hits 0
STAT decr_misses 0
STAT decr_hits 0
STAT cas_misses 0
STAT cas_hits 0
STAT cas_badval 0
STAT touch_hits 0
STAT touch_misses 0
STAT auth_cmds 0
STAT auth_errors 0
STAT bytes_read 33570446
STAT bytes_written 31930434
STAT limit_maxbytes 536870912
STAT accepting_conns 1
STAT listen_disabled_num 0
STAT threads 4
STAT conn_yields 0
STAT hash_power_level 16
STAT hash_bytes 524288
STAT hash_is_expanding 0
STAT bytes 74434
STAT curr_items 9
STAT total_items 1313
STAT expired_unfetched 52
STAT evicted_unfetched 0
STAT evictions 0
STAT reclaimed 73
END

Ora devi solamente configurare il tuo CMS in modo da usare tale cache.

WORDPRESS

Installa il plugin “W3 total cache”, vai in “Performance” —> “General Settings”. In tutte le sezioni puoi spuntare “Enable” e scegliere “Memcached” nel “metodo” di cache come da immagini qui sotto (clicca sull’immagine per vederla interamente).

 

wordpress memcached w3tc

wordpress memcached w3tc 2

 

Clicca su “Save all settings” e finito :) Giusto qualche secondo!

JOOMLA

Effetta il login all’admin di Joomla (di default http://www.tuodominio.it/administrator ) e clicca su

Sitema —> Configurazione Globale —> Sistema

qui troverai “Impostazioni Cache”. Imposta “memcache” su “Gestore cache” e il resto come da immagine sotto:

joomla memcached

Click su “Salva” in alto…Fatto :) Anche qui velocissimo!

PRESTASHOP 1.7

Accedi alla parte Admin e clicca su

“Parametri avanzati” —> “Prestazioni”

In fondo alla pagina, nella sezione “cache”, abilita la cache stessa impostando “Sì” su “Utilizza cache”. Scegli “memcached” e fai click su “Aggiungi server” così da aggiungere il demone come da immagine:

prestashop memcached 1

Click su “Aggiungi server” così da far salvare l’impostazione. Ritorna in fondo alla pagina e ora, impostando “utilizza cache” su sì, potrai vedere il “server” già aggiunto.
prestashop memcached 2

Click su “Salva” in basso a destra e finito!

MAGENTO 2

La compatibilità di Magento con memcached è solo per alcune chiamate API, chiamate al database e di oggetti (non viene effettuata la cache delle pagine ad esempio).

Devi modificare il file “app/etc/env.php” (dentro la cartella dove hai installato il CMS). Quindi apri il file (consiglio il programma “NotePad++” per windows) e cerca queste righe:

‘session’ =>
array (
‘save’ => ‘files’,
),

cambiale con:

‘session’ =>
array (
‘save’ => ‘memcached’,
‘save_path’ => ‘localhost:11211’
),

Per capire se effettivamente memcached sta funzionando possiamo effettuare il telnet come poco sopra, altrimenti tramite un “ps faux” possiamo controllare RAM e CPU usata dal processo (o dal top):

# ps faux | grep memcached

496 4049 0.0 0.6 348256 19200 ? Ssl Jun16 0:12 memcached -d -p 11211 -u memcached -m 128 -c 1024 -P /var/run/memcached/memcached.pid -l 127.0.0.1

Il terzo valore è la CPU usata, il quarto è la RAM (sopra sta usando lo 0.6% della RAM di sistema).

Concludo dicendo che le prestazioni del dominio con memcached sono veramente ottimali. Il carico che il dominio effettua sul server a parità di visite è molto più basso, quindi riuscirà a sopportare (e supportare) molti più visitatori.
Le pagine vengono fornite molto più rapidamente di prima…ovviamente una volta che la cache si è generata :) Appena attivata la cache puoi vistare il dominio in tutte le sue parti, giusto per un test, e riprovare la seconda volta per vedere la sorprendente differenza!

Enjoy ;)

P.S.: memcached può funzionare con un solo dominio alla volta! Se agganciate due domini al demone installato, uno dei due non funzionerà (o si vedrà online l’altro dominio). Per ovviare a tale problematica si possono lanciare più istanze di memcached, ovviamente su porte diverse. Questo lo vedremo alla “prossima puntata” :)

Danilo Stefani

Danilo Stefani

Technical Analyst II at Server Plan
Danilo Stefani

Latest posts by Danilo Stefani (see all)





Lascia un commento

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

*

Shares