-
Notifications
You must be signed in to change notification settings - Fork 146
Miscellaneous
ringpop provides request routing as a convenience. When a request arrives at your services' public endpoints, you'll want to use ringpop to decide whether request processing should take place on the node that received the request or elsewhere. If elsewhere, ringpop will proxy your request to the correct destination.
Upon arrival of a proxied request at its destination, membership checksums of the sender and receiver will be compared. The request will be refused if checksums differ. Mismatches are to be expected when nodes are entering or exiting the cluster due to deploys, added/removed capacity or failures. The cluster will eventually converge on one membership checksum, therefore, refused requests are best handled by retrying them.
ringpop's request proxy has retries built in and can be tuned using 2 parameters provided at the time ringpop is instantiated: requestProxyMaxRetries
and requestProxyRetrySchedule
or per-request with: maxRetries
and retrySchedule
. The first parameter is an integer representing the number of times a particular request is retried. The second parameter is an array of integer or floating point values representing the delay in between consecutive retries.
ringpop has codified the aforementioned routing pattern in the handleOrProxy
function. It returns true when key
hashes to the "current" node and false otherwise. false
results in the request being proxied to the correct destination. Its usage looks like this:
var opts = {
maxRetries: 3,
retrySchedule: [0, 0.5, 2]
};
if (ringpop.handleOrProxy(key, req, res, opts)) {
// handle request
}