Tanto WP-Cache como 1BlogCacher son plugins para WordPress que almacenan copias estáticas de las URLs accedidas, esto con el objetivo de incrementar la velocidad de respuesta y reducir la carga del servidor.
Cuando vi el anuncio de 1BlogCacher y sin haber probado el plugin, tenía algunas sospechas de que era más limitado que WP-Cache. Luego de ver los números que publicó Andrés en relación al comportamiento de éstos plugins, me llamó la atención el número de peticiones fallidas que tenía WP-Cache, por lo que decidí hacer una prueba y explicar el posible motivo de estas fallas.
El entorno sobre el que se realizó esta pequeña prueba es:
- Sistema Operativo
- Debian Sid (Kernel 2.6.22-1-686) sobre VMWare.
- Servidor Web
- Apache/2.2.6 + PHP 5.2.3-1+b2.
- Servidor de Base de Datos
- MySQL 5.0.27 sobre Windows XP*.
- WordPress
- Versión en desarrollo.
Número de páginas servidas
Para la prueba, al igual que Andrés, utilizo Apache Benchmark con los siguientes parámetros : ab -c5 -t10 http://localhost/wp/
, que equivale a hacer la prueba durante 30 segundos con nivel de concurrencia 5.
-c concurrency
Number of multiple requests to perform at a time. Default is one request at a time.
-t timelimit
Maximum number of seconds to spend for benchmarking. This implies a -n 50000 internally. Use this to benchmark the server within a fixed total amount of time. Per default there is no timelimit.
Prueba sin ningún plugin activado:
code:
hell:~# ab -c5 -t30 http:
//192.168.1.202/~alex/wp1/
This is ApacheBench, Version
2.0.40-dev <$Revision:
1.146 $> apache
-2.0
Copyright
1996 Adam Twiss, Zeus Technology Ltd, http:
//www.zeustech.net/
Copyright
2006 The Apache Software Foundation, http:
//www.apache.org/
Benchmarking 192.168.1.202 (be patient)
Finished 236 requests
Server Software: Apache/2.2.6
Server Hostname: 192.168.1.202
Server Port: 80
Document Path: /~alex/wp1/
Document Length: 4904 bytes
Concurrency Level: 5
Time taken for tests: 30.338809 seconds
Complete requests: 236
Failed requests: 1
(Connect: 0, Length: 1, Exceptions: 0)
Write errors: 0
Total transferred: 1225765 bytes
HTML transferred: 1162249 bytes
Requests per second: 7.78 [#/sec] (mean)
Time per request: 642.771 [ms] (mean)
Time per request: 128.554 [ms] (mean, across all concurrent requests)
Transfer rate: 39.45 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.5 0 8
Processing: 131 632 1551.8 474 22284
Waiting: 131 631 1551.7 474 22283
Total: 131 632 1551.7 474 22284
Percentage of the requests served within a certain time (ms)
50% 474
66% 540
75% 609
80% 635
90% 742
95% 866
98% 1081
99% 5015
100% 22284 (longest request)
Prueba con 1BlogCacher activado:
code:
hell:~# ab -c5 -t30 http:
//192.168.1.202/~alex/wp1/
This is ApacheBench, Version
2.0.40-dev <$Revision:
1.146 $> apache
-2.0
Copyright
1996 Adam Twiss, Zeus Technology Ltd, http:
//www.zeustech.net/
Copyright
2006 The Apache Software Foundation, http:
//www.apache.org/
Benchmarking 192.168.1.202 (be patient)
Finished 359 requests
Server Software: Apache/2.2.6
Server Hostname: 192.168.1.202
Server Port: 80
Document Path: /~alex/wp1/
Document Length: 5084 bytes
Concurrency Level: 5
Time taken for tests: 30.83504 seconds
Complete requests: 359
Failed requests: 0
Write errors: 0
Total transferred: 1915920 bytes
HTML transferred: 1830240 bytes
Requests per second: 11.93 [#/sec] (mean)
Time per request: 418.990 [ms] (mean)
Time per request: 83.798 [ms] (mean, across all concurrent requests)
Transfer rate: 62.19 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.0 0 0
Processing: 80 413 695.4 302 7783
Waiting: 80 413 695.3 302 7783
Total: 80 413 695.4 302 7783
Percentage of the requests served within a certain time (ms)
50% 301
66% 374
75% 480
80% 553
90% 684
95% 804
98% 850
99% 2017
100% 7783 (longest request)
Prueba con WP-Cache activado:
code:
hell:~# ab -c5 -t30 http:
//192.168.1.202/~alex/wp2/
This is ApacheBench, Version
2.0.40-dev <$Revision:
1.146 $> apache
-2.0
Copyright
1996 Adam Twiss, Zeus Technology Ltd, http:
//www.zeustech.net/
Copyright
2006 The Apache Software Foundation, http:
//www.apache.org/
Benchmarking 192.168.1.202 (be patient)
Completed 5000 requests
Completed 10000 requests
Finished 10057 requests
Server Software: Apache/2.2.6
Server Hostname: 192.168.1.202
Server Port: 80
Document Path: /~alex/wp2/
Document Length: 4992 bytes
Concurrency Level: 5
Time taken for tests: 30.2791 seconds
Complete requests: 10057
Failed requests: 0
Write errors: 0
Total transferred: 53382556 bytes
HTML transferred: 50204544 bytes
Requests per second: 335.20 [#/sec] (mean)
Time per request: 14.916 [ms] (mean)
Time per request: 2.983 [ms] (mean, across all concurrent requests)
Transfer rate: 1737.54 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 4 2.9 5 16
Processing: 2 8 52.8 8 3904
Waiting: 0 5 52.8 5 3902
Total: 2 13 52.8 14 3907
Percentage of the requests served within a certain time (ms)
50% 14
66% 14
75% 14
80% 14
90% 15
95% 15
98% 16
99% 17
100% 3907 (longest request)
En mi humilde opinión, el número de peticiones fallidas en las pruebas que hizo Andrés, se debe a que el tiempo de la prueba era muy corto para 100 peticiones.
Consumo de memoria
Otro punto importante a tomar en cuenta es el consumo de memoria por petición:
La enorme diferencia en el consumo de memoria entre ambos plugins, se debe principalmente a que WP-Cache utiliza la funcionalidad que WordPress provee para el cache estático y termina la ejecución del script antes de que se incluya gran parte de los archivos que forman parte del mismo (es por este motivo que muchos plugins no funcionan con WP-Cache).
Conclusiones
Para blogs con bastante tráfico WP-Cache sigue siendo la alternativa más adecuada en relación a 1BlogCacher, porque además de servir más páginas por segundo, también reduce considerablemente el consumo de memoria.
Al parecer las pruebas empíricas que hice confirmaron mis sospechas iniciales con respecto a las limitaciones de 1BlogCacher. Si cometí algún error, pueden indicármelo en los comentarios. 😉
*: no tenía ganas de bajar algo de 30 MB sólo para hacer la prueba en Debian. 😀