Multiproceso
en Node.js
Alejandro Fernández
Desarrollador Senior en MediaSmart Mobile
Consultor de Escalabilidad
Vamos a ver hoy
Estrategias: Up & Out
Multiproceso
Módulo cluster
Demo
Estrategias
Minard: Carte Figurative (1869)
Escalado vertical y horizontal
General Sherman vs pinar sueco
Escalado moderno
Múltiples cores
MultiProceso
Controla la máquina
Multicore is eating the world
Fuente: EE Times
Así que, ¿qué piensas hacer con todos esos cores?
El mundo es multicore
Quad core AMD Opteron
Estrategias Multiproceso
Java, Erlang, Objective-C: Multi-threading
C, C++, Go: Explicit multi-process
Python, Ruby: global lock
Node.js: single core
Map Reduce
Divide y vencerás
Divide las tareas entre procesos
Agrega los resultados finales
Reinicia los procesos que no terminen
Node.js Cluster
Repartiendo la carga
Módulo Cluster
API "experimental" para controlar el multiproceso
Un master, varios workers
Los sockets se comparten
Modelo Unix: fork()
var cluster = require('cluster'); var http = require('http'); var numCPUs = require('os').cpus().length; if (cluster.isMaster) { // Fork workers. for (var i = 0; i < numCPUs; i++) { cluster.fork(); } cluster.on('exit', function(worker, code, signal) { console.log('worker ' + worker.process.pid + ' died'); }); } else { http.createServer(function(req, res) { res.writeHead(200); res.end("hello world\n"); }).listen(8000); }Fuente: cluster
Mensajes
Envío:
process.send(message);
Recepción:
Object.keys(cluster.workers).forEach(function(id) {
cluster.workers[id].on('message', messageHandler);
});
De los workers a master
También disponible al revés
Demo
Engelbart: The Mother of All Demos, 1969
Especificación técnica
Calcular los hashes SHA-256 hasta el número dado
Contar el número de letras A en el hexadecimal
Sumar el total de letras en todos los hashes
Comparar con el valor teórico
Solución
Repo count-hashes
$ time node count-as.js 1000000
Dividir con cluster
$ time node multicount-as.js 1000000
¡Tachán!
¡Gracias!
Multiproceso en Node.js
By Alex Fernández
Multiproceso en Node.js
Charla para Node.js Madrid, 2014-11-24: http://www.meetup.com/Node-js-Madrid/events/218214742/
- 3,541