티스토리 뷰

Nodejs multi core cluster 사용하기.

Single Thread 기반의 Nodejs지만 cluster를 사용하여 Multi Thread형태의 구조로 동작이 가능하게 할 수 있습니다.

바로 node cluster를 이용하면 됩니다.


간단한 예제 코드를 통해 확인 해봅니다.

app.js

var cluster = require('cluster'); var numCPUs = require('os').cpus().length; var express = require('express'); //Parent Process if( cluster.isMaster ){   var workers = {};   for (var i=0; i < numCPUs; i++) spawn();   function spawn() {     worker = cluster.fork();     workers[worker.id] = worker;     console.log(worker.process.pid + ' is Online');     worker.on('message', messageHandler);   }   function messageHandler(msg) {     if (msg.cmd && msg.cmd == 'rocksea') {       for (var worker in workers) {         workers[worker].process.send({           cmd : 'rocksea'         });       }     }   }   cluster.on('exit', function(worker) {     console.log('worker ' + worker.process.pid + ' exited');     delete workers[worker.id];     spawn();   }); } else { // Child process.   process.on('message', function(msg) {     if (msg.cmd) {       if (msg.cmd == 'rocksea') {         console.log("################### Rocksea IPC Call");         console.log('Worker ' + cluster.worker.id + ' running!');       }     }   });   var app = express();   app.listen(3333);   app.get('/', function (req, res) {     res.send('Hello World!!  Cluster is '+ cluster.worker.id);     //IPC Call     process.send({ cmd : "rocksea"});   });   console.log("############## Process Running!!");



위 예제 코드로 테스트 할 수 있는 것들은 아래의 두가지 입니다.

1. Fork를 사용하여 Child Process를 생성.

2. process.send를 이용하여 Process간 IPC 통신 테스트


Single Thread의 경우 Process Tree


Multi Thread의 경우 Process Tree


worker가 2배로 늘어나 있는것을 확인 해 볼 수 있으며 Throughput 또한 이와 비례하여 늘어 나는 것을 확인 할 수 있습니다.

부족한 부분은 아래의 링크를 참조하시기 바랍니다.

참조 URL : http://rowanmanning.com/posts/node-cluster-and-express/

.by rocksea



댓글