Lab 07: Cluster & IPC
Step 1: Cluster Architecture
Master Process (cluster.isMaster)
│
├── Worker 1 (cluster.fork()) ─── IPC channel ──→ Master
├── Worker 2 (cluster.fork()) ─── IPC channel ──→ Master
├── Worker 3 (cluster.fork()) ─── IPC channel ──→ Master
└── Worker 4 (cluster.fork()) ─── IPC channel ──→ Master
OS-level: Workers share listening port via file descriptor passing
Master handles ACCEPT for Round-Robin schedulingStep 2: Basic Cluster Setup
// file: cluster-basic.js
const cluster = require('cluster');
const os = require('os');
if (cluster.isPrimary) { // cluster.isMaster deprecated in Node 16+
const numWorkers = Math.min(os.cpus().length, 4);
console.log(`Master ${process.pid} starting ${numWorkers} workers`);
for (let i = 0; i < numWorkers; i++) {
const worker = cluster.fork();
console.log(` Forked worker ${worker.process.pid}`);
}
cluster.on('exit', (worker, code, signal) => {
console.log(`Worker ${worker.process.pid} died (code: ${code}, signal: ${signal})`);
console.log('Forking replacement...');
cluster.fork(); // auto-restart
});
cluster.on('online', (worker) => {
console.log(`Worker ${worker.process.pid} is online`);
});
} else {
// Worker process
const http = require('http');
const server = http.createServer((req, res) => {
res.writeHead(200);
res.end(`Response from worker ${process.pid}\n`);
});
server.listen(8080, () => {
console.log(`Worker ${process.pid} listening on :8080`);
});
}Step 3: IPC Messaging — Master ↔ Worker
Step 4: Sticky Sessions (Hash by IP)
Step 5: Scheduling Policies
Step 6: Graceful Worker Restart on SIGTERM
Step 7: Worker Health Monitoring
Step 8: Capstone — Production Cluster with Zero-Downtime Deploy
Summary
Concept
API
Description
Last updated
