Node.js Cluster 모드 사용해보기
2019-07-13 15:51:36

Node.js는 기본적으로 CPU를 1개만 쓰기 때문에 멀티 코어 이상인 PC에선

클러스터 모드로 앱을 돌려야 모든 CPU를 사용을 한다고 한다.

PM2

로컬 또는 AWS EC2에서 app을 돌릴 때 주로 PM2로 앱을 구동 하는데 모듈에서 클러스터 모드를 편리하게 지원을 한다.

1
pm2 start index.js -i max # cpu core 수 만큼 프로세스 생성하고 실행.

결과

코드

예로 AWS ElasticBeanstalk 같은 경우 PM2로 구동을 하는게 아니기 때문에

아래와 같은 코드를 돌려야 한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

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

if (!process.env.PORT) {
throw new Error('process.env.PORT not set');
}

const CLUSTER_ENV_VARS = {};

if (cluster.isMaster) { // 마스터 프로세스인 경우.
fork();
} else {
require('./index.js');
}


function fork() {

for (let i = 0; i < numCPUs; i++) {
const envClone = JSON.parse(JSON.stringfy(process.env)) // 환경 카피 해서 모든 프로세스 통일.
envClone.PORT = parseInt(process.env.PORT) + i; // 포트도 나누자

const worker = cluster.fork(envClone);
CLUSTER_ENV_VARS[worker.id] = envClone;
}

cluster.on('exit', (worker, code, signal) => {
console.log('worker %s died, forking again', worker.process.pid);
const new_worker = cluster.fork(CLUSTER_ENV_VARS[worker.id]);
CLUSTER_ENV_VARS[new_worker.id] = CLUSTER_ENV_VARS[worker.id];
});
}

빈스톡

Prev
2019-07-13 15:51:36
Next