「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > クラスターモジュールを使用した Node.js のスケーリング

クラスターモジュールを使用した Node.js のスケーリング

2024 年 11 月 4 日に公開
ブラウズ:768

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  {
    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 負荷の高いタスクにはworker_threadsを使用する
  2. ワーカーに適切なエラー処理を実装する
  3. 従業員の健康状態を監視し、必要に応じて再起動します
  4. 生産には PM2 などのプロセス マネージャーを使用する

避けるべき落とし穴

  1. 共有サーバーは明示的に処理します (Node.js がこれを自動的に行います)
  2. IPC の過剰使用 (ボトルネックになる可能性があります)
  3. ワーカーのクラッシュへの対処を怠っています

Cluster モジュールは水平方向のスケーリングに強力ですが、慎重に使用してください。常にプロファイリングを行って、特定のパフォーマンスのニーズを確実に解決していることを確認してください。

乾杯?

リリースステートメント この記事は次の場所に転載されています: https://dev.to/sarvabharan/scaling-nodejs-with-the-cluster-module-5dm9?1 侵害がある場合は、[email protected] に連絡して削除してください。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3