首頁 > web前端 > js教程 > 使用 Cluster 模組擴充 Node.js

使用 Cluster 模組擴充 Node.js

DDD
發布: 2024-09-19 22:30:03
原創
969 人瀏覽過

Scaling Node.js with the Cluster Module

Cluster 模組讓 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. 使用worker_threads來執行CPU密集型任務
  2. 在工作人員中實作正確的錯誤處理
  3. 監控工人的健康狀況並在必要時重新啟動
  4. 使用 PM2 等流程管理器進行生產

要避免的陷阱

  1. 明確共享伺服器句柄(Node.js 自動執行此操作)
  2. 過度使用IPC(可能成為瓶頸)
  3. 忽視處理工人崩潰

叢集模組對於水平擴展非常強大,但要謹慎使用。始終進行分析以確保它能夠解決您的特定效能需求。

乾杯?

以上是使用 Cluster 模組擴充 Node.js的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板