BookinglyTech News
Software

Moleculer vs NestJS: no son rivales, resuelven problemas distintos

El mantenedor de Moleculer compara su framework con NestJS: uno ordena la aplicación, el otro gestiona la capa distribuida. No hay ganador general.

3 min de lecturaDev.to0 vistas

Cuando un backend en Node.js va a tener más de un servicio, pronto aparece la misma pregunta: ¿NestJS o Moleculer? El que la responde en esta comparativa mantiene Moleculer, así que lo razonable sería esperar un argumentario de ventas. No lo hay. Su tesis es que ambos se solapan en el medio, pero parten de problemas distintos, y que la mayoría de equipos debería elegir en función del problema que tiene, no del nombre.

El código completo de la comparación está en ejemplo en GitHub. Sobre él se monta el mismo servicio escrito dos veces: un servicio de productos que corre en su propio proceso, detrás de un gateway HTTP, con dos instancias y NATS como transporte. Las versiones usadas son Node 22, NestJS 12 y Moleculer 0.15.

NestJS es un framework de aplicación. Aporta estructura a una base de código: módulos, inyección de dependencias, decoradores, guards, pipes e interceptores, con un CLI que lo genera. Su paquete @nestjs/microservices permite que esa aplicación escuche en un transporte en vez de HTTP — TCP, Redis, NATS, MQTT, RabbitMQ, Kafka, gRPC — y se comunique con otras aplicaciones. Eso es lo que normalmente se llama microservicio en el mundo NestJS: un proceso Node con patrones de mensaje.

Moleculer es un framework de microservicios, en el sentido de que su interés principal es la capa de sistema distribuido. Trae registro de servicios con descubrimiento, balanceo de carga entre instancias, petición/respuesta y pub/sub sobre transportes conectables, y resiliencia en cada llamada: timeouts, reintentos, circuit breaker, bulkheads, fallbacks. También incorpora caché, validación de parámetros, métricas y trazado distribuido en opciones del broker. Es menos exigente con la organización interna: un servicio es un objeto con acciones y event handlers.

El solapamiento entre ambos se reduce a varios procesos de Node.js hablando entre sí por NATS. En el ejemplo se ve cómo cambia la responsabilidad. En la versión NestJS, el balanceo con dos instancias funciona porque NATS coloca a las dos en el mismo grupo de cola y reparte los mensajes. La validación del id se consigue con un ParseIntPipe sobre el parámetro de la ruta. El timeout de la llamada al servicio se programa a mano con RxJS. Si se detienen las dos instancias y se llama otra vez, el gateway devuelve un 500: eso también hay que gestionarlo. NestJS no pretende darlo todo; la capa de tolerancia a fallos y parte de la comunicación son trabajo tuyo.

Moleculer tiene esas piezas integradas en el broker, pero a cambio no impone la misma estructura de aplicación. Si el problema es ordenar un código que crece, su ayuda es menor; si el problema es operar varios procesos que se llaman entre sí, parte de esa operación ya viene resuelta.

Por eso la comparación no tiene un vencedor general. Tiene una pregunta previa: cuál de los dos problemas tienes delante. La respuesta que da el autor, que mantiene uno de ellos, es que la mayoría de equipos debería elegir con esa lógica. No es una declaración modesta, es la que encaja con la arquitectura de cada uno.