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:
- Docker Swarm (orquestación): Permite tener varias instancias de un contenedor y ver como se comporta en casos de balanceos
- Prometheus (métricas)
- Grafana (visualización)
- Spring Boot + Micrometer (instrumentación)
- jMeter
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!!

Leave a Reply
You must be logged in to post a comment.