[NodeJs] Cluster란? with server

Darcy Daeseok YU ·2023년 1월 11일
0

cluster 모듈은 기본적으로 싱글 프로세스로 동작하는 노드가 CPU 코어를 모두 사용할 수 있게 해주는 모듈

예로 들어 코어가 여덟 개인 서버가 있을 때, 노드는 보통 코어를 하나만 활용함.

cluster 모듈을 설정하여 코어 하나당 노드 프로세스 하나가 돌아가게 할 있으나 꼭 여덟 배가 되는 것은 아니지만 코어를 하나만 사용할 때에 비해 성능이 개선됨

단점 : 메모리를 공유하지 못함.(세션을 메모리에 저장하는 경우=>레디스 등의 서버를 도입하여 해결)

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

if (cluster.isMaster) {
  console.log(`마스터 프로세스 아이디: ${process.pid}`);
  // CPU 개수만큼 워커를 생산
  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(`[ clusterServer.js ]::  Server's running on Port :: 8086: `);
    });

  console.log(`${process.pid}번 워커 실행`);
}
profile
React, React-Native https://darcyu83.netlify.app/

0개의 댓글