クラスターモジュールを使用した Node.js のスケーリング
Cluster モジュールを使用すると、Node.js でマルチコア システムを活用できるようになり、アプリのパフォーマンスが向上します。効果的な使用方法を検討してみましょう。
なぜクラスターなのか?
- すべての CPU コアを使用します
- アプリの応答性を向上させます
- 従業員の冗長化により信頼性を向上
基本的な使い方
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); }); }
ログイン後にコピー
ベストプラクティス
- CPU を集中的に使用するタスクには worker_threads を使用します
- ワーカーに適切なエラー処理を実装する
- 従業員の健康状態を監視し、必要に応じて再起動します
- 本番環境には PM2 などのプロセス マネージャーを使用します
避けるべき落とし穴
- サーバー ハンドルを明示的に共有する (Node.js がこれを自動的に実行します)
- IPC の過剰使用 (ボトルネックになる可能性があります)
- ワーカーのクラッシュへの対処を怠った
Cluster モジュールは水平方向のスケーリングに強力ですが、慎重に使用してください。常にプロファイリングを行って、特定のパフォーマンスのニーズを確実に解決していることを確認してください。
乾杯?
以上がクラスターモジュールを使用した Node.js のスケーリングの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事
R.E.P.O.説明されたエネルギー結晶と彼らが何をするか(黄色のクリスタル)
2週間前
By 尊渡假赌尊渡假赌尊渡假赌
レポ:チームメイトを復活させる方法
4週間前
By 尊渡假赌尊渡假赌尊渡假赌
ハローキティアイランドアドベンチャー:巨大な種を手に入れる方法
3週間前
By 尊渡假赌尊渡假赌尊渡假赌
スプリットフィクションを打ち負かすのにどれくらい時間がかかりますか?
3週間前
By DDD
R.E.P.O.ファイルの保存場所:それはどこにあり、それを保護する方法は?
3週間前
By DDD

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック
Gmailメールのログイン入り口はどこですか?
7315
9


Java チュートリアル
1625
14


CakePHP チュートリアル
1348
46


Laravel チュートリアル
1261
25


PHP チュートリアル
1207
29

