El título de esta pregunta representa mi principal preocupación, pero si sigues leyendo más allá delpreguntasección, encontrará algunos antecedentes sobre nuestra configuración... que pueden ser relevantes/útiles o no.
Pregunta
Estamos probando nuestra aplicación usandogatito, y están ejecutando el escenario Gatling en unsolteromáquina. Estamos descubriendo que nuestra aplicación es capaz de hacer frente a una carga elevada generada por la herramienta de estrés; sin embargo, no es capaz de hacer frente a una carga relativamente baja de usuarios reales.
Mi pregunta es: ¿qué tipo de optimización o racionalización a nivel de sistema operativo/red se produce cuando se realizan solicitudes simultáneas desde una sola máquina/sistema operativo a una aplicación, frente a solicitudes simultáneas de varias máquinas (es decir, usuarios habituales que utilizan sus navegadores web)?
Fondo
Tenemos una aplicación Tomcat detrás de Apache a través de AJP, que a su vez está detrás de Citrix Netscaler a través del puerto 80 (también estamos planeando eliminar a Apache de la ecuación, pero ese es otro asunto...).
Nuestra aplicación se ha detenido con una carga relativamente baja (se están creando conexiones CLOSE_WAIT entre Apache y Tomcat) y estamos en el proceso de realizar pruebas de carga para resolver el problema. Los interbloqueos que ocurrían en nuestra instancia de SQLServer aparecían con bastante frecuencia, por lo que decidimos empezar por ahí. Para replicar el problema y posteriormente probar nuestras soluciones, utilizamos una sola máquina para generar carga usando Gatling.
Cuando comenzamos, pudimos replicar de manera confiable los interbloqueos utilizando la herramienta. Después de realizar algunas optimizaciones, los interbloqueos desaparecieron, al igual que las conexiones CLOSE_WAIT. Luego, llevamos la aplicación a una carga con la que estábamos muy satisfechos y se ejecutó sin mayores problemas.
Desafortunadamente, cuando se aplicaron las correcciones al sistema de producción, seguíamos viendo el mismo comportamiento original. Lo que me lleva a preguntarme si la carga generada por la herramienta de estrés no es una buena representación de lo que realmente sucede en el mundo real.debido a que se origina en una única fuente, en lugar de muchos clientes diferentes repartidos por Internet.
Respuesta1
Un único generador de carga probablemente hará un mejor trabajo de agrupación de conexiones que clientes dispares; mejor uso de Keepalives, por ejemplo. Esto genera más solicitudes en menos conexiones.
Si se trata de DNS por turnos, tenderá a llegar solo a uno de los destinos DNS en lugar de distribuir la carga entre todos ellos. Algunos balanceadores de carga toman decisiones de rigidez basadas en la IP del cliente, que en este caso sería estática.
Su generador de carga puede tener un grupo de ejecución restringido (digamos, 200 'usuarios'), de modo que la latencia en respuesta hace que los usuarios se ralenticen, a diferencia del mundo real donde tiene un número mucho mayor de usuarios que no esperan pacientemente. otros usuarios para terminar.
Respuesta2
Es difícil quedarse con algo sin ver el escenario de prueba de Gatling. Sólo un "tiro a ciegas": su prueba de Gatling no representa con precisión al usuario real, es decir
- Los navegadores reales descargan recursos externos integrados en la página, es decir, imágenes, scripts y estilos, y lo hacen utilizando un grupo de subprocesos concurrentes. Si falta tu prueba de GatlinginferirHtmlResourcesmétodos, podría darse el caso de que la carga procedente de Gatling sea mucho menor que la realizada por usuarios reales sentados detrás de navegadores reales.
Almacenamiento en caché de DNS. Gatling puede alcanzar solo una dirección IP debido a que las direcciones IP detrás de los nombres DNS se almacenan en caché en el nivel JVM. segúnPreguntas frecuentes sobre Gatling:
Básicamente, la caché DNS de Gatling/JVM debe ajustarse. Una solución es agregar
-Dsun.net.inetaddr.ttl=0
a la línea de comando.Solicitudes AJAX. Gatling no ejecuta JavaScript del lado del cliente, por lo tanto, si su aplicación se basa en solicitudes XMLHTTP, no se activarán cuando Gatling acceda a la página. Deberá manejarlos manualmente en caso de que su aplicación utilice algún tipo de AJAX.
Entonces recomendaría consultarCómo hacer que JMeter se comporte más como un navegador reale implementar una configuración de Gatling equivalente, ya que si la prueba de carga no representara la carga de la vida real, no tiene mucho sentido ejecutar dicha prueba.