본문 바로가기
인턴(2023.07. ~ 2023.12.)/스크립트 송출 서버 개발

Node.js - Cluster

by xladmt 2023. 8. 9.

cluster란?

기본적으로 싱글 스레드인 노드가 CPU 코어를 모두 사용할 수 있게 해주는 모듈

 

[특징]

- 포트를 공유하는 노드 프로세스를 여러 개 둘 수 있음

- 요청이 많이 들어왔을 때 병렬로 실행된 서버의 개수만큼 요청이 분산됨 -> 서버에 무리가 덜 담

- 예) 코어가 8개인 서버가 있을 경우 노드는 기본적으로 코어를 하나만 활용함. 그러나 cluster 모듈을 설정하여 코어 하나당 노드 프로세스 하나가 돌아가게 할 수 있음. 성능이 꼭 8배가 되진 않지만 하나만 사용할 때에 비해 당연히 성능이 개선됨.

- 단점) 컴퓨터 자원(메모리, 세션 등) 공유 못함. 각각 독립적인 프로세스를 띄우는 것이기 때문에 서로 공유가 안 됨.

            -> Redis 등의 서버를 도입하여 해결 가능

 

 

[코드]

const cluster = require('cluster');
const http = require('http');

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

if (cluster.isMaster) { // 마스터
    console.log(`마스터 프로세스 아이디: ${process.pid}`);
    for (let i = 0; i < numCPUs; i += 1) {
        cluster.fork();
    }
    // 워커가 종료되었을 때
    cluster.on('exit', (worker, code, signal) => {
        console.log(`${worker.process.pid}번 워커가 종료되었습니다.`);
        console.log('code', code, 'signal', signal);
        cluster.fork();
    });
} else { //워커
    http.createServer((req, res) => {
        res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
        res.write('<h1>Hello Node!</h1>');
        res.end('<p>Hello Cluster!</p>');
        setTimeout(() => { // 워커가 존재하는지 확인하기 위해 1초마다 강제 종료
            process.exit(1);
        }, 1000);
    }).listen(8086);

    console.log(`${process.pid}번 워커 실행`); // 프로세스 고유 자식 id
}

 

[결과]

 

cluster.fork()

fork는 프로세스를 복제하는 방법-> 자식 프로세스가 됨

 

클러스터에는 마스터 프로세스와 워커 프로세스가 있다. 마스터 프로세스는 CPU 개수만큼 워커 프로세스를 만들고, 8086번 포트에서 대기한다. 요청이 들어오면 만들어진 워커 프로세스에 요청을 분배한다. 

 

마스터 프로세스 : 부모 프로세스

워커 프로세스 : 자식 프로세스

                       -> 각 자식 프로세스 안에 스레드가 여러 개 구성되어 있음 

 

 

round robin 방식

 

 


CPU 코어와 스레드

 

 

 

 

[참고]

https://programmingsummaries.tistory.com/384

 

[NodeJS] 클러스터(cluster)에 대한 정리

들어가며 node.js는 기본적으로 하나의 프로세스가 32bit에서는 512MB의 메모리, 64Bit에서는 1.5GB 메모리를 사용하도록 제한되어 있다. V8엔진의 제한을 그대로 반영한 것인데, 물론 설정으로 더 늘릴

programmingsummaries.tistory.com

https://lgphone.tistory.com/67

 

Node.js - 클러스터 (Cluster)

cluster 모듈은 기본적으로 싱글 프로세스로 동작하는 노드가 CPU 코어를 모두 사용할 수 있게 해주는 모듈이다. 포트를 공유하는 노드 프로세스를 여러 개 둘 수 있으므로 요청이 많이 들어올 시

lgphone.tistory.com

https://inpa.tistory.com/entry/NODE-%F0%9F%93%9A-cluster-%EB%AA%A8%EB%93%88-%EC%BD%94%EC%96%B4%EB%A5%BC-%EC%B6%94%EA%B0%80%EB%A1%9C-%EC%82%AC%EC%9A%A9

 

[NODE] 📚 클러스터(cluster) 모듈 - 멀티 프로세서

Cluster 기본적으로 싱글 스레드인 노드가 CPU 코어를 모두 사용할 수 있게 해주는 모듈 포트를 공유하는 노드 프로세스를 여러 개 둘 수 있음 요청이 많이 들어왔을 때 병렬로 실행된 서버의 개수

inpa.tistory.com

 

'인턴(2023.07. ~ 2023.12.) > 스크립트 송출 서버 개발' 카테고리의 다른 글

Node.js http 모듈  (0) 2023.08.17
인메모리 컴퓨팅  (0) 2023.08.10
HTTP와 HTTPS  (0) 2023.08.09
웹 서비스 구조  (0) 2023.08.08
Node.js 란?  (0) 2023.08.08