Load balancer plugin for superagent
$ npm install superagent-load-balancerView the ./examples directory for working examples.
-
backendsthe backend list-
nameThe name of backend -
hostThe host of backend -
protocolThe protocol, optional, default is 'http' -
ipThe ip of backend, optional -
portThe port of backend, optional -
weightThe 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);-
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 interval -
windoweach check the total count of ping -
thresholdeach 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);Add listener function to healthy, sick, hit 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);
});
balancer.on('hit', (server) => {
console.info(server);
});
const plugin = balancer.plugin();
request.get('/user')
.use(plugin)
.then((res) => {
console.info(res.body);
}).catch(console.error);Get the available server list, which isn't 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());Add the custom load balance algorithm
-
nameThe algorithm's name -
fnThe 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);MIT