Sabes tu tiempo medio de respuesta del sitio web? ¿Sabe cuántos usuarios simultáneos puede manejar su sitio?
Las pruebas de carga son esenciales para que las aplicaciones web conozcan el sitio web capacidad. Si va a elegir el servidor web, una de las primeras cosas que debe hacer es realizar la prueba de carga y ver cuál funciona mejor para usted.
La evaluación comparativa puede ayudarlo a decidir;
- Qué servidor web funciona mejor
- Número de servidores que necesita para atender x número de solicitudes
- Qué configuración le da los mejores resultados
- Qué pilas de tecnología funcionan mejor
- Cuándo su sitio funcionará más lento o fallará
Existen varias herramientas en línea para realizar una prueba de esfuerzo; sin embargo, si está buscando una solución interna o desea comparar solo el rendimiento del servidor web, puede utilizar ApacheBanco y, alternativamente, algunas de las herramientas que se enumeran a continuación.
He usado el servidor web Apache y Nginx alojado en Digital Ocean para probarlo.
ApacheBench
ApacheBanco (ab) es un programa de línea de comandos de código abierto que funciona con cualquier servidor web. En esta publicación, explicaré cómo instalar este pequeño programa y realizar la prueba de carga para comparar los resultados.
APACHE
Instalemos ApacheBench usando un comando yum.
yum install httpd-tools
Si ya tiene httpd-tools, puede ignorar esto.
Ahora, veamos cómo funciona para 5000 solicitudes con una concurrencia de 500.
[root@lab ~]# ab -n 5000 -c 500 http://localhost:80/
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 localhost (be patient)
Completed 500 requests
Completed 1000 requests
Completed 1500 requests
Completed 2000 requests
Completed 2500 requests
Completed 3000 requests
Completed 3500 requests
Completed 4000 requests
Completed 4500 requests
Completed 5000 requests
Finished 5000 requests
Server Software: Apache/2.2.15
Server Hostname: localhost
Server Port: 80
Document Path: /
Document Length: 4961 bytes
Concurrency Level: 500
Time taken for tests: 13.389 seconds
Complete requests: 5000
Failed requests: 0
Write errors: 0
Non-2xx responses: 5058
Total transferred: 26094222 bytes
HTML transferred: 25092738 bytes
Requests per second: 373.45 [#/sec] (mean)
Time per request: 1338.866 [ms] (mean)
Time per request: 2.678 [ms] (mean, across all concurrent requests)
Transfer rate: 1903.30 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 42 20.8 41 1000
Processing: 0 428 2116.5 65 13310
Waiting: 0 416 2117.7 55 13303
Total: 51 470 2121.0 102 13378
Percentage of the requests served within a certain time (ms)
50% 102
66% 117
75% 130
80% 132
90% 149
95% 255
98% 13377
99% 13378
100% 13378 (longest request)
[root@lab ~]#
Como puede ver, Apache ha manejado 373 solicitudes por segundo, y tardó un total de 13.389 segundos en atender el total de solicitudes.
Ahora sabe que la configuración predeterminada puede atender todas estas solicitudes, por lo que cuando realice cambios en la configuración, puede realizar la prueba nuevamente para comparar los resultados y elegir el el albergue mejor calificado uno.
Nginx
Hagamos la prueba de lo que hicimos para Apache para que pueda comparar cuál funciona mejor.
[root@lab ~]# ab -n 5000 -c 500 http://localhost:80/
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 localhost (be patient)
Completed 500 requests
Completed 1000 requests
Completed 1500 requests
Completed 2000 requests
Completed 2500 requests
Completed 3000 requests
Completed 3500 requests
Completed 4000 requests
Completed 4500 requests
Completed 5000 requests
Finished 5000 requests
Server Software: nginx/1.10.1
Server Hostname: localhost
Server Port: 80
Document Path: /
Document Length: 3698 bytes
Concurrency Level: 500
Time taken for tests: 0.758 seconds
Complete requests: 5000
Failed requests: 0
Write errors: 0
Total transferred: 19660000 bytes
HTML transferred: 18490000 bytes
Requests per second: 6593.48 [#/sec] (mean)
Time per request: 75.832 [ms] (mean)
Time per request: 0.152 [ms] (mean, across all concurrent requests)
Transfer rate: 25317.93 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 6 11.0 2 53
Processing: 5 19 8.2 17 53
Waiting: 0 18 8.2 16 47
Total: 10 25 17.4 18 79
Percentage of the requests served within a certain time (ms)
50% 18
66% 21
75% 21
80% 22
90% 69
95% 73
98% 75
99% 76
00% 79 (longest request)
[root@lab ~]#
WOW!
¿Viste eso?
Nginx manejado 6593 solicitudes por segundo! Un ganador.
Entonces, al compararlo con dos servidores web, tendrá una idea de cuál elegir para su aplicación web.
La prueba anterior está en CentOS 6.8, 64 bits. Puede probar múltiples combinaciones de versiones de SO y Web Server para obtener resultados óptimos.
¿No te gusta ApacheBench por alguna razón? No se preocupe, hay muchos otros que puede utilizar para realizar la carga HTTP.
SIEGE
CERCO es una utilidad de prueba de carga HTTP compatible con UNIX. Puede colocar varias URL en un archivo de texto para cargar pruebas. Puedes instalar siege usando yum.
# yum instalar asedio
Ejecutemos la prueba con 500 solicitudes simultáneas durante 5 segundos.
[root @ lab ~] # siege -q -t 5S -c 500 http: // localhost / Levantando el asedio al servidor ... hecho. Transacciones: 4323 hits Disponibilidad: 100.00% Tiempo transcurrido: 4.60 segundos Datos transferidos: 15.25 MB Tiempo de respuesta: 0.04 segundos Tasa de transacción: 939.78 trans / seg Rendimiento: 3.31 MB / seg Concurrencia: 37.97 Transacciones exitosas: 4323 Transacciones fallidas: 0 Transacción más larga: 1.04 Transacción más corta: 0.00 [root @ lab ~] #
Desglosar los parámetros.
-q - para ejecutarlo silenciosamente (sin mostrar los detalles de la solicitud)
-t - ejecutar durante 5 segundos
-c - 500 solicitudes simultáneas
Entonces, como puede ver, la disponibilidad es del 100% y el tiempo de respuesta es de 0.04 segundos. Puede modificar el parámetro de prueba de carga según su objetivo.
Ali
Ali es una herramienta de prueba de carga relativamente nueva para realizar análisis en tiempo real. Es compatible con múltiples plataformas para instalar, incluido Docker.
Una vez instalado, ejecute ali
para ver los detalles de uso.
root@lab:~# ali
no target given
Usage:
ali [flags] <target URL>
Flags:
-b, --body string A request body to be sent.
-B, --body-file string The path to file whose content will be set as the http request body.
--debug Run in debug mode.
-d, --duration duration The amount of time to issue requests to the targets. Give 0s for an infinite attack. (default 10s)
-H, --header strings A request header to be sent. Can be used multiple times to send multiple headers.
-k, --keepalive Use persistent connections. (default true)
-M, --max-body int Max bytes to capture from response bodies. Give -1 for no limit. (default -1)
-m, --method string An HTTP request method for each request. (default "GET")
-r, --rate int The request rate per second to issue against the targets. Give 0 then it will send requests as fast as possible. (default 50)
-t, --timeout duration The timeout for each request. 0s means to disable timeouts. (default 30s)
-v, --version Print the current version.
Examples:
ali --duration=10m --rate=100 http://host.xz
Author:
Ryo Nakao <ryo@nakao.dev>
root@lab:~#
Como puede ver arriba, tiene la opción de enviar encabezados HTTP, duración de la prueba, límite de velocidad, tiempo de espera y más. Hice una prueba rápida en Herramientas Geekflare y aquí está la salida.
El informe es interactivo y proporciona información detallada sobre latencia.
Gobench
Gobanco está escrito en lenguaje Go y una sencilla utilidad de prueba de carga para comparar el rendimiento del servidor web. Es compatible con más de 20,000 usuarios simultáneos que ApacheBench no.
Apache JMeter
JMeter es una de las herramientas de código abierto más populares para medir el rendimiento de las aplicaciones web. JMeter es una aplicación basada en Java y no solo un servidor web, sino que puede usarlo contra PHP, Java. ASP.net, SOAP, REST, etc.
JMeter obtuvo una GUI amigable y decente, y la última versión 3.0 requiere Java 7 o superior para iniciar la aplicación. Debe probar JMeter si su objetivo es optimizar el rendimiento de la aplicación web.
wrk
trabajar es otra herramienta moderna de medición del rendimiento para cargar su servidor web y brindarle detalles de latencia, solicitud por segundo, transferencia por segundo, etc.
Con wrk, puede especificar ejecutar una prueba de carga con varios subprocesos.
Tomemos un ejemplo de ejecución de una prueba durante 5 minutos con 500 usuarios simultáneos con 8 hilos.
wrk –t8 –c500 -d300s http://localhost
Autocannon
Inspirado por el trabajo, cañón automático está escrito en Node.js. Puede usarlo mediante programación, a través de API o una utilidad independiente. Todo lo que necesitas es NodeJS instalado como requisito previo.
Puede controlar una serie de conexiones, solicitudes, duración, trabajadores, tiempo de espera, tasa de conexión y ofrecer toneladas de opciones para comparar sus aplicaciones web.
Curl-loader
cargador de rizos está escrito en C para simular la carga de la aplicación y es compatible con SSL / TLS. Junto con la prueba de la página web, también puede utilizar esta herramienta de código abierto para realizar la carga en servidores FTP.
Puede crear un plan de prueba con una combinación de HTTP, HTTPS, FTP y FTPS en una configuración de un solo lote.
httperf
Programas de httperf es una herramienta de alto rendimiento que se centra en puntos de referencia a nivel micro y macro. Es compatible con los protocolos HTTP / 1.1 y SSL.
Si tiene la cantidad esperada de usuarios simultáneos y desea probar si su servidor web puede atender una cantidad de solicitudes, puede usar el siguiente comando.
httperf --server localhost --port 80 --num-conns 1000 --rate 100
El comando anterior probará con 100 solicitudes por segundo para 1000 solicitudes HTTP.
Tsung
Tsung es una herramienta de prueba de esfuerzo distribuida multiprotocolo para enfatizar HTTP, SOAP, PostgreSQL, LDAP, XAMP, servidor MySQL. Es compatible con HTTP / 1.0, HTTP / 1.1 y las cookies se manejan automáticamente.
Generar un informe es factible con Tsung.
En resumen
Espero que las herramientas de evaluación comparativa anteriores le den una idea sobre el rendimiento de su servidor web y decidan qué funciona mejor para su proyecto.
A continuación, no olvides supervisar el rendimiento de su sitio web.