"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > 클러스터 모듈을 사용하여 Node.js 확장

클러스터 모듈을 사용하여 Node.js 확장

2024-11-04에 게시됨
검색:895

Scaling Node.js with the Cluster Module

클러스터 모듈을 사용하면 Node.js가 멀티 코어 시스템을 활용하여 앱 성능을 향상시킬 수 있습니다. 효과적으로 사용하는 방법을 살펴보겠습니다.

왜 클러스터인가?

  1. 모든 CPU 코어 활용
  2. 앱 반응성 향상
  3. 직원 중복화를 통한 신뢰성 향상

기본 사용법

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

if (cluster.isMaster) {
  console.log(`Master ${process.pid} is running`);

  // Fork workers
  for (let i = 0; i  {
    console.log(`Worker ${worker.process.pid} died`);
  });
} else {
  // Workers can share any TCP connection
  http.createServer((req, res) => {
    res.writeHead(200);
    res.end('Hello World\n');
  }).listen(8000);

  console.log(`Worker ${process.pid} started`);
}

로드 밸런싱

Node.js는 라운드 로빈 접근 방식을 사용하여 로드 밸런싱을 자동으로 처리합니다.

프로세스 간 통신(IPC)

if (cluster.isMaster) {
  const worker = cluster.fork();
  worker.send('Hi there');
} else {
  process.on('message', (msg) => {
    console.log('Message from master:', msg);
  });
}

다운타임 없는 재시작

if (cluster.isMaster) {
  cluster.on('exit', (worker, code, signal) => {
    if (!worker.exitedAfterDisconnect) {
      console.log('Worker crashed. Starting a new worker');
      cluster.fork();
    }
  });

  process.on('SIGUSR2', () => {
    const workers = Object.values(cluster.workers);
    const restartWorker = (workerIndex) => {
      const worker = workers[workerIndex];
      if (!worker) return;

      worker.on('exit', () => {
        if (!worker.exitedAfterDisconnect) return;
        console.log(`Exited process ${worker.process.pid}`);
        cluster.fork().on('listening', () => {
          restartWorker(workerIndex   1);
        });
      });

      worker.disconnect();
    };

    restartWorker(0);
  });
}

모범 사례

  1. CPU 집약적 작업에 작업자 스레드 사용
  2. 작업자에서 적절한 오류 처리 구현
  3. 작업자 상태를 모니터링하고 필요한 경우 다시 시작
  4. 생산을 위해 PM2와 같은 프로세스 관리자를 사용하세요.

피해야 할 함정

  1. 공유 서버는 명시적으로 처리합니다(Node.js는 이 작업을 자동으로 수행함)
  2. IPC 과다 사용(병목 현상이 발생할 수 있음)
  3. 작업자 충돌 처리 무시

클러스터 모듈은 수평적 확장에 강력하지만 신중하게 사용하세요. 특정 성능 요구 사항이 해결되었는지 항상 프로파일링하세요.

건배?

릴리스 선언문 이 글은 https://dev.to/sarvabharan/scaling-nodejs-with-the-cluster-module-5dm9?1에서 복제됩니다.1 침해 내용이 있는 경우, [email protected]에 연락하여 삭제하시기 바랍니다.
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3