Package io.grpc.xds

Class 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 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
      • 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 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​(java.util.Collection<io.grpc.util.MultiChildLoadBalancer.ChildLbState> activeList)
      • 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