node.js는 싱글프로세스다 보니까 한개 데몬당 하나의 CPU 코어만 이용한다.
이걸 보완하고 위해서 클러스터를 이용한다.
자세한 api 설명은 아래 내용을 참고 하면 된다.
http://nodejs.org/api/cluster.html
1. 기본 샘플 사용 방법
- var cluster = require('cluster');
- var http = require('http');
- var numCPUs = require('os').cpus().length;
- if (cluster.isMaster) {
- //cpu갯수만큼 프로세스 실행
- for (var i = 0; i < numCPUs; i++) {
- cluster.fork();
- }
- cluster.on('exit', function(worker, code, signal) {
- console.log('worker ' + worker.process.pid + ' died');
- //서버가 죽었을시 프로세스 자동 추가 실행 또는 알아서 알람sms나 이메일등 모니터링 알람 처리
- cluster.fork();
- });
- } else {
- // Workers can share any TCP connection
- // In this case its a HTTP server
- http.createServer(function(req, res) {
- res.writeHead(200);
- res.end("hello world\n");
- }).listen(8001);
- console.log('PID ['+process.pid+'] HTTP SERVER');
- }
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