JavaScript ベースの開発プラットフォームである Node.js を使用すると、開発者は JavaScript を使用してサーバー側アプリケーションを構築できます。 そのシングルスレッドのイベント駆動型アーキテクチャは主な強みであり、複数のスレッドやプロセスのオーバーヘッドを発生させることなく、多数の同時リクエストを効率的に管理します。
Node.js の利点にもかかわらず、シングルスレッドの性質には制限があります。
解決策は? Node.js のマスター/ワーカー パターン (クラスター モードとも呼ばれます)。この分散システム設計では、複数のワーカー プロセスを監視するマスター プロセスを使用します。マスターはワーカーを管理および監視し、ワーカーは個々のタスクを処理します。
Node.js は、マスター/ワーカーの実装に cluster
モジュールを利用します。このモジュールは、複数の子プロセスの作成を簡素化し、制御およびプロセス間通信のメカニズムを提供します。 内訳は次のとおりです:
cluster
モジュールをインポートし、現在のプロセスがマスターであるかワーカーであるかを識別します。cluster.fork()
を使用してワーカー プロセスを生成し、イベント リスナーをアタッチしてそのステータスとメッセージを監視します。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 をリバース プロキシおよびロード バランサーとして使用し、リクエストを複数の 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 プロセス間でリクエストを均等に分散します。
要約すると、cluster
モジュールを使用して実装された Node.js のマスター/ワーカー パターンは、マルチプロセス アプリケーションを構築し、パフォーマンスと信頼性を向上させるための簡単かつ強力な方法を提供します。
Leapcell は、Web ホスティング、非同期タスク、Redis 用の次世代サーバーレス プラットフォームです。
多言語互換性
無制限の無料プロジェクト展開
抜群の費用対効果
合理化された開発者ワークフロー
簡単な拡張性と高いパフォーマンス
ドキュメントで詳細をご覧ください!
X でフォローしてください: @LeapcellHQ
詳しくはブログをご覧ください
以上がNodeJS のマスター/ワーカー パターン: 説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。