Articles

Prueba de carga de tu aplicación con Siege

Julio de 2019

etiqueta(s): rails_performance • rails • programación
Tiempo de lectura: 8 minutos
  • Volcado de URL únicas en un archivo de texto
  • una prueba de asedio
  • Recursos adicionales

La última vez, me adentré en el uso de Apache Benchmark para hacer pruebas de rendimiento en una página que requiere autenticación para acceder.

Hoy, descubriremos cómo usar siege para visitar muchas URL únicas en nuestra página y obtener puntos de referencia sobre ese proceso. A continuación, descubriré el perfil de rendimiento en Datadog, y con estas tres herramientas juntas, deberíamos estar listos para hacer algunas mejoras significativas a nuestra aplicación.

Esta serie de publicaciones es el resultado directo de La Guía completa de Rendimiento de Rails de Nate Berkopec, con ayuda de sus screencasts, así como de las Aplicaciones de pruebas de carga de Rails de Steve Grossi con Apache Bench, Siege y JMeter. Armados con estos recursos, y de pie sobre hombros de gigantes, nos vamos.Descripción de sitio

:

Siege es una utilidad de pruebas de carga http y evaluación comparativa. Fue diseñado para permitir a los desarrolladores web medir su código bajo coacción, para ver cómo se levantará para cargarse en Internet. Siege admite autenticación básica, cookies, protocolos HTTP, HTTPS y FTP. Permite a su usuario acceder a un servidor con un número configurable de clientes simulados. Esos clientes ponen el servidor «bajo asedio».»

Puedes obtener asedio con brew install siege.

Lo estoy usando porque puede ejecutar una lista de URL que le das. Imagine que su aplicación es una tienda, y enumera unos pocos miles de productos. Cada producto debe tener una URL única, algo así como , o tal vez . Que product-guid se asegura de que pueda tener direcciones URL únicas, incluso si hay dos elementos con el mismo nombre de producto.

Sabiendo lo que hay en su base de datos, puede concatear fácilmente product-guid y product-name, pegarlo al final de y crear una lista de cien, mil o diez mil URL de productos únicos en su aplicación. Si guardaras esto en un archivo de texto y Siege visitara cada una de esas páginas lo más rápido posible this esto podría parecer una buena prueba de estrés, ¿eh?

Volcando URLs únicas en un archivo de texto #

Es probable que empiece a trabajar en una sesión rails console, para averiguar cómo acceder al esquema de URL de la forma correcta.

Encendí la consola e ingresé:

Busqué en nuestra base de datos de desarrollo para encontrar una cuenta con muchos datos; la cuenta con el id 4887 es una cuenta asociada con la automatización de control de calidad y tiene muchos datos.

campaign.to_param es la forma en que creamos URLs a partir de nuestras campañas: simplemente combina guid con la cadena title, proporcionada por el cliente, y llama a .parameterize en ella. Para este lote de campañas, son generadas mediante programación por nuestro conjunto de pruebas de control de calidad automatizado.

Cuando termine, es posible que vea algo como esto en all_campaign_urls.txt:

Visitando todas esas páginas en una prueba de asedio #

Por lo tanto, puede siege --help y ver una bandera para pasar un archivo:

Ya sé que vamos a necesitar --file y --header, ya que necesitaremos falsificar sesiones autenticadas enviando algunas cookies, el proceso para el que describí la última vez

La bandera --get parece útil:

OBTENER, bajar los encabezados HTTP y mostrar la transacción. Ideal para la depuración de aplicaciones.

Por lo tanto, vamos a iniciar sesión como nuestra cuenta de control de calidad. Dado que estoy ejecutando todo esto localmente, puedo encontrar la dirección de correo electrónico asociada en nuestra base de datos. No conozco la contraseña, por supuesto, pero puedo forzar un restablecimiento de contraseña local, agarrar el correo electrónico en Mailcatcher y configurarlo con la contraseña que quiera.

Permite introducir estos encabezados.

Podemos hacer una solicitud de prueba de rIZO con nuestras cookies. Cuando hago

$ curl -v http://localhost:3000/account/campaigns/dd4dfb48aa-dec-05-drive-by-test

espero ver la página de volver, no una redirección a /users/sign_in

¿Qué puedo esperar de un error en la autenticación de aspecto:

cookies:

_ts_session_id: c86fd1fe38d7a6c56ce1ef5990045057fd827a2c5655094bcce3748d6ee6d3e4: ImRhMDY1YjdjYjMwNGNjNWUxNzFkNDhjOGQ0YzA0OTIwIg%3D%3D--98c228cb35af1a269ee894c22540b81848e2ed09

Y estamos en el negocio:

Observe los códigos de estado de 200? Puedo tail -f log/development.log y ver toda la actividad, lo que indica que las cookies enviadas están asociadas con un usuario autenticado.

Lo primero que noto es que parece que estos son tiempos de carga de página extremadamente largos.

Tengo una carga de Asedio de aproximadamente 162 URL diferentes. Cuando ejecuta siege con la configuración predeterminada, ejecuta 20 usuarios simultáneos. Esto parecía ser un poco demasiado para lo que mi localhost podía manejar, así que intenté reducir el número de usuarios simultáneos primero a dos usuarios y luego a uno.

Para establecer el número de usuarios simultáneos, simplemente agregue la bandera --concurrent=NUM. Todavía estaba inundado de salida, por lo que dejé los usuarios simultáneos en 1 y eliminé todas las páginas de la lista de páginas para cargar, excepto 20. Le di una bandera time de 60 segundos, también: -t 60s

Cuando todo esté dicho y hecho, verás siege haciendo un montón de solicitudes GET cronometradas, como esta:

Con el tiempo, todo se resolverá y obtendrá un resumen de la prueba de carga:

Sí, vale, esto es genial, Josh, pero ¿cómo diablos se supone que haga algo útil con esto?

¡Gran pregunta! Es hora de ver dónde pasa la mayor parte del tiempo nuestra aplicación, en el mundo real. Podríamos hacer más evaluaciones comparativas a nivel local, pero obviamente los datos del mundo real, recopilados de personas reales que interactúan con su aplicación real en producción, son la fuente de datos más útil.

Por lo tanto, pronto escribiré ¡He escrito sobre cómo obtener datos útiles de una aplicación Rails en DataDog!

Deja una respuesta

Tu dirección de correo electrónico no será publicada.