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