Node.js Cluster Module: Scaling Your Applications

Aquib Afzal
Bits and Pieces
Published in
4 min readFeb 12, 2023

--

It’s essential to optimize your code to handle a large number of requests and ensure that your application performs optimally. One way to improve the performance of your Node.js application is by using the cluster module.

In this blog, we’ll discuss what the Node.js cluster module is, how it works, and how you can use it to improve the performance of your applications.

What is the Node.js Cluster Module?

The cluster module is a built-in module in Node.js that allows you to run multiple worker processes to handle the load of a single application. It enables you to take advantage of all the CPU cores of your system, resulting in better performance and scalability.

How Does the Cluster Module Work?

The cluster module works by forking multiple worker processes from a single master process. Each worker process runs as a separate instance of the application and is responsible for handling requests. The master process is responsible for monitoring the worker processes and forking new ones if necessary.

Implementing Cluster Module with Express

To use the cluster module with Express, you first need to import the necessary modules, including the cluster and express modules. Then, you can create an Express application and specify an endpoint to handle requests. In the endpoint, you can perform a CPU-intensive task to demonstrate the effectiveness of the cluster module.

Here is an example of how you can use the cluster module with Express:

const cluster = require('cluster');
const express = require('express');
const numCPUs = require('os').cpus().length;
const app = express();

app.get('/', (req, res) => {

//cpu intensive task
for(let i = 0; i < 1e8; i++){
console.log(i)
}
res.send(`Hello World! from ${process.pid}`);
});

if (cluster.isMaster) {
console.log(`Master ${process.pid} is running`);
for (let i = 0; i < numCPUs; i++) {
cluster.fork();
}
cluster.on('exit', (worker, code, signal) => {
console.log(`worker ${worker.process.pid} died`);
cluster.fork()
});
} else {
app.listen(3000, () => {
console.log(`Server Worker ${process.pid} started`);
});
}

In this example, the cluster.isMaster condition checks if the current process is the master process. If it is, the master process forks multiple worker processes using the cluster.fork() method. If the current process is a worker process, the Express application listens to requests on port 3000.

The master process also listens for the exit event, which is emitted when a worker process dies. In this example, if a worker process dies, the master process forks a new one to replace it.

Benefits of Using the Cluster Module

There are several benefits to using the Node.js cluster module, including:

  • Improved performance: By forking multiple worker processes, you can take advantage of all the CPU cores of your system, resulting in improved performance.
  • Better scalability: By forking new worker processes as necessary, you can handle a large number of requests without sacrificing performance.
  • Improved reliability: If a worker process crashes, the master process can automatically fork a new one, ensuring that your application remains available and reliable.
  • Easy to implement: The cluster module is a built-in module in Node.js, so you don’t need to install any additional packages. Additionally, it’s straightforward to implement and can be added to your existing applications with minimal changes.

In Conclusion, The Node.js cluster module is an excellent tool for improving the performance and scalability of your applications. By forking multiple worker processes, you can take advantage of all the CPU cores of your system and handle a large number of requests efficiently. Additionally, the cluster module provides improved reliability by forking new worker processes if a worker process crashes.

Some Quick Links

JsFramework | CleanCode | LocalStorage | Redis Caching | Node.js Cluster | Array Methods | Callback Function | Promise | Async/Await

Contact Me

LinkedIn | Github

Bonus: Build Node.js Apps with reusable components

Bit’s open-source tool help 250,000+ devs to build apps with components.

Turn any UI, feature, or page into a reusable component — and share it across your applications. It’s easier to collaborate and build faster.

Learn more

Split apps into components to make app development easier, and enjoy the best experience for the workflows you want:

Micro-Frontends

Design System

Code-Sharing and reuse

Monorepo

--

--

Software Developer @ Encora Inc. | Blogger | talks about #javascript #react #nodejs #performance #webdevelopment