Programming/node.js2014. 9. 20. 12:14

node.js는 싱글프로세스다 보니까 한개 데몬당 하나의 CPU 코어만 이용한다.


이걸 보완하고 위해서 클러스터를 이용한다.


자세한 api 설명은 아래 내용을 참고 하면 된다.

http://nodejs.org/api/cluster.html


1. 기본 샘플 사용 방법

  1. var cluster = require('cluster');
  2. var http = require('http');
  3. var numCPUs = require('os').cpus().length;
  4. if (cluster.isMaster) {
  5. //cpu갯수만큼 프로세스 실행
  6. for (var i = 0; i < numCPUs; i++) {
  7. cluster.fork();
  8. }
  9. cluster.on('exit', function(worker, code, signal) {
  10. console.log('worker ' + worker.process.pid + ' died');
  11. //서버가 죽었을시 프로세스 자동 추가 실행 또는 알아서 알람sms나 이메일등 모니터링 알람 처리
  12. cluster.fork();
  13. });
  14. } else {
  15. // Workers can share any TCP connection
  16. // In this case its a HTTP server
  17. http.createServer(function(req, res) {
  18. res.writeHead(200);
  19. res.end("hello world\n");
  20. }).listen(8001);
  21. console.log('PID ['+process.pid+'] HTTP SERVER');
  22. }


2. 프로세스 정보

$ node cluster.js PID [1571] HTTP SERVER PID [1573] HTTP SERVER PID [1574] HTTP SERVER PID [1575] HTTP SERVER $ ps aux | grep node root 1569 node cluster.js ### 클러스터 마스터node ###### root 1571 /data/nodejs/bin/node /data/nodejs/www/cluster.js root 1573 /data/nodejs/bin/node /data/nodejs/www/cluster.js root 1574 /data/nodejs/bin/node /data/nodejs/www/cluster.js root 1575 /data/nodejs/bin/node /data/nodejs/www/cluster.js


3. Kill 시 자동으로 프로세스 추가 실행됨

$ kill 1571
worker 1571 died
PID [1617] HTTP SERVER

$ ps aux | grep node
root      1569   node cluster.js
root      1573   /data/nodejs/bin/node /data/nodejs/www/cluster.js
root      1574   /data/nodejs/bin/node /data/nodejs/www/cluster.js
root      1575   /data/nodejs/bin/node /data/nodejs/www/cluster.js
root      1617   /data/nodejs/bin/node /data/nodejs/www/cluster.js


4. 추가적인 참고자료

Node JS 멀티코어 CPU 지원하기 - http://eclipse.or.kr/wiki/특집기사:Node_JS_멀티코어_CPU_지원하기

Cluster모듈에서 Socket.IO 사용하기 - http://blog.outsider.ne.kr/764




Posted by 시니^^