Tu primera experiencia con Node.js

1

¿Dónde aprender backend con Node.js actualizado?

2

Todo lo que aprenderás sobre backend con Node.js

3

¿Qué es Node.js?

4

¿Qué es Node.js y para qué sirve?

5

Diferencias entre Node.js y JavaScript

6

Resumen: Diferencias Nodejs y Javascript

7

Instalación de Node.js

8

Arquitectura orientada a eventos

9

Node.js para la web

Manejo y uso de Streams con Node.js

10

Introducción a streams

11

Readable y Writable streams

12

Duplex y Transforms streams

Uso de utilidades de Node.js

13

Sistema operativo y sistema de archivos

14

Administrar directorios y archivos

15

Consola, utilidades y debugging

16

Clusters y procesos hijos

Crea tu primer proyecto en Express.js

17

¿Qué es Express.js y para qué sirve?

18

Creando tu primer servidor con Express.js

19

Request y Response Objects

Aprende a crear un API con REST

20

Anatomía de una API Restful

21

Estructura de una película con Moockaru

22

Implementando un CRUD en Express.js

23

Métodos idempotentes del CRUD

24

Implementando una capa de servicios

Cómo conectarse con librerías externas en Express.js

25

Creación de una BD en MongoAtlas

26

Conexión a MongoAtlas una instancia de MongoDB

27

Conexión con Robot3T y MongoDB Compass a una BD

28

Implementación de las acciones de MongoDB

29

Conexión de nuestros servicios con MongoDB

Conoce como funcionan los Middleware en Express.js

30

¿Qué es un middleware? Capa de manejo de errores usando un middleware

31

Manejo de errores asíncronos y síncronos en Express

32

Capa de validación de datos usando un middleware

33

¿Qué es Joi y Boom?

34

Implementando Boom

35

Implementando Joi

36

Probar la validación de nuestros endpoints

37

Middlewares populares en Express.js

Implementa tests en Node.js

38

Creación de tests para nuestros endpoints

39

Creación de tests para nuestros servicios

40

Creación de tests para nuestras utilidades

41

Agregando un comando para coverage

42

Debugging e inspect

Despliega tu primera aplicación en Express.js

43

Considerando las mejores prácticas para el despliegue

44

Variables de entorno, CORS y HTTPS

45

¿Cómo implementar una capa de manejo de caché?

46

¿Cómo contener tu aplicación en Docker?

47

Despliegue en Now

Conclusiones

48

¿Qué aprendiste en este curso?

No se trata de lo que quieres comprar, sino de quién quieres ser. Aprovecha el precio especial.

Antes: $249

Currency
$209

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Suscríbete

Termina en:

13 Días
23 Hrs
40 Min
34 Seg

Clusters y procesos hijos

16/48

Lectura

Una sola instancia de Node.js corre un solo hilo de ejecución. Para tomar ventaja de los sistemas con multiples core, necesitamos lanzar un cluster de procesos de Node.js para manejar la carga.

...

Regístrate o inicia sesión para leer el resto del contenido.

Aportes 32

Preguntas 1

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Hola Devs, por lo visto muchos de nosotros ha tenido inconvenientes al entender muchas cosas del curso, por esta razon, vengo a tratar de explicarles a aquellos que estan perdidos como yo lo estuve, vamos a ver…

¿Que es un Cluster en NodeJS?
-Segun la documentacion:
El módulo de clúster proporciona una forma de crear procesos secundarios que se ejecutan simultáneamente y comparten el mismo puerto del servidor.

Node.js ejecuta programación de un solo hilo, que es muy eficiente en la memoria, pero para aprovechar los sistemas de múltiples núcleos de las computadoras, el módulo Cluster le permite crear fácilmente procesos secundarios que cada uno ejecuta en su propio hilo único, para manejar la carga.

-Segun mi analisis: El Cluster de NodeJS no es mas que tomar el hilo principal que ejecuta Node y usando los cores del procesador, crear mas hilos de ejecucion, pero que dependen del hilo principal, aun asi Node siguira ejecutandose en un solo hilo, solo que con los Clusters tendra sub-hilos podriamos decir que puedan ejecutar mas procesos, de esta manera manejar la carga al hilo principal.

Ahora bien se preguntaran como lo implemento:

Segun la documentacion dice que se crea de esta manera:

const cluster = require('cluster');
const http = require('http');
const numCPUs = require('os').cpus().length;

if (cluster.isMaster) {
  console.log(`Master ${process.pid} is running`);

  // Fork workers.
  for (let i = 0; i < numCPUs; i++) {
    cluster.fork();
  }

  cluster.on('exit', (worker, code, signal) => {
    console.log(`worker ${worker.process.pid} died`);
  });
} else {
  // Workers can share any TCP connection
  // In this case it is an HTTP server
  http.createServer((req, res) => {
    res.writeHead(200);
    res.end('hello world\n');
  }).listen(8000);

  console.log(`Worker ${process.pid} started`);
}

Ahora bien, se preguntaran, que carajos significa todo eso, que aun estan como el principio; bien, no se me alarmen, vamos a explicar detalladamente por pasos del codigo, comencemos:

La primera parte del codigo es algo que ya todos ustedes saben, traemos los modulos de ‘cluster’: nos permite instanciar nuestro cluster, y ‘http’: nos permite crear nuestro servidor.

const cluster = require("cluster");
const http = require("http");

La siguiente linea de codigo es esta:

const numCPUs = require("os").cpus().length;

-Ustedes saben que hace esta linea, basicamente trae el modulo ‘os’ de Node y nos ayudara mediante el metodo ‘cpus()’ de ver todos los cores que tiene nuestro CPU y ‘length’ nos devolvera cuantos cores existen, esto nos devuelve el numero porque el metodo cpus() es un array de objetos, bien. Ya tenemos el numero de cores.

La siguiente linea de codigo es esta:

if (cluster.isMaster) {
  console.log(`Master ${process.pid} is running`);

Esta linea no es compleja, basicamente lo que dice es: Con una sentencia if preguntamos si el cluster que posee un metodo bool isMaster, si el cluster es el maestro o si es el principal, es decir que no tiene mas clusters instanciados aparte del principal, entonces como no tenemos otras instancias de clusters entrara y lanzara ese mensaje en consola con el numero del proceso que esta corriendo.

Bien, la siguiente linea es esta:

for (let i = 0; i < numCPUs; i++) {
    cluster.fork();
  }

Basicamente lo que hara es, que instanciara o creara tantos hijos como cores tenga, creara un hijo para cada Core del procesador que previamente comprobamos cuantos habian.
Simplemente el metodo fork() hara la instancia, es como en GitHub hacemos Fork a un repositorio, tomamos del repositorio padre una copia, en este caso hacen lo mismo, del cluster padre derivamos los hijos.

En el siguiente codigo dice:

cluster.on("exit", (worker, code, signal) => {
    console.log(`worker ${worker.process.pid} died`);
  });

En este seccion del codigo, abrimos un evento con ‘.on’ y nos asesoramos de cuanto el cluster muera con ‘exit’, el siguiente parametro es una funcion y recibe:
worker: Este es el cluster o la instancia del proceso.
code: Este nos dara el codigo de error si logra pasar algo.
signal: Este nos mostrara quien mato a nuestro cluster o instancia del proceso.
Y vemos en la consola como simplemente imprimimos en caso de que muera o matemos nuestro proceso, un mensaje accediendo al codigo del proceso o pid.

Ahora bien, si se da el caso de que el cluster no se el maestro o el principal hilo, este instanciara nuestro servidor en el puerto 8000 (Bueno, ya esto ustedes lo sabian xd), con el siguiente codigo:

} else {
  http
    .createServer((req, res) => {
      res.writeHead(200);
      res.end("hello world\n");
    })
    .listen(8000);

Por ultimo, imprimimos en consola los workers que hemos instanciados anteriormente, accediendo a su codigo de proceso o pid con el siguiente codigo:

 console.log(`Worker ${process.pid} started`);
}

En resumen, un cluster ayudara al hilo principal a manejar la carga o procesos utilizando los Cores del CPU.
Piensen en esto, el Hilo principal es la empresa y los hilos hijos (procesos hijos) son los empleados. (Espero que me entiendan).

Espero que les haya ayudado mi explicacion, si me he equivocado en algo por favor aclararlo con un comentario para el estudiante que lo lea pueda tenerlo en cuenta.
Recuerden #NuncaPararDeAprender

Aquí pueden ver este mismo ejemplo pero explicado mucho mejor y con más contexto

el metodo cluster.fork(), lo que hace, segun la documentacion de node, aparece un nuevo proceso de la app, es como si hubieras ejecutado " node server.js " pero este codigo ya no se ejecuta como master, si no como proceso hijo

El man a copiado y pegado el código de la documentación de node xD y ya.

Alguien más ha sentido que este ha sido el curso más pobre de todos los cursos que hay en Escuela de JS

Muy poca información en esta clase, de cualquier forma podemos ir a la segura en la documentación oficial (Node/Cluster)[https://nodejs.org/api/cluster.html]

Muchachos, para los que se sienten un poco perdidos, les dejo otros cursos de backend con node que son muy buenos. Pueden hacer este https://platzi.com/clases/fundamentos-node/ primero . Pienso que con este se sacaran todas las dudas que tienen hasta el momento. Y luego pueden tomar este https://platzi.com/clases/backend-js/ . Ademas les dejo otro que es mucho mas avanzado https://platzi.com/clases/practico-node/ . No se frustren, para todo hay solucion! Cualquier duda escribanme

Esto se divide los procesos a ejecutar entre los distintos nucleos disponibles automáticamente? o nosotros tenemos que decirle que hacer en cada uno?

Muy interesante, pero falta mas info, por ejemplo, en que casos usarlo y cuando no, seria bueno un ejemplo de cada uno

Se entiende empero es muy vaga su explicación.

💥💨 Documentación de node https://nodejs.org/api/cluster.html

💨 Acá dejo algo de información adicional: https://nodejspedia.com/es/tutorial/2817/modulo-de-cluster

Según la lógica del código, puedo entender que si no hay un cluster maestro se crea el servidor HTTP. pero en que momento se repite el código. Ya que un if-else es uno u otro pero no ambos.

No fue sino hasta cuando abrí varios tabs apuntando al servidor que entendí este tema. Está genial, aunque siento que hace falta un ejercicio más práctico que le permita a uno ver exactamente cómo podemos controlar cada hilo.

no me quedo claro que es un cluster… 😦

nope, nada, aun perdido, este man no explica bien, he hecho toda la escuela de javascript y todo iba de maravilla hasta que llegue aqui, ando viendo los videos tipo netflix, porque copiar lo que hace el profesor no es aprender…seguire viendo a ver donde llega este curso.

Manejo aun Windows.

no se si esto sirva de ayuda pero al ejecutar el código se daran cuenta que se generan varios procesos que estan vinculados al principal (master).

var numCPUs = require('os').cpus().length;
const {Transform} = require('stream'); 

if (cluster.isMaster) {
  // Fork workers.
  console.log(`Master process ${process.pid} PID`);
  for (var i = 0; i < numCPUs; i++) {
    cluster.fork();
  }
 
  cluster.on('death', function(worker) {
    console.log('worker ' + worker.pid + ' died');
  });
} else {
    const upTransform = new Transform({
        transform(chunk,encoding,callback){
            const text = chunk.toString().toUpperCase();
            this.push(text + `from ${process.pid} PID\n`)
            callback();
        }
    })
    console.log(`Process ${process.pid} pid started`)
    process.stdin.pipe(upTransform).pipe(process.stdout);
}
Master process 1142 PID
Process 1149 pid started
Process 1150 pid started
Process 1156 pid started
Process 1157 pid started
carlos
CARLOS
from 1157 PID
federico
FEDERICO
from 1149 PID

Fernando yo hice primero el de node fundamentals y no me gustó para nada, este chavo explica mucho mejor y tiene ordenados sus archivos. Yo no lo recomiendo

Sería bueno saber en qué situaciones es recomendable usar el cluster, porque por lo que vi en el Curso de Esenciales de Node que dictó Emir Salazar no necesariamente mejora el rendimiento sino que pueden ocasionar todo lo contrario.

No entendi nada, jaja, estaria bueno hacer un video explicativo bien detallado del tema, porque parece muy interesante, saludos!.

Literalmente copio y pego la documentacion de NodeJS sin explicar nada, el peor curso que he tomado de platzi. Proceso a dar una corta explicacion.

El objetivo de usar cluster se hace con el fin de usar todos los hilos de cada procesador para agilizar los procesos o solicitudes que se realizan en el, como ya se ha dicho desde el principio NodeJS corre en un solo hilo esto significa que si un computador tiene octa-core NodeJS esta usando solamente UNO de esos 8 para realizar todas las solicitudes y por mas que sea asincrono en algun momento no va a ser suficiente. Es ahi donde entran los cluster cada cluster.fork() cada proceso hijo tiene su propio motor V8 y su propio uso de memoria esto que significa.

por esta razon este codigo se ejecuta una segunda vez ya que como se indica cada fork() tiene su propio uso de memoria y su propio motor V8, es importante tener en cuenta que el objetivo de esto es que el hilo principal MASTER sea quien maneje los demas hilos, en otras palabras los procesos hijos(cluster.fork) son los encargados del trabajo sucio.

La verdad es que creo que este curso tendrian que renovarlo, las explicaciones son muy vagas y los ejemplos los hace de corrida sin explicar bien algunos detalles… Yo sabia cosas de Node de antes y de express, y a mi me ha costado entender algunas de las cosas que explicaba, no me imaginó alguien que este empezando.

isMaster esta deprecado y sustituido por isPrimary

Yo diría que el clustering en NodeJS es una alternativa interesante para garantizar la atención de peticiones concurrentes y sacar el máximo provecho al hardware (cantidad de núcleos) del servidor. Otra alternativa que he usado sería ejecutar las aplicaciones con PM2 o algún otro process manager, que también cuentan con opciones de clusterización o forking de procesos.

Que interesante esto, para aprovechar los cpus de nuestro servidor.

¿ Entonces, el uso de clusters nos permitirá que los archivos que requeramos ejecutar en nuestro servidor en NodeJs cargué en múltiples procesos ?

En la práctica lo que nos permite es mejorar el rendimiento, ¿No?

hasta ahora esta bien explicado!!

Tengo Windows, entonces seguiré con Express.

Esta seria la opción multi-proceso de Node. Cada vez que se hace cluster.fork() se esta creando un nuevo proceso de V8.

excelente seguimos aprendiendo

Gracias!