Red de conocimiento de abogados - Derecho de sociedades - Cómo generar millones de solicitudes HTTP por segundo

Cómo generar millones de solicitudes HTTP por segundo

Una cosa importante a tener en cuenta al realizar pruebas responsables: cuántas conexiones de socket puedes realizar en Linux. Esto está codificado en el kernel y el más típico es el puerto W temporal. (Hasta cierto punto) puede ampliar esto en /etc/sysctl.conf. Pero básicamente, una máquina Linux sólo puede abrir unos 64.000 sockets al mismo tiempo. Entonces, cuando realizamos pruebas de carga, debemos aprovechar al máximo el socket realizando tantas solicitudes como sea posible en una sola conexión. Además de esto, necesitamos más de una máquina para generar la carga. De lo contrario, el generador de carga ocupará los enchufes disponibles y no podrá generar suficiente carga.

Inicialmente usé 'ab', Apache Bench. Es la herramienta de evaluación comparativa http más simple y versátil que conozco. Y viene con Apache, por lo que probablemente ya esté en su sistema. Desafortunadamente, solo pude generar alrededor de 900 solicitudes por segundo mientras lo usaba. Si bien he visto a otros lograr 2000 solicitudes por segundo usándolo, puedo decirles de inmediato que 'ab' no era adecuado para nuestros puntos de referencia.

Httperf

A continuación, probé 'httperf'. Esta herramienta es más poderosa, pero sigue siendo relativamente simple y tiene una funcionalidad limitada. Averiguar cuántas solicitudes se produjeron por segundo no es tan sencillo como simplemente 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 un ritmo de 1.000 por segundo. Cada sesión realiza 5 solicitudes con un intervalo 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 conn/s (0,9 ms/conn, <=1022 conexiones simultáneas)

Tiempo de conexión [ms]: min 0,3 prom 865,9 max 7912,5 mediana 459,5 stddev 993,1

Tiempo de conexión [ms]: conexión 31,1

Longitud de conexión [respuestas/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]: mín. 59,4 promedio 1060,3 máximo 1639,7 desv estándar 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 [s]: usuario 9,68 sistema 101,72 (usuario 8,7 % sistema 91,3 % total 100,0 %)

E/S neta : 467,5 KB/s (3,8*10^6 bps)

Finalmente, logré 6.622 conexiones por segundo usando esta configuración:

httperf --hog --server 192.168 -. -num-conn 100000 --ra 20000 --timeout 5

(Un total de 100.000 conexiones creadas a una velocidad fija de 20.000 conexiones por segundo)

También tiene algunas ventajas potenciales y tiene más funciones que 'ab'. Pero no es la herramienta pesada que voy a 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: Jmeter.

Apache Jmeter

Este es un conjunto de pruebas de aplicaciones web completamente funcional 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 e imitar todos los comportamientos que pueden realizar los usuarios. Jemeter registrará estos comportamientos como casos de prueba. Luego, Jmeter realizará estas acciones repetidamente para simular la cantidad de usuarios que desea. Aunque configurar Jmeter es mucho más complejo que 'ab' y 'httperf', ¡es una herramienta divertida!

Según mis pruebas, ¡puede generar 14.000 solicitudes por segundo! Este es definitivamente un buen avance.

Utilicé algunos complementos del proyecto Googlle Code y usando sus solicitudes "Stepping Threads" y "HTTP RAW" terminé realizando alrededor de 30.000 solicitudes por segundo. Pero esto ha llegado a su límite, así que busque otra herramienta. Aquí hay una configuración de Jmeter que tenía antes, espero que pueda ayudar a otros. Si bien esta configuración está lejos de ser perfecta, a veces puede hacer lo que quieras.

Tsung: herramienta de prueba multiprotocolo, distribuida y resistente.

Básicamente puede generar 40.000 solicitudes por segundo, que es definitivamente la herramienta que queremos. De manera similar a Jmeter, puede registrar algunas acciones y ejecutarlas durante las pruebas, y puede probar la mayoría de los protocolos. Como 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 los nodos distribuidos de su elección. 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 e ingresar informes detallados de sus pruebas en html. Los resultados son fáciles de entender e incluso puedes mostrarle las imágenes a tu jefe.

También explicaré esta herramienta en el resto de esta serie de artículos. 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 la fuente EPEL (requerida por Erlang). Por lo tanto, instálelo antes de continuar con el siguiente paso. Una vez instalado, procede a instalar los paquetes necesarios para cada nodo que utilices para generar carga. Cree una clave SSH sin contraseña entre nodos si aún no lo ha hecho.

yum -y install erlang perl perl-RRD-**.noarch perl-Log-Log4perl-RRDs.noarch gnuplot perl-Template-Toolkit firefox

Desde Github o el sitio web oficial de Tsung Descargue la última versión de Tsung.

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. Aquí es donde se almacenan los archivos de configuración y de registro de Tsung.

cp /usr/share/doc/tsung/examples/http_**.xml /root/.tsung/tsung.xml

Puedes editar esta configuración según tus necesidades , o usar mi archivo de configuración. Después de muchas pruebas y errores, mi configuración actual produce 5 millones de solicitudes HTTP por segundo utilizando 7 nodos distribuidos.

< cliente host="loadnode2" peso="1" maxusers="40000" cpu="8">

/p>

sers maxnumber="15000" Arrivalrate="8" unidad="segundo"/>

< /arrivalphase>