New Relic & JMeter - Pruebas de rendimiento perfectas

A raíz de los excelentes artículos introductorios presentados recientemente en Nettuts +, este artículo muestra cómo puedes llevar a New Relic al siguiente nivel. Como herramienta de supervisión del rendimiento, New Relic es fantástica, pero ¿qué pasa con el rendimiento? pruebas, antes de ir a vivir Ahí es donde entra JMeter a jugar. En este tutorial, verá cómo podemos realizar pruebas de estrés en nuestra aplicación bajo una carga realista y combinar la salida de JMeter y New Relic para brindarle confianza en el rendimiento de sus aplicaciones, antes de lanzar a un entorno de producción.

Contenido Patrocinado

Este contenido fue encargado por NewRelic y fue escrito y / o editado por el equipo de Tuts +. Nuestro objetivo con el contenido patrocinado es publicar tutoriales relevantes y objetivos, estudios de casos y entrevistas inspiradoras que ofrezcan un valor educativo genuino a nuestros lectores y nos permitan financiar la creación de contenido más útil..

¿Por qué esperar hasta la implementación para ver cómo su aplicación va a compararse con el tráfico del mundo real? Si hay un cuello de botella en su código que degrada la experiencia del usuario, ¿realmente desea que se active? ¿Qué pasaría si pudiéramos encontrar estos cuellos de botella temprano, mejorar el rendimiento y entregar una excelente aplicación a nuestros usuarios finales la primera vez?, y Mantener que seguir adelante con la evaluación comparativa regular. JMeter y New Relic juntos pueden ofrecerle este conjunto de pruebas de rendimiento perfecto.


Aplicación de demostración

Antes de que podamos comenzar a utilizar New Relic y JMeter, necesitamos una aplicación simple para realizar algunas pruebas de rendimiento. Entonces, escribamos una aplicación Ruby Sinatra simple que tenga un servicio que podamos probar. No entraré demasiado en la creación de esta aplicación, ya que puedes leer sobre Sinatra en otros artículos sobre Nettuts+.

La aplicación será falsificada un poco, para permitirnos ver algunos resultados interesantes en la línea de lo que podemos ver en varias aplicaciones. Escribiremos un servicio que tome una identificación y, dependiendo de esa identificación, devolverá un valor de inmediato o con un retraso. Esto nos mostrará lo que puede suceder si las solicitudes se manejan de forma rápida o lenta y el impacto que esto tiene en el rendimiento general de sus aplicaciones, ya que muchos usuarios hacen solicitudes..

Aquí está el código que define los servicios:

 requiere 'sinatra' requiere 'puma' requiere 'newrelic_rpm' módulo Ejemplo de clase Aplicación < Sinatra::Base get '/example/:id' do |id| result = id if id == '1' result = "This is our id: #id" end if id == '2' sleep 3 result = "We waited for id: #id" end result end end end

Como puede ver, esto es claramente un ejemplo artificial, pero la idea es que tengamos algunos servicios de respuesta rápida y uno con un ligero retraso. Ahora podemos usar esta aplicación y comenzar a escribir nuestro plan de pruebas de rendimiento en JMeter. Primero instalemos JMeter en nuestra máquina.


Enganchando a la nueva reliquia

Conseguir que su aplicación informe a New Relic es un proceso muy simple. New Relic es compatible con Ruby, Python, PHP, Java y otras plataformas, con guías fáciles de seguir para todos. En el caso de Ruby an Sinatra, es literalmente un proceso de cuatro pasos:

  • Agregue la gema 'newrelic_rpm' a su GemFile e 'bundle install'.
  • En su principal 'app.rb', donde definimos la ruta de servicio anterior, agregue una línea "require 'newrelic_rpm'".
  • Descargue el archivo 'newrelic.ini' de su cuenta en New Relic y colóquelo en una carpeta de configuración en su aplicación.
    (Asegurarse de que el Modo Monitor esté configurado en "verdadero" para el Desarrollo si se ejecuta localmente).
  • Acumula tu aplicación y verás que aparece en New Relic!

Una vez que hayas seguido estos sencillos pasos, deberías comenzar a ver algunos datos que llegan a New Relic a medida que llegas a tu aplicación con algo de tráfico. Sabrás que está funcionando cuando la aplicación aparezca en la lista y se vuelva verde.


En aras de la exhaustividad, solo enumeraré una breve descripción de la vista principal que New Relic proporciona para sus aplicaciones. El diseño en New Relic es principalmente para monitorear aplicaciones que se encuentran en entornos de producción con tráfico en vivo. La pantalla de resumen proporciona un vistazo del estado actual de su aplicación y cómo responde a las solicitudes de los clientes..

La pantalla se puede desglosar de la siguiente manera:

  1. Tiempo de respuesta - Este es el tiempo promedio de respuesta de las llamadas en su aplicación..
  2. Apdex - Nueva métrica de reliquias para la experiencia del cliente. Una puntuación más hacia 1 indica la gran mayoría de usuarios
    Las solicitudes están cayendo dentro de un tiempo razonable. El apdex puede ser útil para alertar cuando cae debajo del número establecido.
  3. Rendimiento - las solicitudes por minuto (RPM) que se realizan a su aplicación.
  4. Transacciones Web - Las diferentes rutas a las que se accede en su aplicación. Estos son ordenados por las solicitudes que más tiempo consumen..
  5. Tasa de error - El porcentaje de solicitudes causando un error. Puede hacer clic y depurar errores individuales aquí.


¿Qué es JMeter??


JMeter es una aplicación Java que le permite crear planes de prueba que pueden hacer una prueba de esfuerzo de su aplicación. Puede configurar todo, desde la cantidad de usuarios simultáneos del servicio hasta la cantidad de solicitudes que realizan por segundo. Incluso puede aumentar las solicitudes para ver cómo su aplicación trata con el cambio de carga, tal como lo haría en la implementación en el mundo real..

Como parte de este tutorial, le mostraré los conceptos básicos de cómo ejecutar un plan de prueba para sus aplicaciones, pero con una gran cantidad de complementos y documentación, hay muchas herramientas para manejar cualquier tipo de prueba de rendimiento que pueda necesitar..


Instalación y uso

La instalación es bastante sencilla y aquí listaremos las instrucciones para Mac y Linux..

Mac OS X

En una Mac JMeter se puede instalar muy fácilmente a través de Brew. Una vez que tengas Brew prueba el
siguiente comando:

 brew install jmeter

Linux

En una máquina Linux, simplemente descargue desde la página de descargas de JMeter. Entonces, simplemente siga las instrucciones proporcionadas.

Todas las plataformas

Una vez que tenga el paquete principal de JMeter, también necesitamos instalar el conjunto estándar de complementos. Usaremos un complemento en particular más adelante, por lo tanto, necesitamos agregarlo para poder usarlo. El conjunto de complementos estándar se puede obtener en este enlace: http://jmeter-plugins.org/downloads/file/JMeterPlugins-1.0.0.zip Una vez descargado, extraiga en el paquete JMeter que se encuentra en: "/ usr / local / Cellar / jmeter / "en una Mac, y en cualquier lugar donde la instale en Linux.


Análisis en New Relic - Primero necesitamos un plan de prueba de JMeter!

Así que ahora tenemos instalado JMeter y nuestra aplicación simple, probemos esta aplicación y veamos cómo se comporta. Cuando enciendas JMeter obtendrás esta pantalla:

Ahora, vamos a establecer la URL base para nuestras solicitudes. Clic derecho en "Plan de prueba" en el panel izquierdo, y elija 'Agregar -> Elemento de configuración -> Valor predeterminado de la solicitud HTTP'. Ahora podemos ingresar nuestra URL base aquí como asi.


Ahora podemos agregar la cantidad de subprocesos o "usuarios" de nuestro sistema. Para hacer esto clic derecho en "Plan de prueba" de nuevo y elige 'Agregar -> Subprocesos (Usuarios) -> Grupo de subprocesos'. Luego podemos ingresar a los usuarios, en este caso 20. Asegúrese de elegir la opción de conteo de bucle para siempre, ya que esto nos permitirá controlar el tiempo y el número de solicitudes a través de un complemento más adelante..


Una vez que tengamos el grupo de hilos, ahora podemos definir las solicitudes que queremos hacer a nuestra aplicación que vamos a realizar la prueba de rendimiento. Para hacer esto, agregaremos "Solicitud HTTP" a nuestro "Plan de prueba". Esto se puede encontrar haciendo clic derecho en el "Grupo de hilos" y eligiendo "Añadir -> Sampler -> Solicitud HTTP". Luego podemos definir la solicitud a realizar en el panel de la siguiente manera.


Puede ver cómo no necesitamos definir la URL base, como lo hicimos anteriormente y en su lugar solo necesitamos agregar la ruta para la solicitud. En este caso, el camino es a nuestra respuesta 'example / 1'. También notará que he seguido adelante y agregado las otras dos solicitudes junto con los paneles de resultados y gráficos, que utilizaremos para analizar los resultados de las pruebas. A estas alturas ya debería haber aprendido a agregar elementos y se pueden encontrar fácilmente en el menú por sus nombres. Los dos principales de interés son el "Temporizador de conformación de rendimiento" y el "Gráfico compuesto".

El temporizador de modelado nos permite mapear cómo queremos que se realicen las solicitudes a nuestra aplicación a lo largo del tiempo. Por ejemplo, podemos configurar una solicitud por segundo durante 60 segundos, y luego aumentar hasta cinco solicitudes por segundo durante 60 segundos y ver el efecto que esto tiene en nuestros tiempos de respuesta. Veamos cómo configuramos eso en el panel del temporizador de modelado..


Por lo tanto, al ingresar y agregar cada fila, puede definir la cantidad de solicitud a realizar y por cuánto tiempo debe hacerlo. Luego podemos ver nuestros resultados utilizando el "Gráfico compuesto", que muestra las transacciones realizadas por segundo en comparación con el tiempo de respuesta de nuestras solicitudes. Esto requiere una configuración mínima, simplemente agregando los dos gráficos que combinaremos, luego en la configuración del gráfico compuesto, agregue los gráficos que necesitemos así:


¡Eso es! Ahora podemos ejecutar nuestro plan de prueba y comenzar a ver algunos resultados. Presione jugar hacia la parte superior de la pantalla y luego haga clic en el gráfico compuesto. Comenzará a desplegar los resultados a medida que vayan llegando y podrá obtener una imagen de cómo responde su aplicación. Veamos nuestros resultados..


Podemos ver claramente que el salto en las solicitudes en un minuto tiene un impacto bastante importante en nuestra aplicación. Para el primer minuto, las solicitudes son estables a una por segundo y dan tiempos de respuesta de alrededor de dos / tres ms. Sin embargo, cuando aumentamos a cinco, los tiempos de respuesta aumentan ligeramente a cinco y cinco m / s. Obviamente, estos son tiempos de respuesta muy rápidos en el mundo real, pero solo mostramos aquí cómo podemos aumentar la carga y ver el efecto, si lo hay, esto tendrá.

Comparemos estos resultados con el servicio que tiene un retraso de tres segundos. ¿Cómo va a hacer frente el aumento de carga? Para cambiar al ejemplo dos, haga clic con el botón derecho en el ejemplo uno y elija alternar. Esto deshabilitará esa solicitud, luego haga un cambio en el ejemplo dos y eso lo habilitará. Asegúrese de hacer clic en el "Limpiar todo" Haga clic en el icono (pincel de barrido) en la parte superior para borrar los resultados de la última ejecución y, a continuación, presione Reproducir.


Incluso con el retraso de tres segundos, el servidor gestionó las solicitudes bastante bien y vemos mucho de lo mismo en la forma de resultados para este servicio. Solo unos pocos milisegundos aumentan a medida que aumentan las solicitudes. Con un servicio tan simple, esto es de esperar.


Análisis de reliquias nuevas

El poder real ahora viene con la combinación de estos datos con New Relic. Podríamos, por ejemplo, configurar JMeter para que funcione durante media hora con diferentes variaciones de carga y luego usar New Relic para analizar los resultados y usar su funcionalidad de profundización para buscar cuellos de botella en la aplicación. Estos se pueden ajustar, aumentando su rendimiento antes de entregarlos a sus clientes..

Nuevamente, no entraré en la configuración de New Relic, ya que esto se trata en otros artículos recientes sobre Nettuts + (ver aquí). Pero una vez que su aplicación está conectada, es simplemente un caso de generar la carga a través de JMeter e iniciar sesión en New Relic para ver los resultados. Para esta ejecución, he configurado el temporizador de modelado para ejecutar nuestra carga durante 30 minutos aumentando las solicitudes de cinco a 10 y luego 15 por segundo. Esto debería darnos un tráfico razonable para ver en New Relic.


Una vez que se haya ejecutado la prueba JMeter, podemos echar un vistazo a New Relic, que ahora podemos ver tiene estadísticas sobre el tráfico que sigue a través de la aplicación.


Esto muestra claramente el aumento gradual de las solicitudes, en su punto máximo alcanzando alrededor de 400 solicitudes por minuto (RPM) y los tiempos de respuesta permanecen estables a tres segundos. Podemos profundizar en las estadísticas y analizar la transacción que estamos realizando. Si hacemos clic en la vista de Transacciones Web, podemos ver el análisis que New Relic ha realizado solo en esta parte de la aplicación. Si el código que manejó la solicitud tuviera más capas, como los métodos para llamar a otros sistemas para obtener datos antes de presentarlos al usuario, veríamos más de un desglose.

Por ejemplo, a la izquierda muestra que gastamos el 100% del tiempo de solicitud en esa llamada. Si tuviéramos varias etapas, como una llamada a una base de datos, es posible que veamos un alto porcentaje allí y sabríamos optimizar la consulta a la base de datos para aumentar el rendimiento..


New Relic también proporciona una excelente vista de informes sobre los datos de sus aplicaciones, denominada Escalabilidad. Este informe puede ser realmente útil para monitorear la capacidad de sus aplicaciones para manejar la carga creciente. La gráfica muestra su tiempo de respuesta frente a las solicitudes por minuto, y puede ver claramente si hay alguna degradación en el tiempo de respuesta a medida que aumentan. Esta es una gran herramienta y debe consultarla con frecuencia tanto en las pruebas de rendimiento como en esta, pero también en la supervisión del rendimiento de su aplicación de producción..

En nuestro ejemplo a continuación, está claro que la aplicación es capaz de mantener un tiempo de respuesta de tres segundos incluso a medida que aumenta el RPM..


New Relic también proporciona otra visión, la de la capacidad. Esto nos permite ver la cantidad de recursos disponibles que está utilizando nuestra aplicación. Indica al desarrollador si el número de instancias que sirven su aplicación es suficiente para manejar el tipo de carga que está recibiendo. Esto es vital para asegurarse de que no se está ejecutando cerca de su capacidad y tiene la capacidad de manejar cualquier aumento en el tráfico que pueda ocurrir fuera de su flujo de tráfico normal. New Relic resume bien la página, junto con el análisis de nuestra aplicación aquí, que podemos ver que funciona bien incluso en esta única instancia..



Conclusión

El objetivo de este tutorial era mostrarle cómo configurar rápidamente los planes de prueba de JMeter para su aplicación, para que pueda probar el rendimiento de su aplicación antes de entregarla a sus clientes. Este enfoque se puede utilizar en nuevos proyectos, asegurando que la aplicación que va a entregar esté lista para el tráfico del mundo real. También se puede usar en aplicaciones heredadas, lo que le proporciona un indicador de rendimiento de línea de base para que, a medida que realice cambios, pueda ver si el rendimiento de su aplicación está mejorando o disminuyendo..

Al aprovechar las excelentes herramientas proporcionadas por New Relic, ambos pueden monitorear su aplicación en línea en tiempo real, pero también tomar su conjunto de herramientas y aplicarlo a su propio análisis fuera de línea. Esto le dará a usted, el desarrollador, confianza en su producto tanto a medida que se desarrolla como cuando se lanza al mercado..