
Research
Security News
Lazarus Strikes npm Again with New Wave of Malicious Packages
The Socket Research Team has discovered six new malicious npm packages linked to North Korea’s Lazarus Group, designed to steal credentials and deploy backdoors.
cluster-service
Advanced tools
Turns your single process code into a fault-resilient multi-process service with built-in REST & CLI support
npm install cluster-service
https://npmjs.org/package/cluster-service
The short answer:
Turns your single process code into a fault-resilient multi-process service with
built-in REST & CLI support.
The long answer:
Adds the ability to execute worker processes over N cores for extra service resilience,
includes worker process monitoring and restart on failure, continuous integration,
as well as HTTP & command-line interfaces for health checks, cluster commands,
and custom service commands.
Turning your single process node app/service into a fault-resilient multi-process service with all of the bells and whistles has never been easier!
Your existing application, be it console app or service of some kind:
// server.js
console.log("Hello World");
Now, with a few extra lines of code, you can add considerably resilience and capabilities to your existing services:
// server.js
require("cluster-service").start("./worker", { accessKey: "lksjdf982734" });
// worker.js
console.log("Hello World"); // notice we moved our original app logic to the worker
require("cluster-service").workerReady(); // this new line is required
Now that your service is resilient to worker failure, and utilizing all cores of your machine, lets talk to it.
restart all
or for a full list of commands...
help
Check out Cluster Commands for more details.
When initializing your service, there are a number of options that expose various features:
require("cluster-service").start(workerPath, { accessKey: "123" });
A DPS Cluster Service has two interfaces, the console (stdio), and an HTTP REST API. The two interfaces are treated identical, as console input/output is piped over the REST API. The reason for the piping is that a DPS Cluster Service is intentionally designed to only support one version of the given service running at any one time, and the port binding is the resource constraint. This allows secondary services to act as console-only interfaces as they pipe all input/output over HTTP to the already running service that owns the port. This flow enables the CLI to background processes. The REST API is locked to a "accessKey" expected in the query string. The console automatically passes this key to the REST API, but for external REST API access, the key will need to be known.
{ host: "localhost", port: 11987, accessKey: "lksjdf982734" }
Commands may be granted "inproc" (no trust), "local" (low trust), or "remote" (default). Setting access control at compile time can be done within the command, like so:
// exit.js
module.exports.control = function(){
return "local";
};
Or may be overriden at runtime via:
// server.js
require("cluster-service").control({ "exit": "local" });
Combining the Worker Process (Cluster) model with a CLI piped REST API enables the ability command the already-running service to replace existing workers with workers in a different location. This capability is still a work in progress, but initial tests are promising.
While a Cluster Service may provide its own custom commands, below are provided out-of-the-box. Commands may be disabled by overriding them.
Events are emitted to interested parties.
Creating custom, or overriding commands and events is as simple as:
var cservice = require("cluster-service");
cservice.on("custom", function(evt, cb, arg1, arg2) { // "custom" command
// can also fire custom events
cservice.trigger("on.custom.complete", 1, 2, 3);
};
cservice.on("test", function(evt, cb, testScript, timeout) { // we're overriding the "test" command
// arguments
// do something, no callback required (events may optionally be triggered)
};
// can also issue commands programatically
cservice.trigger("custom", function(err) { /* my callback */ }, "arg1value", "arg2value");
Download and install:
git clone https://github.com/godaddy/node-cluster-service.git
cd node-cluster-service
npm install
Now test:
npm test
View code coverage in any browser:
coverage/lcov-report/index.html
FAQs
Turns your single process code into a fault-resilient multi-process service with built-in REST & CLI support
The npm package cluster-service receives a total of 748 weekly downloads. As such, cluster-service popularity was classified as not popular.
We found that cluster-service demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
The Socket Research Team has discovered six new malicious npm packages linked to North Korea’s Lazarus Group, designed to steal credentials and deploy backdoors.
Security News
Socket CEO Feross Aboukhadijeh discusses the open web, open source security, and how Socket tackles software supply chain attacks on The Pair Program podcast.
Security News
Opengrep continues building momentum with the alpha release of its Playground tool, demonstrating the project's rapid evolution just two months after its initial launch.