Cómo generar millones de solicitudes http por segundo
Empecé con "ab", que es Apache Bench. Esta es la herramienta de evaluación comparativa http más simple y versátil que conozco. Es nativo de Apache, por lo que probablemente ya lo tengas en tu sistema. Desafortunadamente, solo pude generar alrededor de 900 solicitudes por segundo cuando lo usé. Si bien he visto a otros usarlo hasta 2000 solicitudes por segundo, puedo decirles de primera mano que "ab" no encajaba bien en nuestros puntos de referencia.
Httperf
A continuación, probé "httperf". Esta herramienta es más poderosa, pero aún así es relativamente simple y tiene una funcionalidad limitada. Para saber cuántas solicitudes se generan por segundo, no es tan simple como pasar parámetros. Después de muchos intentos, obtuve resultados de más de unos cientos de solicitudes por segundo. Por ejemplo:
Crea 100.000 sesiones a 1.000 veces por segundo. Cada sesión realiza 5 solicitudes en intervalos de 2 segundos.
httperf --hog --server=192.168.122.10 --wsess=100000,5,2 --rate 1000 --timeout 5
Total: conexiones 117557 solicitudes 219121 respuestas 116697 duración de la prueba 111,423 s
Velocidad de conexión: 1055,0 conexiones/segundo (0,9 ms/conexión, <=1022 conexiones simultáneas)
Tiempo de conexión [ms]: mínimo 0,3 promedio 865,9 máximo 7912,5 Mediana 459,5 desvestándar 993,1
Tiempo de conexión [ms]: conexión 31,1
Longitud de conexión [respuesta/conexión]. 1.000
Tasa de solicitud: 1966,6 req/s (0,5 ms/req)
Tamaño de solicitud [B]: 91,0
Tasa de respuesta [respuestas/s]: min 59,4 prom 1060,3 max 1639,7 stddev 475,2 (22 muestras)
Tiempo de respuesta [ms]: Respuesta 56,3 Transferencia 0,0
Tamaño de respuesta [B]: Encabezado 267,0 Contenido 18,0 Pie de página 0,0 (total 285.0)
Estado de respuesta: 1xx=0 2xx=116697 3xx=0 4xx=0 5xx=0
Tiempo de CPU [segundos]: Usuario 9.68 Sistema 101.72 (Usuario 8,7% Sistema 91,3% Total 100,0%)
E/S de red: 467,5 KB/seg.
O: 467,5 KB/s (3,8*10^6 bps)
Finalmente, logré 6.622 conexiones por segundo con la siguiente configuración:
httperf --hog --server 192.168 . 122.10 --num-conn 100000 --ra 20000 --timeout 5
(Total ***100.000 conexiones creadas, velocidad fija de 20.000 conexiones por segundo)
También tiene algunas ventajas potenciales y tiene más características que "ab". Pero no es una herramienta pesada que planeo utilizar para este proyecto. Lo que necesito es una herramienta que pueda admitir múltiples nodos de prueba de carga distribuidos. Entonces mi siguiente intento fue usar Jmeter.
Apache Jmeter
Este es un conjunto de pruebas de aplicaciones web con todas las funciones que puede simular todos los comportamientos de usuarios reales. Puede utilizar el proxy de Jmeter para acceder a su sitio web, hacer clic, iniciar sesión y simular todas las acciones del usuario y Jemeter registrará estas acciones como casos de prueba. Jemeter registrará estos comportamientos como casos de prueba y Jmeter los repetirá para simular la cantidad deseada de usuarios. Aunque configurar Jmeter es mucho más complicado que "ab" y "httperf", ¡es una herramienta muy interesante!
Según mis pruebas, ¡puede generar 14.000 solicitudes por segundo! Este es sin duda un buen avance.
Utilicé algunos complementos del proyecto Googlle Code y utilicé sus solicitudes "Stepping Threads" y "HTTP RAW", lo que resultó en ~30 000 solicitudes por segundo. En última instancia, esto da como resultado alrededor de 30.000 solicitudes por segundo. Pero ese era el límite, por lo que había que encontrar otra herramienta. A continuación se muestra la configuración anterior de Jmeter, espero que ayude a otros. Está lejos de ser perfecto, pero a veces funciona.
Samsung: herramienta de prueba multiprotocolo, distribuida y de alta resistencia
Básicamente genera 40.000 solicitudes por segundo, que es definitivamente lo que queremos. De manera similar a Jmeter, puede registrar algún comportamiento para ejecutarlo en el momento de la prueba y la mayoría de los protocolos se pueden probar. Los ejemplos incluyen SSL, HHTP, WebDAV, SOAP, PostgreSQL, MySQL, LDAP y Jabber/XMPP. A diferencia de Jmeter, no existe una configuración de GUI confusa, solo un archivo de configuración XML y algunas claves SSH para seleccionar nodos distribuidos. Me atrae tanto su simplicidad y eficiencia como su robustez y escalabilidad. Descubrí que es una herramienta muy poderosa que puede generar millones de solicitudes HTTP por segundo cuando se configura correctamente.
Además, Tsung puede generar gráficos en HTML e ingresar informes de prueba detallados. Los resultados de tus pruebas son tan fáciles de entender que incluso puedes mostrarle las imágenes a tu jefe.
También explicaré esta herramienta a lo largo del resto de esta serie. Ahora puede continuar explorando las instrucciones de configuración a continuación o pasar directamente a la página siguiente.
Instalación de Tsung en CentOS 6.2
Primero, debe instalar (requerido por Erlang) la fuente EPEL. Por lo tanto, instale EPEL antes de continuar con el siguiente paso. Una vez completada la instalación, proceda a instalar los paquetes requeridos para cada nodo utilizado para generar la carga. Si aún no lo ha instalado, cree una clave SSH sin contraseña entre nodos.
yum -y install erlang perl perl-RRD-**.noarch perl-Log-Log4perl-RRDs.noarch gnuplot perl-Template-Toolkit firefox
Desde el sitio web oficial de Github o Tsung Descargue los paquetes más recientes.
wget http://tsung.erlang-projects.org/dist/tsung-1.4.2.tar.gz
Descomprime y compila.
tar zxfv tsung-1.4.2.tar.gz
cd tsung-1.4.2
./configure && make && make install
Copie la configuración de muestra en el directorio ~/.tsung. Los archivos de configuración y registro de Tsung se almacenan aquí.
cp /usr/share/doc/tsung/examples/http_**.xml /root/.tsung/tsung.xml
Puedes editar este archivo de configuración según tus necesidades , o usar mi archivo de configuración. Después de algunas pruebas y errores, mi configuración actual genera 5 millones de solicitudes HTTP por segundo en 7 nodos distribuidos.
>p>
< ;clients>
</arrivalphase> </load>