Cluster モジュールを使用すると、Node.js でマルチコア システムを活用できるようになり、アプリのパフォーマンスが向上します。効果的な使用方法を検討してみましょう。
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 は、ラウンドロビン アプローチを使用して負荷分散を自動的に処理します。
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); }); }
Cluster モジュールは水平方向のスケーリングに強力ですが、慎重に使用してください。常にプロファイリングを行って、特定のパフォーマンスのニーズを確実に解決していることを確認してください。
乾杯?
以上がクラスターモジュールを使用した Node.js のスケーリングの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。