ホームページ > ウェブフロントエンド > jsチュートリアル > NodeJS のマスター/ワーカー パターン: 説明

NodeJS のマスター/ワーカー パターン: 説明

Barbara Streisand
リリース: 2025-01-20 10:33:40
オリジナル
550 人が閲覧しました

Master-Worker Pattern in NodeJS: Explained

JavaScript ベースの開発プラットフォームである Node.js を使用すると、開発者は JavaScript を使用してサーバー側アプリケーションを構築できます。 そのシングルスレッドのイベント駆動型アーキテクチャは主な強みであり、複数のスレッドやプロセスのオーバーヘッドを発生させることなく、多数の同時リクエストを効率的に管理します。

なぜマスター-ワーカーモデルを採用するのでしょうか?

Node.js の利点にもかかわらず、シングルスレッドの性質には制限があります。

  • CPU バウンドの操作: 画像操作や暗号化機能などのタスクは単一スレッドをブロックし、全体的なパフォーマンスに影響を与える可能性があります。
  • 堅牢なエラー処理: エラーまたは例外が原因で単一のスレッドがクラッシュすると、アプリケーション全体が停止します。
  • マルチコアの非効率性: シングルスレッド モデルはマルチコア プロセッサを十分に活用していません。

解決策は? Node.js のマスター/ワーカー パターン (クラスター モードとも呼ばれます)。この分散システム設計では、複数のワーカー プロセスを監視するマスター プロセスを使用します。マスターはワーカーを管理および監視し、ワーカーは個々のタスクを処理します。

マスター-ワーカー パターンの実装

Node.js は、マスター/ワーカーの実装に cluster モジュールを利用します。このモジュールは、複数の子プロセスの作成を簡素化し、制御およびプロセス間通信のメカニズムを提供します。 内訳は次のとおりです:

  1. cluster モジュールをインポートし、現在のプロセスがマスターであるかワーカーであるかを識別します。
  2. マスターの場合は、cluster.fork() を使用してワーカー プロセスを生成し、イベント リスナーをアタッチしてそのステータスとメッセージを監視します。
  3. ワーカー プロセスは特定のタスクを実行し、process.send() 経由でマスターと通信します。

簡単な例

この基本的な例は、cluster モジュールを示します。

<code class="language-javascript">const cluster = require('cluster');
const http = require('http');
const numCPUs = require('os').cpus().length;

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

  // Spawn 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 share a TCP connection (e.g., HTTP server).
  http
    .createServer((req, res) => {
      res.writeHead(200);
      res.end('Hello from Worker!');
    })
    .listen(8000);

  console.log(`Worker ${process.pid} started`);
}</code>
ログイン後にコピー

マスタープロセスは、自分がマスターであるかどうかを判断します (cluster.isMaster を使用)。 その場合、CPU コア数に等しいワーカーが作成されます。各ワーカーは、独自のメモリと V8 インスタンスを持つ独立したプロセスです。 ワーカーは HTTP サーバーを確立し、リクエストをリッスンします。 exit イベントはワーカーのクラッシュを処理し、マスターがワーカーを再起動できるようにします。

高度なアプリケーション: Nginx 負荷分散

Nginx をリバース プロキシおよびロード バランサーとして使用し、リクエストを複数の Node.js プロセスに分散することでスケーラビリティを強化します。

Nginx 構成例:

<code class="language-nginx">http {
    upstream node_cluster {
        server 127.0.0.1:8000;
        server 127.0.0.1:8001;
        server 127.0.0.1:8002;
        # ... more Node.js processes
    }

    server {
        listen 80;

        location / {
            proxy_pass http://node_cluster;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection 'upgrade';
            proxy_set_header Host $host;
            proxy_cache_bypass $http_upgrade;
        }
    }
}</code>
ログイン後にコピー

Nginx は、node_cluster にリストされている Node.js プロセス間でリクエストを均等に分散します。

マスター-ワーカー パターンの利点

  • 負荷分散: 複数の Node.js プロセスが受信リクエストを分散し、スループットを向上させます。
  • フォールト トレランスと可用性: ワーカーのクラッシュは他のワーカーに影響を与えません。マスターが再起動します。
  • CPU に依存したタスクの処理: 複数のワーカーが CPU を集中的に使用する操作を処理し、メイン スレッドのブロックを防ぎます。

考慮すべき点

  • 共有状態: ワーカーは独立しています。 状態共有にはデータベースなどの外部ソリューションが必要です。

要約すると、cluster モジュールを使用して実装された Node.js のマスター/ワーカー パターンは、マルチプロセス アプリケーションを構築し、パフォーマンスと信頼性を向上させるための簡単かつ強力な方法を提供します。


Leapcell: プレミア Node.js ホスティング ソリューション

Master-Worker Pattern in NodeJS: Explained

Leapcell は、Web ホスティング、非同期タスク、Redis 用の次世代サーバーレス プラットフォームです。

多言語互換性

  • Node.js、Python、Go、または Rust を使用して開発します。

無制限の無料プロジェクト展開

  • 使用料金のみお支払いください。リクエストも料金もかかりません。

抜群の費用対効果

  • アイドル料金なしの従量課金制です。
  • 例: $25 は、平均応答時間 60 ミリ秒で 694 万件のリクエストを処理します。

合理化された開発者ワークフロー

  • ユーザーフレンドリーなインターフェースでセットアップが簡単。
  • 自動化された CI/CD パイプラインと GitOps の統合。
  • リアルタイムの監視とログ。

簡単な拡張性と高いパフォーマンス

  • 高い同時実行性のための自動スケーリング。
  • 運用上のオーバーヘッドはゼロです。

ドキュメントで詳細をご覧ください!

Master-Worker Pattern in NodeJS: Explained

X でフォローしてください: @LeapcellHQ


詳しくはブログをご覧ください

以上がNodeJS のマスター/ワーカー パターン: 説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート