@Contract(threading=SAFE) public class AIMDBackoffManager extends AbstractBackoff
The AIMDBackoffManager
applies an additive increase,
multiplicative decrease (AIMD) to managing a dynamic limit to
the number of connections allowed to a given host. You may want
to experiment with the settings for the cooldown periods and the
backoff factor to get the adaptive behavior you want.
Generally speaking, shorter cooldowns will lead to more steady-state variability but faster reaction times, while longer cooldowns will lead to more stable equilibrium behavior but slower reaction times.
Similarly, higher backoff factors promote greater utilization of available capacity at the expense of fairness among clients. Lower backoff factors allow equal distribution of capacity among clients (fairness) to happen faster, at the expense of having more server capacity unused in the short term.
Constructor and Description |
---|
AIMDBackoffManager(org.apache.hc.core5.pool.ConnPoolControl<HttpRoute> connPerRoute)
Constructs an
AIMDBackoffManager with the specified
ConnPoolControl and Clock . |
Modifier and Type | Method and Description |
---|---|
protected int |
getBackedOffPoolSize(int curr)
Returns the backed-off pool size based on the current pool size.
|
void |
setBackoffFactor(double d)
Sets the factor to use when backing off; the new
per-host limit will be roughly the current max times
this factor.
|
backOff, getBackoffFactor, getCap, getConnPerRoute, getCoolDown, getLastRouteBackoffs, getLastRouteProbes, getLastUpdate, getTimeInterval, probe, setCoolDown, setPerHostConnectionCap
public AIMDBackoffManager(org.apache.hc.core5.pool.ConnPoolControl<HttpRoute> connPerRoute)
AIMDBackoffManager
with the specified
ConnPoolControl
and Clock
.
This constructor is primarily used for testing purposes, allowing the
injection of a custom Clock
implementation.
connPerRoute
- the ConnPoolControl
that manages
per-host routing maximumsprotected int getBackedOffPoolSize(int curr)
getBackedOffPoolSize
in class AbstractBackoff
curr
- the current pool sizepublic void setBackoffFactor(double d)
Math.floor
is applied in the
case of non-integer outcomes to ensure we actually
decrease the pool size. Pool sizes are never decreased
below 1, however. Defaults to 0.5.d
- must be between 0.0 and 1.0, exclusive.Copyright © 1999–2021 The Apache Software Foundation. All rights reserved.