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.MultiChildLoadBalancerALoadBalancerthat provides weighted-round-robin load-balancing over theEquivalentAddressGroups from theNameResolver. The subchannel weights are determined by backend metrics using ORCA. To use WRR, users may configure through channel serviceConfig. Example config:
Users may also configure through xDS control plane via custom lb policy. But that is much more complex to set up. 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 classWeightedRoundRobinLoadBalancer.StaticStrideSchedulerprivate classWeightedRoundRobinLoadBalancer.UpdateWeightTask(package private) classWeightedRoundRobinLoadBalancer.WeightedChildLbState(package private) static classWeightedRoundRobinLoadBalancer.WeightedRoundRobinLoadBalancerConfig(package private) static classWeightedRoundRobinLoadBalancer.WeightedRoundRobinPicker(package private) classWeightedRoundRobinLoadBalancer.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.WeightedRoundRobinLoadBalancerConfigconfigprivate io.grpc.LoadBalancer.SubchannelPickercurrentPickerprivate static io.grpc.LongCounterMetricInstrumentENDPOINT_WEIGHT_NOT_YET_USEABLE_COUNTERprivate static io.grpc.LongCounterMetricInstrumentENDPOINT_WEIGHT_STALE_COUNTERprivate static io.grpc.DoubleHistogramMetricInstrumentENDPOINT_WEIGHTS_HISTOGRAMprivate longinfTimeprivate java.lang.Stringlocalityprivate static java.util.logging.Loggerlogprivate static io.grpc.LongCounterMetricInstrumentRR_FALLBACK_COUNTERprivate java.util.concurrent.atomic.AtomicIntegersequenceprivate io.grpc.SynchronizationContextsyncContextprivate io.grpc.Deadline.Tickertickerprivate java.util.concurrent.ScheduledExecutorServicetimeServiceprivate java.lang.RunnableupdateWeightTaskprivate io.grpc.SynchronizationContext.ScheduledHandleweightUpdateTimer
-
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.StatusacceptResolvedAddresses(io.grpc.LoadBalancer.ResolvedAddresses resolvedAddresses)private voidcreateAndApplyOrcaListeners()protected io.grpc.util.MultiChildLoadBalancer.ChildLbStatecreateChildLbState(java.lang.Object key)private io.grpc.LoadBalancer.SubchannelPickercreateReadyPicker(java.util.Collection<io.grpc.util.MultiChildLoadBalancer.ChildLbState> activeList)voidshutdown()private voidupdateBalancingState(io.grpc.ConnectivityState state, io.grpc.LoadBalancer.SubchannelPicker picker)protected voidupdateOverallBalancingState()Updates picker with the list of active subchannels (state == READY).private voidupdateWeight(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:
createChildLbStatein classio.grpc.util.MultiChildLoadBalancer
-
acceptResolvedAddresses
public io.grpc.Status acceptResolvedAddresses(io.grpc.LoadBalancer.ResolvedAddresses resolvedAddresses)
- Overrides:
acceptResolvedAddressesin classio.grpc.util.MultiChildLoadBalancer
-
updateOverallBalancingState
protected void updateOverallBalancingState()
Updates picker with the list of active subchannels (state == READY).- Specified by:
updateOverallBalancingStatein 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:
shutdownin classio.grpc.util.MultiChildLoadBalancer
-
-