Package io.grpc.xds
Class WeightedRoundRobinLoadBalancer
- java.lang.Object
-
- io.grpc.LoadBalancer
-
- io.grpc.util.MultiChildLoadBalancer
-
- io.grpc.xds.WeightedRoundRobinLoadBalancer
-
final class WeightedRoundRobinLoadBalancer extends io.grpc.util.MultiChildLoadBalancer
ALoadBalancer
that provides weighted-round-robin load-balancing over theEquivalentAddressGroup
s from theNameResolver
. The subchannel weights are determined by backend metrics using ORCA. To use WRR, users may configure through channel serviceConfig. Example config:String wrrConfig = "{\"loadBalancingConfig\":" + "[{\"weighted_round_robin\":{\"enableOobLoadReport\":true, " + "\"blackoutPeriod\":\"10s\"," + "\"oobReportingPeriod\":\"10s\"," + "\"weightExpirationPeriod\":\"180s\"," + "\"errorUtilizationPenalty\":\"1.0\"," + "\"weightUpdatePeriod\":\"1s\"}}]}"; serviceConfig = (Map<String, ?>) JsonParser.parse(wrrConfig); channel = ManagedChannelBuilder.forTarget("test:///lb.test.grpc.io") .defaultServiceConfig(serviceConfig) .build();
localityLbPolicies: - customPolicy: name: weighted_round_robin data: '{ "enableOobLoadReport": true }'
See related documentation: https://cloud.google.com/service-mesh/legacy/load-balancing-apis/proxyless-configure-advanced-traffic-management#custom-lb-config
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description (package private) static class
WeightedRoundRobinLoadBalancer.StaticStrideScheduler
private class
WeightedRoundRobinLoadBalancer.UpdateWeightTask
(package private) class
WeightedRoundRobinLoadBalancer.WeightedChildLbState
(package private) static class
WeightedRoundRobinLoadBalancer.WeightedRoundRobinLoadBalancerConfig
(package private) static class
WeightedRoundRobinLoadBalancer.WeightedRoundRobinPicker
(package private) class
WeightedRoundRobinLoadBalancer.WrrSubchannel
-
Nested classes/interfaces inherited from class io.grpc.util.MultiChildLoadBalancer
io.grpc.util.MultiChildLoadBalancer.AcceptResolvedAddrRetVal, io.grpc.util.MultiChildLoadBalancer.ChildLbState, io.grpc.util.MultiChildLoadBalancer.Endpoint
-
Nested classes/interfaces inherited from class io.grpc.LoadBalancer
io.grpc.LoadBalancer.CreateSubchannelArgs, io.grpc.LoadBalancer.ErrorPicker, io.grpc.LoadBalancer.Factory, io.grpc.LoadBalancer.FixedResultPicker, io.grpc.LoadBalancer.Helper, io.grpc.LoadBalancer.PickDetailsConsumer, io.grpc.LoadBalancer.PickResult, io.grpc.LoadBalancer.PickSubchannelArgs, io.grpc.LoadBalancer.ResolvedAddresses, io.grpc.LoadBalancer.Subchannel, io.grpc.LoadBalancer.SubchannelPicker, io.grpc.LoadBalancer.SubchannelStateListener
-
-
Field Summary
Fields Modifier and Type Field Description private WeightedRoundRobinLoadBalancer.WeightedRoundRobinLoadBalancerConfig
config
private io.grpc.LoadBalancer.SubchannelPicker
currentPicker
private static io.grpc.LongCounterMetricInstrument
ENDPOINT_WEIGHT_NOT_YET_USEABLE_COUNTER
private static io.grpc.LongCounterMetricInstrument
ENDPOINT_WEIGHT_STALE_COUNTER
private static io.grpc.DoubleHistogramMetricInstrument
ENDPOINT_WEIGHTS_HISTOGRAM
private long
infTime
private java.lang.String
locality
private static java.util.logging.Logger
log
private static io.grpc.LongCounterMetricInstrument
RR_FALLBACK_COUNTER
private java.util.concurrent.atomic.AtomicInteger
sequence
private io.grpc.SynchronizationContext
syncContext
private io.grpc.Deadline.Ticker
ticker
private java.util.concurrent.ScheduledExecutorService
timeService
private java.lang.Runnable
updateWeightTask
private io.grpc.SynchronizationContext.ScheduledHandle
weightUpdateTimer
-
Constructor Summary
Constructors Constructor Description WeightedRoundRobinLoadBalancer(io.grpc.LoadBalancer.Helper helper, io.grpc.Deadline.Ticker ticker)
WeightedRoundRobinLoadBalancer(io.grpc.LoadBalancer.Helper helper, io.grpc.Deadline.Ticker ticker, java.util.Random random)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description io.grpc.Status
acceptResolvedAddresses(io.grpc.LoadBalancer.ResolvedAddresses resolvedAddresses)
private void
createAndApplyOrcaListeners()
protected io.grpc.util.MultiChildLoadBalancer.ChildLbState
createChildLbState(java.lang.Object key)
private io.grpc.LoadBalancer.SubchannelPicker
createReadyPicker(java.util.Collection<io.grpc.util.MultiChildLoadBalancer.ChildLbState> activeList)
void
shutdown()
private void
updateBalancingState(io.grpc.ConnectivityState state, io.grpc.LoadBalancer.SubchannelPicker picker)
protected void
updateOverallBalancingState()
Updates picker with the list of active subchannels (state == READY).private void
updateWeight(WeightedRoundRobinLoadBalancer.WeightedRoundRobinPicker picker)
-
Methods inherited from class io.grpc.util.MultiChildLoadBalancer
acceptResolvedAddressesInternal, aggregateState, createChildAddressesMap, getChildLbState, getChildLbStateEag, getChildLbStates, getHelper, getReadyChildren, handleNameResolutionError, shutdownRemoved
-
-
-
-
Field Detail
-
RR_FALLBACK_COUNTER
private static final io.grpc.LongCounterMetricInstrument RR_FALLBACK_COUNTER
-
ENDPOINT_WEIGHT_NOT_YET_USEABLE_COUNTER
private static final io.grpc.LongCounterMetricInstrument ENDPOINT_WEIGHT_NOT_YET_USEABLE_COUNTER
-
ENDPOINT_WEIGHT_STALE_COUNTER
private static final io.grpc.LongCounterMetricInstrument ENDPOINT_WEIGHT_STALE_COUNTER
-
ENDPOINT_WEIGHTS_HISTOGRAM
private static final io.grpc.DoubleHistogramMetricInstrument ENDPOINT_WEIGHTS_HISTOGRAM
-
log
private static final java.util.logging.Logger log
-
config
private WeightedRoundRobinLoadBalancer.WeightedRoundRobinLoadBalancerConfig config
-
syncContext
private final io.grpc.SynchronizationContext syncContext
-
timeService
private final java.util.concurrent.ScheduledExecutorService timeService
-
weightUpdateTimer
private io.grpc.SynchronizationContext.ScheduledHandle weightUpdateTimer
-
updateWeightTask
private final java.lang.Runnable updateWeightTask
-
sequence
private final java.util.concurrent.atomic.AtomicInteger sequence
-
infTime
private final long infTime
-
ticker
private final io.grpc.Deadline.Ticker ticker
-
locality
private java.lang.String locality
-
currentPicker
private io.grpc.LoadBalancer.SubchannelPicker currentPicker
-
-
Constructor Detail
-
WeightedRoundRobinLoadBalancer
public WeightedRoundRobinLoadBalancer(io.grpc.LoadBalancer.Helper helper, io.grpc.Deadline.Ticker ticker)
-
WeightedRoundRobinLoadBalancer
WeightedRoundRobinLoadBalancer(io.grpc.LoadBalancer.Helper helper, io.grpc.Deadline.Ticker ticker, java.util.Random random)
-
-
Method Detail
-
createChildLbState
protected io.grpc.util.MultiChildLoadBalancer.ChildLbState createChildLbState(java.lang.Object key)
- Overrides:
createChildLbState
in classio.grpc.util.MultiChildLoadBalancer
-
acceptResolvedAddresses
public io.grpc.Status acceptResolvedAddresses(io.grpc.LoadBalancer.ResolvedAddresses resolvedAddresses)
- Overrides:
acceptResolvedAddresses
in classio.grpc.util.MultiChildLoadBalancer
-
updateOverallBalancingState
protected void updateOverallBalancingState()
Updates picker with the list of active subchannels (state == READY).- Specified by:
updateOverallBalancingState
in classio.grpc.util.MultiChildLoadBalancer
-
createReadyPicker
private io.grpc.LoadBalancer.SubchannelPicker createReadyPicker(java.util.Collection<io.grpc.util.MultiChildLoadBalancer.ChildLbState> activeList)
-
updateWeight
private void updateWeight(WeightedRoundRobinLoadBalancer.WeightedRoundRobinPicker picker)
-
updateBalancingState
private void updateBalancingState(io.grpc.ConnectivityState state, io.grpc.LoadBalancer.SubchannelPicker picker)
-
createAndApplyOrcaListeners
private void createAndApplyOrcaListeners()
-
shutdown
public void shutdown()
- Overrides:
shutdown
in classio.grpc.util.MultiChildLoadBalancer
-
-