Charlie is a node module keeps of success and failures of network requests and adises on a delay between attempts using the backoff algorithm described in Exponential Backoff in Distributed Systems.
This module skips upto three failures before starting the backoff.
npm install charlie
Before making a request to an origin, let charlie know. This functiont akes three arguments:
keys
: An array of keys used to identify the network resource. For HTTP requests, the keys could be the URI of the resource, or the IP address, or the host name etc.minDelay
: Minimum backoff delay. As suggested in the blog post above, choose a value under which 99% of requests complete.maxDelay
: Maximum backoff delay. Choose an acceptable value based on availability requirements.
This function returns a decision with three fields:
state
: values arego
ornogo
count
: number of failures so far. The count is reset after a success.delay
: currently applied backoff delay
Here is an example.
// Arr is an array of keys used to identify the network resource.
var decision = charlie.ask(arr, minDelay, maxDelay);
if(decision.state === 'go') {
// make the request
}
else {
// don't make the request
console.log('Waiting until ' + decision.delay);
}
When a request succeeds, tell charlie.
charlie.ok(arr);
When the request fails, tell charlie any way.
charlie.notok(arr);
Forget everything about the resource.
charlie.clear(arr);