lunedì 10 agosto 2009

Cache plugin per wordpress a confronto

Mentre facevo un po' di performance tuning su un server web dedicato all'hosting condiviso mi è venuta la curiosità  di provare alcuni plugin di caching per wordpress. Per chi non lo sapesse i plugin di caching per wordpress a grandi linee fanno in modo di salvare su disco una copia statica delle pagine servite in modo da velocizzare le successive richieste e, nel contempo, ridurre il lavoro che deve compiere il server per eseguire codice php e query sul database.

Ho fatto i test su questo stesso blog (attualmente Wordpress 2.8.3) usando due tra i plugin più diffusi, wp-cache e wp super cache, e uno abbastanza recente creato espressamente per lavorare su siti in shared hosting:  Hyper cache. Naturalmente ho verificato anche cosa succede disabilitando tutte le cache.

Per fare i benchmark ho utilizzato un tool a linea di comando disponibile su tutte le distribuzioni Linux: siege. L'utilizzo è piuttosto semplice: si crea un file di testo (urls.txt) con un elenco di urls del sito da testare (nel mio caso ne ho usate 20) e si lancia il test su queste urls con i parametri adeguati.

Nel mio caso la linea di comando era questa (con spiegazione dei parametri):

siege -i -d 30 -c 100 -t 60s -f urls.txt

-i, --internet  INTERNET user simulation, hits the URLs randomly.
-d, --delay=NUM  Time DELAY, random delay between 1 and num designed to simulate human activity. Default value is 3
-c, --concurrent=NUM   CONCURRENT users, default is 10
-t, --time=NUMm   TIME based testing where "m" is the modifier S, M, or H
-f, --file=FILE   FILE, change the configuration file to file.


In soldoni vengono simulati 100 visitatori contemporanei che visitano le urls presenti nella lista e che richiedono una nuova pagina dopo un tempo variabile da 1 a 30 secondi. La durata del test è di 60 secondi. Di default una richiesta va in timeout se non ottiene risposta dal server dopo 30 secondi.

I risultati sono stati piuttosto sorprendenti. In breve wp-cache e wp super cache non offrono alcun beneficio rispetto a wordpress pulito senza cache (anzi!!). Al contrario hyper cache da risultati eccellenti: il numero di richieste al secondo soddisfatte (Transaction rate) è circa 3 volte superiore. Di seguito riporto gli output dei benchmark (i test sono stati ripetuti 3 volte per ogni configurazione e qui viene riportato il risultato intermedio):

No cache:

Transactions:                           125 hits
Availability:                           99.21 %
Elapsed time:                           59.76 secs
Data transferred:                       0.98 MB
Response time:                          18.40 secs
Transaction rate:                       2.09 trans/sec
Throughput:                             0.02 MB/sec
Concurrency:                            38.50
Successful transactions:                125
Failed transactions:                    1
Longest transaction:                    30.03
Shortest transaction:                   0.88


wp-cache:

Transactions:                           117 hits
Availability:                           90.70 %
Elapsed time:                           60.49 secs
Data transferred:                       0.89 MB
Response time:                          18.17 secs
Transaction rate:                       1.93 trans/sec
Throughput:                             0.01 MB/sec
Concurrency:                            35.15
Successful transactions:                117
Failed transactions:                    12
Longest transaction:                    29.90
Shortest transaction:                   0.92


wp super cache:

Transactions:                           116 hits
Availability:                           94.31 %
Elapsed time:                           60.29 secs
Data transferred:                       0.92 MB
Response time:                          20.17 secs
Transaction rate:                       1.92 trans/sec
Throughput:                             0.02 MB/sec
Concurrency:                            38.82
Successful transactions:                116
Failed transactions:                    7
Longest transaction:                    31.54
Shortest transaction:                   0.00


Hyper cache:

Transactions:                          359 hits
Availability:                          100.00 %
Elapsed time:                          60.15 secs
Data transferred:                      2.80 MB
Response time:                         0.12 secs
Transaction rate:                      5.97 trans/sec
Throughput:                            0.05 MB/sec
Concurrency:                           0.71
Successful transactions:               359
Failed transactions:                   0
Longest transaction:                   2.40
Shortest transaction:                  0.02


Il load del server è stato costantemente elevato (oltre 30!!)  al termine dei test senza cache, con wp-cache e wp super cache, mentre con hyper cache il load non si è praticamente mosso dallo 0,1 solito.

A scanso di equivoci tutti i test sono stati effettuati verificando su filesystem  che i file statici venissero effettivamente scritti dal plugin e svuotando la cache prima di lanciare il test.

In conclusione hyper cache sembra essere di gran lunga più efficiente rispetto agli altri due, almeno nella mia configurazione. Immagino però che i risultati possano variare in base ad un numero molto elevato di variabili, dalla configurazione del server web e del php fino alla configurazione di worpress e dei plugin medesimi, quindi non pretendo che questi risultati abbiano un valore assoluto. Sta di fatto però che sono rimasto davvero impressionato dal comportamento di hyper cache, tanto da adottarlo in pianta stabile su questo blog (sebbene, lo ammetto, il numero di visitatori non lo renda assolutamente necessario) e da consigliarlo vivamente a tutti coloro che hanno un blog, a maggior ragione se su hosting condiviso. E visto che, ahimè, viviamo in un mondo di sospetti e di veleni, chiarisco che non ho alcun rapporto nè nessuna particolare simpatia/antipatia nei confronti degli autori dei plugin che ho provato ;-)

8 commenti:

  1. ben tornato :D... interessante testimonianza, la terrò presente.

    RispondiElimina
  2. :-) ... grazie dax! Ci voleva agosto per aver un po' di tempo ..... e ho intenzione di scrivere ancora un po' di cose ... almeno spero.

    RispondiElimina
  3. Grazie per la statistica, molto interessante. In teoria avresti dovuto trovare wp-super-cache un po' più efficiente di hyper cache (se non altro perché avendolo scritto so come è fatto), ma come dici è una questione di tipo di traffico e di configurazione!

    RispondiElimina
  4. Grazie a te per aver scritto il plugin :-)

    RispondiElimina
  5. [...] sito è stato rimesso su dal grande Zaffa con la collaborazione di Ludo. E poi, detto fra noi, la foto grande del blog, quella con lo [...]

    RispondiElimina
  6. ...però tu ora stai usando w3 total cache ;)

    RispondiElimina
  7. Eh eh ... già :-) ..... ma solo perchè ha il supporto per memcached, che è presente sul server dove gira il sito e va super bene.

    RispondiElimina
  8. oggi mi è andato in bomba il sito x le troppe visite...vediamo un pò questo hypercache se funziona veramente...domani vi dirò

    RispondiElimina