Performance: Handling worker crashes and restart
HIGH IMPACT
This concept affects server responsiveness and stability, impacting how quickly the server recovers from worker failures without blocking requests.
import cluster from 'node:cluster'; import os from 'node:os'; if (cluster.isPrimary) { const numCPUs = os.cpus().length; for (let i = 0; i < numCPUs; i++) { cluster.fork(); } cluster.on('exit', (worker, code, signal) => { console.log(`Worker ${worker.process.pid} died, restarting...`); cluster.fork(); }); } else { // Worker code import('./server.js'); }
import cluster from 'node:cluster'; import os from 'node:os'; if (cluster.isPrimary) { const numCPUs = os.cpus().length; for (let i = 0; i < numCPUs; i++) { cluster.fork(); } cluster.on('exit', (worker, code, signal) => { console.log(`Worker ${worker.process.pid} died`); // No restart logic here }); } else { // Worker code import('./server.js'); }
| Pattern | Worker Availability | Request Delay | Recovery Time | Verdict |
|---|---|---|---|---|
| No restart on crash | Decreases over time | Increases significantly | Manual restart needed | [X] Bad |
| Automatic restart on crash | Maintained at full capacity | Minimal increase | Immediate recovery | [OK] Good |