Stack para Testing (Swarm+ jMeter)

Introducción

Es común que cuando se diseña una arquitectura de aplicaciones no baste con el desarrollo de Tests Unitarios o Tests de Integraciones, y se pase a un nivel superior, llamando se así Pruebas de Rendimiento (Performance Testing).

Pruebas de rendimiento

Las Pruebas de Rendimiento son una técnica de testing que consiste en someter un sistema a un volumen de peticiones controlado para analizar cómo se comporta bajo condiciones reales o esperadas de uso.

No se trata solo de “ver si aguanta”, sino de entender:

  • Cuándo empieza a degradarse el rendimiento
  • Cómo responde el sistema cuando crece el tráfico
  • Dónde están los cuellos de botella

Suelen a tender a las siguientes modalidades en base a la pregunta que se quiere contestar:

  • Load testing → tráfico esperado normal
  • Stress testing → llevar el sistema al límite
  • Spike testing → picos bruscos de tráfico
  • Soak testing → carga sostenida durante mucho tiempo

Optimización tras las pruebas

Una vez identificados los límites, el siguiente paso consiste en aplicar mejoras. Entre las más habituales encontramos:

  • Aumento de memoria o CPU
  • Ajustes de configuración (fine tuning)
  • Pools de conexiones
  • Pools de threads

En consecuencia, estas optimizaciones permiten escalar el sistema de forma controlada y eficiente.

Testing Tools

Un entorno de pruebas controlado no es un lujo, es una necesidad.

La combinación de:

De este modo, se obtiene un ecosistema completo de observabilidad en local, muy cercano a producción y completamente reproducible.

Esto se traduce en menos errores, despliegues más seguros y sistemas más robustos.

Para ello encontré el siguiente stack que me vino de lujo para la monitorización de los diferentes micros, para ejecutar en entornos locales de prueba (y un buen maquinón xD):

https://github.com/stefanprodan/swarmprom

https://dockerswarm.rocks/swarmprom

Este stack integra Prometheus, Grafana y múltiples exporters listos para usar.

No obstante, en mi caso decidí simplificarlo ligeramente, eliminando componentes como el alerting o la integración con Slack, ya que no eran necesarios en un entorno local.

También quité Treffic y utilice accesos directo por localhost y sus respectivas apertura de puertos.

jMeter

Por otro lado, la generación de carga es una pieza clave. Para ello, utilicé Apache JMeter, una herramienta ampliamente utilizada en pruebas de rendimiento.

Sin embargo, jMeter suele venir bastante limitado de serie. Por esta razón, es recomendable ampliar sus capacidades mediante plugins.

En particular, una colección muy útil incluye:

  • 3 Basic Graphs
  • 5 Additional Graphs
  • Composite Timeline Graph
  • Custom Thread Groups
  • Parallel Controller & Sampler

Gracias a estos plugins, es posible obtener una visión mucho más completa del comportamiento del sistema.

Resultados de Testing

Finalmente, el resultado es un conjunto de métricas y estadísticas que, aunque mejorables, ofrecen una base sólida para analizar la robustez de la solución planteada.

A partir de aquí, además, se pueden empezar a explotar métricas clave, detectar patrones de comportamiento y tomar decisiones informadas para mejorar el sistema.

Saludos and Happy Codding!!


Comments

Leave a Reply