Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
132 changes: 132 additions & 0 deletions api/v1alpha1/adaptive_concurrency_types.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,132 @@
// Copyright Envoy Gateway Authors
// SPDX-License-Identifier: Apache-2.0
// The full text of the Apache license is available in the LICENSE file at
// the root of the repo.

package v1alpha1

import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

// AdaptiveConcurrency defines the adaptive concurrency configuration for backend traffic.
// This feature dynamically adjusts the number of concurrent requests to optimize
// performance and prevent overload based on downstream response times.
//
// +optional
type AdaptiveConcurrency struct {
// Enabled enables or disables adaptive concurrency. Defaults to false.
//
// +optional
// +kubebuilder:default=false
Enabled *bool `json:"enabled,omitempty"`

// GradientController defines the gradient controller configuration for adaptive concurrency.
//
// +optional
GradientController *AdaptiveConcurrencyGradientController `json:"gradientController,omitempty"`

// MinRTTCalculation defines the minimum RTT calculation parameters.
//
// +optional
MinRTTCalculation *AdaptiveConcurrencyMinRTTCalculation `json:"minRTTCalculation,omitempty"`

// ConcurrencyLimitParams defines the concurrency limit parameters.
//
// +optional
ConcurrencyLimitParams *AdaptiveConcurrencyLimitParams `json:"concurrencyLimitParams,omitempty"`
}

// AdaptiveConcurrencyGradientController defines the gradient controller configuration.
//
// +optional
type AdaptiveConcurrencyGradientController struct {
// SampleAggregatePercentile defines the percentile of request latencies to sample.
// This should be a value between 0 and 100.
//
// +optional
// +kubebuilder:validation:Minimum=0
// +kubebuilder:validation:Maximum=100
// +kubebuilder:default=90
SampleAggregatePercentile *float64 `json:"sampleAggregatePercentile,omitempty"`

// ConcurrencyLimitParams defines the concurrency limit parameters.
//
// +optional
ConcurrencyLimitParams *AdaptiveConcurrencyLimitParams `json:"concurrencyLimitParams,omitempty"`

// MinRTTCalculation defines the minimum RTT calculation parameters.
//
// +optional
MinRTTCalculation *AdaptiveConcurrencyMinRTTCalculation `json:"minRTTCalculation,omitempty"`
}

// AdaptiveConcurrencyLimitParams defines the concurrency limit parameters.
//
// +optional
type AdaptiveConcurrencyLimitParams struct {
// ConcurrencyUpdateInterval defines the interval at which the concurrency limit is updated.
//
// +optional
// +kubebuilder:default="0.1s"
ConcurrencyUpdateInterval *metav1.Duration `json:"concurrencyUpdateInterval,omitempty"`

// MaxConcurrencyLimit defines the maximum concurrency limit.
//
// +optional
// +kubebuilder:validation:Minimum=1
// +kubebuilder:default=1000
MaxConcurrencyLimit *uint32 `json:"maxConcurrencyLimit,omitempty"`

// MinConcurrencyLimit defines the minimum concurrency limit.
//
// +optional
// +kubebuilder:validation:Minimum=1
// +kubebuilder:default=1
MinConcurrencyLimit *uint32 `json:"minConcurrencyLimit,omitempty"`

// ConcurrencyUpdateRatio defines the ratio by which the concurrency limit is updated.
// This should be a value between 0.0 and 1.0.
//
// +optional
// +kubebuilder:validation:Minimum=0.0
// +kubebuilder:validation:Maximum=1.0
// +kubebuilder:default=0.1
ConcurrencyUpdateRatio *float64 `json:"concurrencyUpdateRatio,omitempty"`
}

// AdaptiveConcurrencyMinRTTCalculation defines the minimum RTT calculation parameters.
//
// +optional
type AdaptiveConcurrencyMinRTTCalculation struct {
// Interval defines the interval at which the minimum RTT is recalculated.
//
// +optional
// +kubebuilder:default="60s"
Interval *metav1.Duration `json:"interval,omitempty"`

// RequestCount defines the number of requests to use for minimum RTT calculation.
//
// +optional
// +kubebuilder:validation:Minimum=1
// +kubebuilder:default=50
RequestCount *uint32 `json:"requestCount,omitempty"`

// Jitter defines the jitter to apply to the minimum RTT calculation interval.
// This should be a value between 0 and 100 representing a percentage.
//
// +optional
// +kubebuilder:validation:Minimum=0
// +kubebuilder:validation:Maximum=100
// +kubebuilder:default=10
Jitter *float64 `json:"jitter,omitempty"`

// Buffer defines the buffer to apply to the minimum RTT calculation.
// This should be a value between 0 and 100 representing a percentage.
//
// +optional
// +kubebuilder:validation:Minimum=0
// +kubebuilder:validation:Maximum=100
// +kubebuilder:default=25
Buffer *float64 `json:"buffer,omitempty"`
}
116 changes: 116 additions & 0 deletions api/v1alpha1/admission_control_types.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
// Copyright Envoy Gateway Authors
// SPDX-License-Identifier: Apache-2.0
// The full text of the Apache license is available in the LICENSE file at
// the root of the repo.

package v1alpha1

import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

// AdmissionControl defines the admission control configuration for backend traffic.
// This feature rejects a portion of requests when the success rate falls below
// a specified threshold to prevent cascading failures.
//
// +optional
type AdmissionControl struct {
// Enabled enables or disables admission control. Defaults to false.
//
// +optional
// +kubebuilder:default=false
Enabled *bool `json:"enabled,omitempty"`

// SuccessCriteria defines the criteria for determining request success.
//
// +optional
SuccessCriteria *AdmissionControlSuccessCriteria `json:"successCriteria,omitempty"`

// SamplingWindow defines the time window for sampling requests.
// Defaults to "30s".
//
// +optional
// +kubebuilder:default="30s"
SamplingWindow *metav1.Duration `json:"samplingWindow,omitempty"`

// Aggression defines how aggressively to reject requests when success rate is low.
// Must be between 1.0 and 10.0. Defaults to 1.0.
//
// +optional
// +kubebuilder:default=1.0
// +kubebuilder:validation:Minimum=1.0
// +kubebuilder:validation:Maximum=10.0
Aggression *float64 `json:"aggression,omitempty"`

// SRThreshold defines the success rate threshold below which admission control activates.
// Must be between 0.0 and 1.0. Defaults to 0.95.
//
// +optional
// +kubebuilder:default=0.95
// +kubebuilder:validation:Minimum=0.0
// +kubebuilder:validation:Maximum=1.0
SRThreshold *float64 `json:"srThreshold,omitempty"`

// RPSThreshold defines the minimum requests per second required for admission control.
// Defaults to 5.0.
//
// +optional
// +kubebuilder:default=5.0
// +kubebuilder:validation:Minimum=0.0
RPSThreshold *float64 `json:"rpsThreshold,omitempty"`

// MaxRejectionProbability defines the maximum probability of rejecting a request.
// Must be between 0.0 and 1.0. Defaults to 0.8.
//
// +optional
// +kubebuilder:default=0.8
// +kubebuilder:validation:Minimum=0.0
// +kubebuilder:validation:Maximum=1.0
MaxRejectionProbability *float64 `json:"maxRejectionProbability,omitempty"`
}

// AdmissionControlSuccessCriteria defines the criteria for determining request success.
type AdmissionControlSuccessCriteria struct {
// HTTP defines success criteria for HTTP requests.
//
// +optional
HTTP *AdmissionControlHTTPSuccessCriteria `json:"http,omitempty"`

// GRPC defines success criteria for gRPC requests.
//
// +optional
GRPC *AdmissionControlGRPCSuccessCriteria `json:"grpc,omitempty"`
}

// AdmissionControlHTTPSuccessCriteria defines success criteria for HTTP requests.
type AdmissionControlHTTPSuccessCriteria struct {
// HTTPSuccessStatus defines the HTTP status codes considered successful.
// If not specified, defaults to 200-299 range.
//
// +optional
HTTPSuccessStatus []AdmissionControlStatusRange `json:"httpSuccessStatus,omitempty"`
}

// AdmissionControlGRPCSuccessCriteria defines success criteria for gRPC requests.
type AdmissionControlGRPCSuccessCriteria struct {
// GRPCSuccessStatus defines the gRPC status codes considered successful.
// If not specified, defaults to OK (0).
//
// +optional
GRPCSuccessStatus []AdmissionControlStatusRange `json:"grpcSuccessStatus,omitempty"`
}

// AdmissionControlStatusRange defines a range of status codes.
type AdmissionControlStatusRange struct {
// Start defines the start of the status code range (inclusive).
//
// +kubebuilder:validation:Minimum=0
// +kubebuilder:validation:Maximum=999
Start int32 `json:"start"`

// End defines the end of the status code range (inclusive).
//
// +kubebuilder:validation:Minimum=0
// +kubebuilder:validation:Maximum=999
End int32 `json:"end"`
}
14 changes: 14 additions & 0 deletions api/v1alpha1/backendtrafficpolicy_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,20 @@ type BackendTrafficPolicySpec struct {
//
// +optional
Telemetry *BackendTelemetry `json:"telemetry,omitempty"`

// AdmissionControl configures admission control for backend traffic.
// This feature rejects a portion of requests when the success rate falls below
// a specified threshold to prevent cascading failures.
//
// +optional
AdmissionControl *AdmissionControl `json:"admissionControl,omitempty"`

// AdaptiveConcurrency configures adaptive concurrency for backend traffic.
// This feature dynamically adjusts the number of concurrent requests to optimize
// performance and prevent overload based on downstream response times.
//
// +optional
AdaptiveConcurrency *AdaptiveConcurrency `json:"adaptiveConcurrency,omitempty"`
}

type BackendTelemetry struct {
Expand Down
Loading
Loading