Advertisement
  1. Code
  2. Tools & Tips

New Relic y JMeter: Prueba de rendimiento perfecto

by
Difficulty:IntermediateLength:LongLanguages:
This post is part of a series called Performance Monitoring With New Relic.
3 New Relic Power Features You Should Be Using Today
Using New Relic Custom Metrics to Monitor All the Things
Sponsored Content

This sponsored post features a product relevant to our readers while meeting our editorial guidelines for being objective and educational.

Spanish (Español) translation by Steven (you can also view the original English article)

Siguiendo con los excelentes artículos introductorios presentados recientemente en Tuts+, este artículo busca mostrar cómo puedes llevar New Relic al siguiente nivel. Como herramienta de supervisión del rendimiento, New Relic es fantástico, pero ¿qué pasa con las pruebas de rendimiento antes de su lanzamiento? Ahí es donde entra en juego JMeter. En este tutorial, verás cómo podemos probar nuestra aplicación bajo carga realista y combinar la salida de JMeter y New Relic para brindarte confianza en el rendimiento de tus aplicaciones, antes de lanzarlas 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 le va a tu aplicación frente al tráfico del mundo real? Si hay un cuello de botella en tu código que degrada la experiencia del usuario, ¿realmente deseas que se active? ¿Qué pasaría si pudiéramos encontrar estos cuellos de botella de manera temprana, mejorar el rendimiento y ofrecer una gran aplicación a nuestros usuarios finales la primera vez, y mantenerlo en el futuro con evaluaciones comparativas regulares? JMeter y New Relic juntos pueden brindarte este conjunto de pruebas de rendimiento perfecto.


Demostración de la aplicación

Antes de que podamos comenzar a usar New Relic y JMeter, ¡necesitamos una aplicación simple para hacer algunas pruebas de rendimiento! Entonces, escribamos una aplicación simple en Ruby Sinatra 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 Tuts+.

La aplicación se falsificará un poco, para permitirnos ver algunos resultados interesantes en línea de lo que podemos ver en varias aplicaciones. Escribiremos un servicio que toma una identificación y, dependiendo de esa identificación, devolverá un valor de inmediato o con retraso. Esto nos mostrará lo que puede suceder si las solicitudes se manejan con rapidez o lentitud y el impacto que esto tiene en el rendimiento general de tus aplicaciones a medida que muchos usuarios realizan solicitudes.

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

Como puedes ver, este 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.


Conectando con New Relic

Hacer que tu solicitud 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 y Sinatra, es literalmente un proceso de cuatro pasos:

  • Agregar la gema 'newrelic_rpm' a tu GemFile y 'bundle install'.
  • En tu 'app.rb' principal donde definimos la ruta de servicio arriba, agrega la línea "require 'newrelic_rpm'".
  • Descargar el archivo 'newrelic.ini' de tu cuenta en New Relic y colocarlo en la carpeta de configuración en tu aplicación.
    (Asegurarte de que el modo de monitorización esté establecido en 'verdadero' para desarrollo si se ejecuta localmente).
  • ¡Acumula tu aplicación y mírala listada en New Relic!

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

newrelic-screen-1

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

La pantalla se puede dividir de la siguiente manera:

  1. Tiempo de respuesta: este es el tiempo de respuesta promedio de las llamadas en tu aplicación.
  2. Apdex: Métrica de New Relic para la experiencia del cliente. Una puntuación más cercana a 1 indica la gran mayoría de usuarios
    las solicitudes están dentro de un plazo razonable. El apdex puede ser útil para alertar cuando cae por debajo del número establecido.
  3. Rendimiento: las solicitudes por minuto (RPM) que se realizan a tu aplicación.
  4. Transacciones web: las diferentes rutas a las que se accede en tu aplicación. Estos se ordenan según las solicitudes que consumen más tiempo.
  5. Tasa de error: el porcentaje de solicitudes que provocan un error. Puedes hacer clic y depurar errores individuales aquí.
newrelic-screen-2

¿Qué es JMeter?

jmeter-logo

JMeter es una aplicación Java que te permite crear planes de prueba que pueden testear tu aplicación. Puedes configurar todo, desde la cantidad de usuarios simultáneos del servicio, hasta la cantidad de solicitudes que realizan por segundo. Incluso puedes aumentar las solicitudes para ver cómo tu aplicación se ocupa de los cambios de carga, tal como podría hacerlo en la implementación del mundo real.

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


Instalación y uso

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

Mac OS X

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

Linux

En una máquina Linux, simplemente descárgalo desde la página de descargas de JMeter. Luego, simplemente sigue las instrucciones proporcionadas.

Todas las plataformas

Una vez que tengas el paquete principal de JMeter, también debemos instalar el conjunto estándar de complementos. Haremos uso de un complemento en particular más adelante, por lo tanto, debemos 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, extrae en el paquete JMeter que se encuentra en: "/usr/local/Cellar/jmeter/" en Mac, y donde sea que lo instales en Linux.


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

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

Ahora, establezcamos la URL base para nuestras solicitudes. Haz clic derecho en "Plan de prueba" en el panel izquierdo y elige 'Agregar -> Elemento de configuración -> Solicitud HTTP predeterminada'. Ahora podemos ingresar nuestra URL base aquí así.

jmeter-screen-2

Ahora podemos agregar la cantidad de hilos o "usuarios" de nuestro sistema. Para hacer esto, haz clic derecho en "Plan de prueba" nuevamente y elige 'Agregar -> Subprocesos (Usuarios) -> Grupo de subprocesos'. Luego podemos ingresar los usuarios, en este caso 20. Asegúrate de elegir la opción de conteo de bucles 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.

jmeter-screen-3

Una vez que tenemos el grupo de subprocesos ahora podemos definir las solicitudes que queremos hacer a nuestra aplicación que vamos a probarle el rendimiento. Para hacer esto, agregaremos "Solicitud HTTP" a nuestro "Plan de prueba". Esto se puede encontrar haciendo clic derecho en el "Grupo de subprocesos" y seleccionando "Agregar -> Muestrario -> Solicitud HTTP". Luego podemos definir la solicitud a realizar en el panel como se muestra a continuación.

jmeter-screen-4

Puedes ver cómo no necesitamos definir la URL base, como lo hicimos antes y, en su lugar, solo necesitamos agregar la ruta para la solicitud. En este caso, la ruta es nuestra respuesta 'ejemplo/1'. También notarás que agregué las otras dos solicitudes junto con los paneles de resultados y gráficos. Estas las usaremos para analizar los resultados de las pruebas. A estas alturas, ya deberías haber aprendido a agregar elementos ya que se pueden encontrar fácilmente en el menú por sus nombres. Los dos principales de interés son el "temporizador de modelado del 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. Echemos un vistazo a cómo configuramos eso en el panel temporizador de modelado.

jmeter-screen-5

Entonces, al ingresar y agregar cada fila, puedes definir la cantidad de solicitudes a realizar y durante cuánto tiempo debe hacerse. Luego podemos ver nuestros resultados utilizando el "Gráfico compuesto", que muestra las transacciones realizadas por segundo frente al 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, agrega los gráficos que requerimos así:

jmeter-screen-6

¡Eso es! Ahora podemos ejecutar nuestro plan de prueba y comenzar a ver algunos resultados. Presiona "Iniciar" en la parte superior de la pantalla y luego haz clic en el gráfico compuesto. Comenzará a distribuir los resultados a medida que aparezcan y podrá obtener una imagen de cómo está respondiendo tu aplicación. Veamos nuestros resultados.

jmeter-screen-7

Podemos ver claramente que el salto en las solicitudes en un minuto tiene un impacto bastante considerable en nuestra aplicación. Durante el primer minuto, las solicitudes se mantienen 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 alcanzando los cinco y cinco m/s. Obviamente, estos son tiempos de respuesta muy rápidos en el mundo real, pero solo estamos mostrando aquí cómo podemos aumentar la carga y ver el efecto (si lo hay) que tendrá.

Comparemos estos resultados con el servicio que tiene un retraso de tres segundos. ¿Cómo afrontará eso el aumento de carga? Para cambiar al ejemplo dos, haz clic derecho en el ejemplo uno y elige alternar. Esto deshabilitará esa solicitud, luego alternará en el ejemplo dos y eso la habilitará. Asegúrate de hacer clic en el icono "Borrar todo" (cepillo de barrido) en la parte superior para borrar los resultados de la última ejecución, luego presiona en reproducir.

jmeter-screen-8

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


Análisis de New Relic

El verdadero poder ahora viene con la combinación de estos datos con New Relic. Por ejemplo, podríamos configurar JMeter para que se ejecute durante media hora con diferentes variaciones de carga y luego usar New Relic para analizar los resultados y usar su funcionalidad de desglose para buscar cuellos de botella en la aplicación. Luego, estos se pueden ajustar para aumentar el rendimiento antes de entregarlos a tus clientes.

Nuevamente, no entraré en la configuración de New Relic, ya que esto se trata en otros artículos recientes en Tuts+ (ver aquí). Pero una vez que tu aplicación está conectada, es un caso de simplemente generar la carga a través de JMeter e iniciar sesión en New Relic para ver los resultados. Para esta ejecución, configuré 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.

jmeter-screen-9

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

jmeter-screen-10

Esto muestra claramente el aumento de las solicitudes, en su punto máximo alcanzando alrededor de 400 solicitudes por minuto (RPM) y los tiempos de respuesta permanecen estables en tres segundos. Podemos profundizar en las estadísticas y analizar la transacción que estamos realizando. Si hacemos clic en la vista 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 métodos para llamar a otros sistemas para obtener datos antes de presentarlos al usuario, veríamos un desglose mayor.

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

jmeter-screen-11

New Relic también proporciona una excelente vista de informes sobre los datos de tus aplicaciones, denominada escalabilidad. Este informe puede ser realmente útil para monitorear la capacidad de tus aplicaciones para manejar cargas crecientes. El gráfico muestra el tiempo de respuesta frente a las solicitudes por minuto, y puedes ver claramente si hay alguna degradación en el tiempo de respuesta a medida que aumentan. Esta es una gran herramienta a la que debes referirte a menudo en pruebas de rendimiento como esta, como también en la supervisión del rendimiento de tu aplicación en 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 cuando aumentan las RPM.

jmeter-screen-12

New Relic también ofrece otra vista, la de capacidad. Esto nos permite ver la cantidad de recursos disponibles que utiliza nuestra aplicación. Le indica al desarrollador si la cantidad de instancias que atienden tu aplicación es suficiente para manejar el tipo de carga que estás recibiendo. Esto es vital para asegurarte de que no está funcionando cerca de tu capacidad y tienes la capacidad de manejar cualquier pico de tráfico que pueda ocurrir fuera de tu flujo de tráfico normal. New Relic resume bien la página, junto al análisis de nuestra aplicación aquí, que podemos ver que funciona bien incluso en esta única instancia.

jmeter-screen-13

Conclusión

El objetivo de este tutorial era mostrarte cómo configurar rápidamente los planes de prueba de JMeter para tu aplicación, de modo que puedas probar el rendimiento de tu aplicación antes de entregarla a tus clientes. Este enfoque se puede utilizar en nuevos proyectos, lo que garantiza que la aplicación que vas a entregar esté lista para el tráfico del mundo real. También se puede utilizar en aplicaciones heredadas, lo que te brinda un indicador de rendimiento de referencia para que, a medida que realices cambios en el futuro, puedas ver si el rendimiento de tu aplicación está mejorando o disminuyendo.

Al aprovechar las excelentes herramientas proporcionadas por New Relic, puedes monitorear tu aplicación en línea en tiempo real, pero también tomar tu conjunto de herramientas y aplicarlo a tu propio análisis fuera de línea. Esto te dará a ti, el desarrollador, confianza en tu producto mientras se desarrolla y cuando se lanza a la naturaleza.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.