>  기사  >  웹 프론트엔드  >  클러스터 모듈을 사용하여 Node.js 확장

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

DDD
DDD원래의
2024-09-19 22:30:03861검색

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 < numCPUs; i++) {
    cluster.fork();
  }

  cluster.on('exit', (worker, code, signal) => {
    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. 작업자 충돌 처리 무시

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

건배?

위 내용은 클러스터 모듈을 사용하여 Node.js 확장의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.