Estrellé mi servidor con Promise.all() - Así es como construí un Fuzzer de 121 RPS en su lugar

Descubre cómo construí un potente Fuzzer que logra 121 peticiones por segundo utilizando Promise.all(). Aprende cómo mejorar tus pruebas de seguridad informática de manera eficiente.

domingo, 14 de diciembre de 2025 • 4 min de lectura • Equip Q2BSTUDIO

Cómo construí un Fuzzer de 121 RPS con Promise.all()

Estrellé mi servidor con Promise.all() - Así es como construí un Fuzzer de 121 RPS en su lugar

Cuando empecé a desarrollar 404fuzz mi objetivo fue simple y ambicioso: velocidad. Velocidad de verdad. Pronto descubrí que en Node.js la rapidez no consiste en lanzar más peticiones a la vez sino en comprender cómo funciona realmente el entorno de ejecución.

El error clásico fue usar Promise.all para ejecutar miles de solicitudes a la vez. La idea parecía obvia cargar una lista de rutas y dispararlas todas al mismo tiempo pero el resultado fue un colapso: mi equipo se quedó sin memoria y el servidor objetivo estuvo a punto de caer. ¿Por qué falló? Porque Promise.all no crea paralelismo verdadero en CPU sino que abre miles de conexiones concurrentes, consume mucha memoria y genera una carga incontrolable sobre el sistema y sobre el objetivo.

Es importante entender la diferencia entre concurrencia y paralelismo. Node.js es concurrente y no paralela por defecto. El event loop gestiona callbacks y operaciones IO sin bloquear la CPU pero todo corre en un solo hilo de ejecución, así que abrir 10 000 conexiones simultáneas no significa 10 000 hilos ejecutando trabajo, significa 10 000 sockets abiertos, más uso de memoria y más sobrecarga en el sistema operativo.

La solución intermedia fue implementar un modelo de cola con concurrencia limitada. En lugar de disparar todo al mismo tiempo se crea una cola de peticiones y se limita cuántas están activas simultáneamente. Con ese enfoque la memoria se mantiene estable, el servidor objetivo no se colapsa y el uso de recursos es predecible. Un gestor de cola sencillo incrementa un contador cuando arranca una tarea y lo decrementa al terminar, liberando la siguiente tarea en espera.

Pero aún quería más rendimiento. Node.js es de un solo hilo y en mi equipo con procesador i5 tenía múltiples núcleos desaprovechados. La siguiente optimización fue aprovechar múltiples procesos con el módulo cluster de Node.js. Un proceso primario reparte el trabajo entre varios trabajadores y cada trabajador ejecuta su propia cola con un límite de concurrencia.

Al diseñar ese sistema descubrí que el rendimiento no escala linealmente con más procesos. Aparecía overhead de comunicación entre procesos que penalizaba el rendimiento cuando había demasiados workers. La clave fue encontrar el punto óptimo entre número de procesos y concurrencia por proceso. Tras pruebas encontré que en mi hardware la mejor configuración fue pocos trabajadores con alta concurrencia por trabajador, alcanzando un pico de 121 requests por segundo en un portátil modesto manteniendo la memoria estable y un uso de CPU eficiente.

Resumen de la lección: no existe una receta única. Dos parámetros principales influyen en el rendimiento número de workers y concurrencia por worker. Si pones demasiados workers pagas un coste en IPC inter procesos. Si pones un solo proceso y demasiada concurrencia puedes saturar el event loop o las conexiones. Experimentar y medir es imprescindible.

Resultados concretos en mis pruebas hardware Dell 7290 i5 8th Gen 8GB RAM SSD 256GB pico 121 RPS memoria estable alrededor de 200 300 MB uso de CPU eficiente distribuyendo carga en los cores disponibles. Comparación de enfoques Promise.all enfoque ingenuo explotaba memoria y provocaba caída cola con un solo proceso rendimiento moderado cola más cluster con configuración óptima mejor rendimiento y estabilidad.

Buenas prácticas recomendadas limitar la concurrencia en clientes HTTP implementar una cola con backpressure usar clustering de forma mesurada monitorizar memoria y sockets ajustar parámetros en función del objetivo y del hardware y documentar resultados para reproducibilidad.

En Q2BSTUDIO aplicamos estos principios no solo en herramientas de seguridad y testing sino también en proyectos de software a medida y aplicaciones a medida para clientes que requieren rendimiento, escalabilidad y seguridad. Como empresa de desarrollo de software y especialistas en inteligencia artificial ciberseguridad y servicios cloud aws y azure ofrecemos soluciones que van desde la creación de aplicaciones corporativas hasta la integración de agentes IA y herramientas de inteligencia de negocio como Power BI.

Si te interesa reforzar la seguridad y realizar pruebas de penetración profesionales podemos ayudar con servicios de pentesting y hardening, descubre más sobre nuestras soluciones de ciberseguridad y pentesting. Si tu objetivo es construir soluciones robustas y escalables consulta nuestros servicios de aplicaciones a medida y software a medida.

Además de rendimiento y seguridad trabajamos en proyectos de inteligencia artificial para empresas, automatización de procesos, servicios de cloud AWS y Azure y soluciones de Business Intelligence para convertir datos en decisiones accionables. Palabras clave en las que somos expertos incluyen aplicaciones a medida software a medida inteligencia artificial ciberseguridad servicios cloud aws y azure servicios inteligencia de negocio ia para empresas agentes IA y power bi.

¿Qué sigue para 404fuzz? Ahora que conseguimos velocidad el siguiente paso es añadir inteligencia adaptativa aprendizaje a partir de respuestas y estrategias de descubrimiento más inteligentes. En Q2BSTUDIO creemos que combinar rendimiento con inteligencia es la vía para construir herramientas útiles en ambientes reales.

Si quieres que desarrollemos una solución a medida que incluya pruebas de seguridad optimización de rendimiento o integración de IA ponte en contacto con nosotros y te mostraremos cómo transformar requisitos en software confiable y escalable.

Construido con ingeniería práctica pruebas iterativas y mucha experimentación. Si te ayudó esta explicación y quieres profundizar en rendimiento concurrente y buenas prácticas para Node.js hablamos y lo adaptamos a tu caso.

UNA PAUSA?

Juga una estona abans de marxar

ELS NOSTRES SERVEIS

Com et podem ajudar

Tens un projecte en ment?

Explica'ns la teva visió i la convertim en una solució de programari. Sigui quin sigui l'abast, fem realitat la teva idea.