parade

Parade is a cluster manager and also a process monitor for node.js applications.

Usage no npm install needed!

<script type="module">
  import parade from 'https://cdn.skypack.dev/parade';
</script>

README

parade

parade is a cluster manager and also a process monitor for node.js applications. It forks multiple instances (process) of your application based on the number of cores available in the CPU and provides restful endpoints that provide data to track status, memory and cpu for individual node processes and servers.

NPM Version Build Status

Why Parade

  • nodejs runs on single thread which would not fully utilize all cores available in the server. parade is a command line utility which forks multiple worker process of the application to fully utilize all the cores of the server.

  • It helps to keep the application running forever without any downtime by automatically forking new workers whenever a worker process dies.

  • It helps to manage multiple worker processes by giving availability and usage stats on a web api.

  • Its open source and will remain open source.

Installation

$ npm install -g parade

Start the app

$ parade <app.js> [clusters]

Arguments

  • app.js: the main js file of your application
  • clusters (optional): # of worker process to fork. By default, it is set to (# of cores - 1)

Examples

To run your app

$ parade app.js
$ parade app.js 3

To run the example in this module

$ parade example/app.js
$ parade example/app.js 3

Argument 3, worker file name: example/app.js
Number of process forks  : 3
parade web api server running in 5667
Worker is online, Worker ID :  1
Worker is online, Worker ID :  2
Worker is online, Worker ID :  3

Tests

$ npm install
$ npm test

Rest Endpoints

Start the app with parade and test the following rest end points

$ parade app.js

Stats

It gets metrics of all worker processes

http://localhost:5667/api/stats

Sample result

{
  "processStats": [
    {
      "pid": 12335,
      "memory": 39047168,
      "cpu": 0
    },
    {
      "pid": 12337,
      "memory": 42954752,
      "cpu": 0
    }
  ],
  "osStats": {
    "totalMem": 4009091072,
    "freeMem": 1395204096,
    "cpus": [
      {
        "model": "Intel(R) Xeon(R) CPU E5-2670 0 @ 2.60GHz",
        "speed": 2599,
        "times": {
          "user": 125852300,
          "nice": 334700,
          "sys": 59101600,
          "idle": 108351690500,
          "irq": 54764100
        }
      },
      {
        "model": "Intel(R) Xeon(R) CPU E5-2670 0 @ 2.60GHz",
        "speed": 2599,
        "times": {
          "user": 57877800,
          "nice": 343100,
          "sys": 31694400,
          "idle": 108823011800,
          "irq": 0
        }
      }
    ],
    "loadAvg": [
      0,
      0,
      0
    ],
    "uptime": 10986836.192939406,
    "platform": "linux"
  }
}

Status

It gets the status of all worker processes

http://localhost:5667/api/status

Sample result

{
  "1": {
    "workerId": 1,
    "uniqueId": 1,
    "processId": 12335,
    "status": "ONLINE"
  },
  "2": {
    "workerId": 2,
    "uniqueId": 2,
    "processId": 12337,
    "status": "ONLINE"
  }
}

Credits

License

The MIT License