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
A LoadBalancer that provides weighted-round-robin load-balancing over the EquivalentAddressGroups from the NameResolver. 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();
  
  
Users may also configure through xDS control plane via custom lb policy. But that is much more complex to set up. Example config:
  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
  • Field Details

    • 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 Logger log
    • config

    • syncContext

      private final io.grpc.SynchronizationContext syncContext
    • timeService

      private final ScheduledExecutorService timeService
    • weightUpdateTimer

      private io.grpc.SynchronizationContext.ScheduledHandle weightUpdateTimer
    • updateWeightTask

      private final Runnable updateWeightTask
    • sequence

      private final AtomicInteger sequence
    • infTime

      private final long infTime
    • ticker

      private final io.grpc.Deadline.Ticker ticker
    • locality

      private String locality
    • currentPicker

      private io.grpc.LoadBalancer.SubchannelPicker currentPicker
  • Constructor Details

    • 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, Random random)
  • Method Details

    • createChildLbState

      protected io.grpc.util.MultiChildLoadBalancer.ChildLbState createChildLbState(Object key)
      Overrides:
      createChildLbState in class io.grpc.util.MultiChildLoadBalancer
    • acceptResolvedAddresses

      public io.grpc.Status acceptResolvedAddresses(io.grpc.LoadBalancer.ResolvedAddresses resolvedAddresses)
      Overrides:
      acceptResolvedAddresses in class io.grpc.util.MultiChildLoadBalancer
    • updateOverallBalancingState

      protected void updateOverallBalancingState()
      Updates picker with the list of active subchannels (state == READY).
      Specified by:
      updateOverallBalancingState in class io.grpc.util.MultiChildLoadBalancer
    • createReadyPicker

      private io.grpc.LoadBalancer.SubchannelPicker createReadyPicker(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 class io.grpc.util.MultiChildLoadBalancer