Siempre es importante optimizar los recursos disponibles en el servidor. Dado que los motores de búsqueda consideran el tiempo de carga como un factor de posicionamiento, es importante asegurarse que el contenido cargue tan rápido como sea posible, consumiendo la menor cantidad de recursos posibles. Aquí es donde entran algunos componentes en juego: nginx (que es un servidor web que puede sustituir a Apache) o Varnish (una capa para cachear contenido), etc.
¿Qué es Varnish?
Varnish es una pequeña aplicación web que permite acelerar el tiempo de carga y la capacidad de manejar conexiones entrantes del servidor web (ya sea Apache, Nginx u otro). El objetivo de Varnish es tomar los archivos estáticos y servirlos directamente al navegador (imágenes, archivos CSS, JS, txt, etc.) evitando que el servidor web gaste recursos en procesar este tipo de archivos. Haciendo uso de técnicas de caché, se puede lograr un rendimiento muy bueno.
La instalación de Varnish es muy sencilla, ya sea con Apache, Nginx o algún otro como servidor web. El proceso es básicamente el mismo en todos los casos:
- Instalar varnish (desde repositorio)
- Modificar el archivo de configuración de Varnish.
- Hacer que Varnish escuche en el puerto 80
- Modificar el servidor web (Apache en muchos casos) para que escuche en otro puerto
La instalación es realmente sencilla, y la configuración también lo es, ya que casi todos los parámetros se dejan con el valor por defecto (a menos que se necesite optimizar algún parámetro especial). Para quien esté interesado en cómo instalar este acelerador, a continuación les comparto algunos posts que me fueron útiles, ya que contienen instrucciones sencillas:
A posteriori: Comparando el rendimiento
Es muy importante medir el efecto que tiene este tipo de complementos en el rendimiento. En este caso, usando la herramienta ApacheBench v2.3 con 200 usuarios concurrentes y 50,000 peticiones, pude obtener los siguientes resultados:
# ab -c 200 -n 50000 http://tecnokun.org/
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking tecnokun.org (be patient)
Completed 5000 requests
Completed 10000 requests
Completed 15000 requests
Completed 20000 requests
Completed 25000 requests
Completed 30000 requests
Completed 35000 requests
Completed 40000 requests
Completed 45000 requests
Completed 50000 requests
Finished 50000 requests
Server Software: Apache/2.2.16
Server Hostname: tecnokun.org
Server Port: 80
Document Path: /
Document Length: 27711 bytes
Concurrency Level: 200
Time taken for tests: 17.165 seconds
Complete requests: 50000
Failed requests: 0
Write errors: 0
Total transferred: 1398600000 bytes
HTML transferred: 1385550000 bytes
Requests per second: 2912.84 [#/sec] (mean)
Time per request: 68.662 [ms] (mean)
Time per request: 0.343 [ms] (mean, across all concurrent requests)
Transfer rate: 79568.24 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 2 42.5 0 3013
Processing: 4 41 490.7 21 17156
Waiting: 3 40 490.7 19 17156
Total: 10 43 492.6 22 17160
Percentage of the requests served within a certain time (ms)
50% 22
66% 24
75% 24
80% 25
90% 25
95% 26
98% 28
99% 69
100% 17160 (longest request)
Usando los mismos parámetros, realicé la prueba con Varnish activado (usando el plugin W3 Total Cache) y obtuve el siguiente resultado:
# ab -c 200 -n 50000 http://tecnokun.org/
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking tecnokun.org (be patient)
Completed 5000 requests
Completed 10000 requests
Completed 15000 requests
Completed 20000 requests
Completed 25000 requests
Completed 30000 requests
Completed 35000 requests
Completed 40000 requests
Completed 45000 requests
Completed 50000 requests
Finished 50000 requests
Server Software: Apache/2.2.16
Server Hostname: tecnokun.org
Server Port: 80
Document Path: /
Document Length: 27546 bytes
Concurrency Level: 200
Time taken for tests: 2.459 seconds
Complete requests: 50000
Failed requests: 0
Write errors: 0
Total transferred: 1393049990 bytes
HTML transferred: 1377300000 bytes
Requests per second: 20337.17 [#/sec] (mean)
Time per request: 9.834 [ms] (mean)
Time per request: 0.049 [ms] (mean, across all concurrent requests)
Transfer rate: 553333.99 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 1 4 0.9 4 8
Processing: 3 6 1.2 5 16
Waiting: 0 3 1.4 2 13
Total: 6 10 1.6 9 20
Percentage of the requests served within a certain time (ms)
50% 9
66% 10
75% 11
80% 11
90% 13
95% 13
98% 14
99% 14
100% 20 (longest request)
Como se puede apreciar, el rendimiento aumentó bastante, ya que por ejemplo, el servidor fue capaz de procesar 2912.84 peticiones por segundo, sin usar Varnish. Después de activar el acelerador, el servidor fue capaz de soportar 20337.17 peticiones por segundo, lo que representa un incremento casi del 700% en el desempeño. El tiempo de respuesta por cada petición se vio reducido significativamente, pasando de 68.662 ms a 9.834 ms.
Varnish es sin duda una excelente forma de aumentar el rendimiento del servidor, sin sacrificar gran cantidad de recursos, y es de fácil instalación. Es ideal para quienes no desean instalar un servidor adicional como Nginx que lleva más tiempo configurar.
Adicionalmente, recomiendo leer nuestra categoría de consejos donde puedes encontrar buenos tutoriales para aprender todo tipo de cosas. ¡Hasta otra!