Default MaxEffort used in constructors below.
The aperture load-band balancer balances load to the smallest subset ("aperture") of services so that:
The aperture load-band balancer balances load to the smallest subset ("aperture") of services so that:
smoothWin
, to each service stays within the load band, delimited
by lowLoad
and highLoad
.
2. Services receive load proportional to the ratio of their
weights.Unavailable services are not counted--the aperture expands as needed to cover those that are available.
An efficient strictly least-loaded balancer that maintains an internal heap.
An efficient strictly least-loaded balancer that maintains an internal heap. Note, because weights are not supported by the HeapBalancer they are ignored when the balancer is constructed.
An O(1), concurrent, weighted least-loaded fair load balancer.
An O(1), concurrent, weighted least-loaded fair load balancer. This uses the ideas behind "power of 2 choices" [1] combined with O(1) biased coin flipping through the aliasing method, described in Drv.
the maximum amount of "effort" we're willing to expend on a load balancing decision without reweighing.
The PRNG used for flipping coins. Override for deterministic tests.
[1] Michael Mitzenmacher. 2001. The Power of Two Choices in Randomized Load Balancing. IEEE Trans. Parallel Distrib. Syst. 12, 10 (October 2001), 1094-1104.
Like p2c but using the Peak EWMA load metric.
Like p2c but using the Peak EWMA load metric.
Peak EWMA uses a moving average over an endpoint's round-trip time (RTT) that is highly sensitive to peaks. This average is then weighted by the number of outstanding requests, effectively increasing our resolution per-request. It is designed to react to slow endpoints more quickly than least-loaded by penalizing them when they exhibit slow response times. This load metric operates under the assumption that a loaded endpoint takes time to recover and so it is generally safe for the advertised load to incorporate an endpoint's history. However, this assumption breaks down in the presence of long polling clients.
The window of latency observations.
the maximum amount of "effort" we're willing to expend on a load balancing decision without reweighing.
The PRNG used for flipping coins. Override for deterministic tests.
Constructor methods for various load balancers. The methods take balancer specific parameters and return a LoadBalancerFactory that allows you to easily inject a balancer into the Finagle stack via client configuration.