Probando Nginx

Me puse a curiosear Nginx como webserver y inicialmente me pareció interesante los resultados entregados ante múltiples solicitudes (request) concurrentes. Durante mucho tiempo vengo usando Apache como servidor web, debo indicar que si bien hasta el momento ha funcionado para mis necesidades me decidí a experimentar con Nginx.

Como resultados preliminares he obtenido los siguientes resultados, las pruebas las hecha con ab como benchmark.

Los resultados son para una consulta a una aplicación que está en hecha en Symfony, que consulta a una base de datos en PostgreSQL y entrega un resultado en JSON.   Usando 1000 solicitudes con 10 de concurrencia

Apache


Server Software: Apache/2.2.22
Server Hostname: luqea.dev
Server Port: 80
Document Path: /index.php/api/user/show?nickname=fer123
Document Length: 269 bytes
Concurrency Level: 10
Time taken for tests: 89.996 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Total transferred: 511000 bytes
HTML transferred: 269000 bytes
Requests per second: 11.11 [#/sec] (mean)
Time per request: 899.962 [ms] (mean)
Time per request: 89.996 [ms] (mean, across all concurrent requests)
Transfer rate: 5.54 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.1 0 3
Processing: 597 899 40.0 896 1183
Waiting: 597 895 39.5 892 1183
Total: 597 899 40.0 897 1183
Percentage of the requests served within a certain time (ms)
50% 897
66% 911
75% 920
80% 927
90% 946
95% 964
98% 1000
99% 1019
100% 1183 (longest request)

Nginx


Server Software: nginx/1.2.1
Server Hostname: luqea.dev
Server Port: 80
Document Path: /index.php/api/user/show?nickname=fer123
Document Length: 269 bytes
Concurrency Level: 10
Time taken for tests: 86.689 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Total transferred: 479000 bytes
HTML transferred: 269000 bytes
Requests per second: 11.54 [#/sec] (mean)
Time per request: 866.886 [ms] (mean)
Time per request: 86.689 [ms] (mean, across all concurrent requests)
Transfer rate: 5.40 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.1 0 2
Processing: 164 864 49.5 863 1236
Waiting: 164 864 49.5 863 1236
Total: 164 864 49.5 863 1237
Percentage of the requests served within a certain time (ms)
50% 863
66% 872
75% 880
80% 883
90% 896
95% 911
98% 938
99% 1025
100% 1237 (longest request)
 

Bueno, con esta prueba de rendimiento la diferencia no están distinta y no marca alguna determinación sobre quien es mejor en rendimiento, solo Nginx por un poco supera a Apache pero nada considerable.

 

El asunto cambia dramáticamente cuando aumento el número de request a 100 simultaneas

 

El resultado en Ngix

Server Software: nginx/1.2.1
Server Hostname: luqea.dev
Server Port: 80
Document Path: /index.php/api/user/show?nickname=fer123
Document Length: 269 bytes
Concurrency Level: 100
Time taken for tests: 87.783 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Total transferred: 479000 bytes
HTML transferred: 269000 bytes
Requests per second: 11.39 [#/sec] (mean)
Time per request: 8778.290 [ms] (mean)
Time per request: 87.783 [ms] (mean, across all concurrent requests)
Transfer rate: 5.33 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 1.1 0 5
Processing: 1550 8367 1177.1 8636 9943
Waiting: 1550 8367 1177.1 8636 9942
Total: 1553 8368 1176.5 8636 9947
Percentage of the requests served within a certain time (ms)
50% 8636
66% 8687
75% 8720
80% 8733
90% 8793
95% 8835
98% 8910
99% 9083
100% 9947 (longest request)

Y en Apache el servidor se va al suelo.

rodrigo@moe:/var/www/blackhole$ ab -n 1000 -c 100 luqea.dev/index.php/api/user/show?nickname=fer123
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 luqea.dev (be patient)
apr_poll: The timeout specified has expired (70007)
Total of 85 requests completed

2 thoughts on “Probando Nginx

  1.  me mudé a nginx hace años, cuando comencé a tener problemas con apache (algo así como apache entrando en algún tipo de loop infinito y consumiendo el 99% de la cpu). Creo que el problema era por mod-php, pero igual le quise dar la oportunidad a nginx.

    Desde ahí que todo ha ido para mejor.
    El uso de memoria es muy bajo y los benchmarks no mienten.
    A mi parecer es un upgrade a un costo bien bajo.

    1. De momento he tenido buenos resultados. Lo que si es tengo que evaluar en Apache + CGI pero en base a las cosas que he podido hacer (balanceo, failover, etc..) por rutas invocando a otras aplicaciones lo encontrado fantástico.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *