@BetaApi(value="surface for channel pool sizing is not yet stable") public abstract class ChannelPoolSettings extends Object
ChannelPool behavior.
To facilitate low latency/high throughout applications, gax provides a ChannelPool.
The pool is meant to facilitate high throughput/low latency clients. By splitting load across
multiple gRPC channels the client can spread load across multiple frontends and overcome gRPC's
limit of 100 concurrent RPCs per channel. However oversizing the ChannelPool can lead to
underutilized channels which will lead to high tail latency due to GFEs disconnecting idle
channels.
The ChannelPool is designed to adapt to varying traffic patterns by tracking
outstanding RPCs and resizing the pool size. This class configures the behavior. In general
clients should aim to have less than 50 concurrent RPCs per channel and at least 1 outstanding
per channel per minute.
The settings in this class will be applied every minute.
| Modifier and Type | Class and Description |
|---|---|
static class |
ChannelPoolSettings.Builder |
| Constructor and Description |
|---|
ChannelPoolSettings() |
| Modifier and Type | Method and Description |
|---|---|
static ChannelPoolSettings.Builder |
builder() |
abstract int |
getInitialChannelCount()
The initial size of the channel pool.
|
abstract int |
getMaxChannelCount()
The absolute maximum size of the channel pool.
|
abstract int |
getMaxRpcsPerChannel()
Threshold to start scaling up the channel pool.
|
abstract int |
getMinChannelCount()
The absolute minimum size of the channel pool.
|
abstract int |
getMinRpcsPerChannel()
Threshold to start scaling down the channel pool.
|
abstract boolean |
isPreemptiveRefreshEnabled()
If all of the channels should be replaced on an hourly basis.
|
static ChannelPoolSettings |
staticallySized(int size) |
abstract ChannelPoolSettings.Builder |
toBuilder() |
public abstract int getMinRpcsPerChannel()
When the average of the maximum number of outstanding RPCs in a single minute drop below this threshold, channels will be removed from the pool.
public abstract int getMaxRpcsPerChannel()
When the average of the maximum number of outstanding RPCs in a single minute surpass this threshold, channels will be added to the pool. For google services, gRPC channels will start locally queuing RPC when there are 100 concurrent RPCs.
public abstract int getMinChannelCount()
Regardless of the current throughput, the number of channels will not drop below this limit
public abstract int getMaxChannelCount()
Regardless of the current throughput, the number of channels will not exceed this limit
public abstract int getInitialChannelCount()
During client construction the client open this many connections. This will be scaled up or down in the next period.
public abstract boolean isPreemptiveRefreshEnabled()
The GFE will forcibly disconnect active channels after an hour. To minimize the cost of reconnects, this will create a new channel asynchronuously, prime it and then swap it with an old channel.
public abstract ChannelPoolSettings.Builder toBuilder()
public static ChannelPoolSettings staticallySized(int size)
public static ChannelPoolSettings.Builder builder()