Adaptive Concurrency (proto)

This extension has the qualified name envoy.filters.http.adaptive_concurrency

Note

This extension has an unknown security posture and should only be used in deployments where both the downstream and upstream are trusted.

Tip

This extension extends and can be used with the following extension category:

This extension must be configured with one of the following type URLs:

Adaptive Concurrency Control configuration overview.

extensions.filters.http.adaptive_concurrency.v3.GradientControllerConfig

[extensions.filters.http.adaptive_concurrency.v3.GradientControllerConfig proto]

Configuration parameters for the gradient controller.

{
  "sample_aggregate_percentile": {...},
  "concurrency_limit_params": {...},
  "min_rtt_calc_params": {...}
}
sample_aggregate_percentile

(type.v3.Percent) The percentile to use when summarizing aggregated samples. Defaults to p50.

concurrency_limit_params

(extensions.filters.http.adaptive_concurrency.v3.GradientControllerConfig.ConcurrencyLimitCalculationParams, REQUIRED)

min_rtt_calc_params

(extensions.filters.http.adaptive_concurrency.v3.GradientControllerConfig.MinimumRTTCalculationParams, REQUIRED)

extensions.filters.http.adaptive_concurrency.v3.GradientControllerConfig.ConcurrencyLimitCalculationParams

[extensions.filters.http.adaptive_concurrency.v3.GradientControllerConfig.ConcurrencyLimitCalculationParams proto]

Parameters controlling the periodic recalculation of the concurrency limit from sampled request latencies.

{
  "max_concurrency_limit": {...},
  "concurrency_update_interval": {...}
}
max_concurrency_limit

(UInt32Value) The allowed upper-bound on the calculated concurrency limit. Defaults to 1000.

concurrency_update_interval

(Duration, REQUIRED) The period of time samples are taken to recalculate the concurrency limit.

extensions.filters.http.adaptive_concurrency.v3.GradientControllerConfig.MinimumRTTCalculationParams

[extensions.filters.http.adaptive_concurrency.v3.GradientControllerConfig.MinimumRTTCalculationParams proto]

Parameters controlling the periodic minRTT recalculation.

{
  "interval": {...},
  "request_count": {...},
  "jitter": {...},
  "min_concurrency": {...},
  "buffer": {...}
}
interval

(Duration, REQUIRED) The time interval between recalculating the minimum request round-trip time. Has to be positive.

request_count

(UInt32Value) The number of requests to aggregate/sample during the minRTT recalculation window before updating. Defaults to 50.

jitter

(type.v3.Percent) Randomized time delta that will be introduced to the start of the minRTT calculation window. This is represented as a percentage of the interval duration. Defaults to 15%.

Example: If the interval is 10s and the jitter is 15%, the next window will begin somewhere in the range (10s - 11.5s).

min_concurrency

(UInt32Value) The concurrency limit set while measuring the minRTT. Defaults to 3.

buffer

(type.v3.Percent) Amount added to the measured minRTT to add stability to the concurrency limit during natural variability in latency. This is expressed as a percentage of the measured value and can be adjusted to allow more or less tolerance to the sampled latency values.

Defaults to 25%.

extensions.filters.http.adaptive_concurrency.v3.AdaptiveConcurrency

[extensions.filters.http.adaptive_concurrency.v3.AdaptiveConcurrency proto]

{
  "gradient_controller_config": {...},
  "enabled": {...},
  "concurrency_limit_exceeded_status": {...}
}
gradient_controller_config

(extensions.filters.http.adaptive_concurrency.v3.GradientControllerConfig, REQUIRED) Gradient concurrency control will be used.

enabled

(config.core.v3.RuntimeFeatureFlag) If set to false, the adaptive concurrency filter will operate as a pass-through filter. If the message is unspecified, the filter will be enabled.

concurrency_limit_exceeded_status

(type.v3.HttpStatus) This field allows for a custom HTTP response status code to the downstream client when the concurrency limit has been exceeded. Defaults to 503 (Service Unavailable).

Note

If this is set to < 400, 503 will be used instead.