superagent-load-balancer
v2.0.3
Published
load balancer plugin for superagent
Maintainers
Readme
superagent-load-balancer
Load balancer plugin for superagent
Installation
$ npm install superagent-load-balancerExamples
View the ./examples directory for working examples.
API
get
backendsthe backend listnameThe name of backendhostThe host of backendprotocolThe protocol, optional, default is 'http'ipThe ip of backend, optionalportThe port of backend, optionalweightThe weight of backend, it is for 'round-robin'backupSet the backend as backup, optional
typebalance algorithm:url,leastconn,round-robin,first,url-path, default isround-robin
const request = require('superagent');
const Balancer = require('superagent-load-balancer');
const balancer = new Balancer([
{
host: 'domain.com',
ip: '192.168.1.1',
port: 8080,
weight: 10,
},
{
host: 'domain.com',
ip: '192.168.1.2',
port: 8080,
weight: 2,
},
]);
const plugin = balancer.plugin();
request.get('/user')
.use(plugin)
.then((res) => {
console.info(res.body);
})
.catch(console.error);startHealthCheck
options{ping: function, interval: ms}pingping function, the function will return promise. If resolve, the backend is healthy. If reject, the backend is sick.mscheck intervalwindoweach check the total count of pingthresholdeach check the healthy count is bigger than threshold, the backend is healthy. Otherwise is sick
const request = require('superagent');
const Balancer = require('superagent-load-balancer');
const balancer = new Balancer([
{
host: 'domain1.com',
weight: 10,
},
{
host: 'domain2.com',
weight: 2,
},
]);
const ping = (backend) => {
const url = `http://${backend.host}/ping`;
return request.get(url).timeout(300);
};
balancer.startHealthCheck({
ping,
});
const plugin = balancer.plugin();
request.get('/user')
.use(plugin)
.then((res) => {
console.info(res.body);
}).catch(console.error);on
Add listener function to healthy or sick event
const request = require('superagent');
const Balancer = require('superagent-load-balancer');
const balancer = new Balancer([
{
host: 'domain1.com',
weight: 10,
},
{
host: 'domain2.com',
weight: 2,
},
]);
const ping = (backend) => {
const url = `http://${backend.host}/ping`;
return request.get(url).timeout(300);
};
balancer.startHealthCheck({
ping,
});
balancer.on('healthy', (server) => {
console.info(server);
});
balancer.on('sick', (server) => {
console.info(server);
});
const plugin = balancer.plugin();
request.get('/user')
.use(plugin)
.then((res) => {
console.info(res.body);
}).catch(console.error);getAvailableServers
Get the available server list. It is not disabled and backup.
const request = require('superagent');
const Balancer = require('superagent-load-balancer');
const balancer = new Balancer([
{
host: 'domain1.com',
weight: 10,
},
{
host: 'domain2.com',
weight: 2,
backup: true,
},
]);
const ping = (backend) => {
const url = `http://${backend.host}/ping`;
return request.get(url).timeout(300);
};
balancer.startHealthCheck({
ping,
});
// [ { id: '51d27b36cb9c34ff', host: 'domain1.com', weight: 10 } ]
console.info(balancer.getAvailableServers());addAlgorithm
Add the custom load balance algorithm
nameThe algorithm's namefnThe algorithm, it should return an integer.
const request = require('superagent');
const Balancer = require('superagent-load-balancer');
const balancer = new Balancer([
{
host: 'domain1.com',
},
{
host: 'domain2.com',
},
], 'getByUrl');
balancer.addAlgorithm('getByUrl', (request) => {
return request.url.length;
});
const plugin = balancer.plugin();
request.get('/user')
.use(plugin)
.then((res) => {
console.info(res.body);
})
.catch(console.error);License
MIT
