@@ -43,7 +43,40 @@ types of such service:
4343gRPC only intends to support quota-based global rate limiting, Rate Limiting
4444Quota Service (RLQS), which is described in this document.
4545
46- Simplified RLQS flow happy-path:
46+ This proposal details how gRPC will add support
47+ for [ Rate Limit Quota xDS HTTP filter] [ rate_limit_quota_filter ]
48+ configured via [ xDS HTTP Filters] [ A39 ] to [ xDS-Enabled gRPC servers] [ A36 ] . It
49+ will cover four major parts needed for language-specific gRPC implementations:
50+
51+ 1 . Support missing xDS types needed to parse the Rate Limit Quota Filter config.
52+ 2 . Implement the client side of RLQS protocol (RLQS
53+ Client): ` StreamRateLimitQuotas.StreamRateLimitQuotas ` . It will establish
54+ bidirectional gRPC stream to the remote [ Rate Limit Quota Service] [ rlqs ] .
55+ 3 . Implement a Server Interceptor (filter in C-core, later called
56+ "the Interceptor" for simplicity) that requests.
57+ 4 . Send and receive updates.
58+
59+ ### Related Proposals:
60+
61+ * [ A36: xDS-Enabled Servers] [ A36 ]
62+ * [ A39: xDS HTTP Filter Support] [ A39 ]
63+
64+ [ A36 ] : A36-xds-for-servers.md
65+
66+ [ A39 ] : A39-xds-http-filters.md
67+
68+ ## Proposal
69+
70+ ### xDS types support
71+ #### Unified Matchers
72+ #### io.envoyproxy.envoy.config.core.v3.GrpcService.GoogleGrpc
73+ #### Canonical CEL
74+
75+ TODO(sergiitk): A precise statement of the proposed change.
76+
77+ #### Simplified RLQS flow happy-path:
78+
79+ // TODO(sergiitk): Insert graphics
4780
48811 . [ Rate Limit Quota xDS HTTP filter] [ rate_limit_quota_filter ]
4982 is configured on a gRPC Server via an LDS update in the HTTP connection
@@ -55,32 +88,22 @@ Simplified RLQS flow happy-path:
55884 . gRPC Server installs a Server Interceptor (filter in C-core, later called
5689 "the Interceptor" for simplicity)
57905 . Once a request is intercepted by the Interceptor:
58- 1 . The request is matched into a Bucket by evaluating the ` bucket_matchers `
59- tree against the request attributes.
60- 2 . If the Bucket doesn't exist, gRPC server immediately sends the
61- initial ` BucketQuotaUsage ` report to the RLQS server. The request is
62- throttled according
63- to [ RateLimitQuotaBucketSettings.no_assignment_behavior] .
64- 3 . If the Bucket exists, the request is throttled according to Bucket's
65- quota assignment. Bucket's ` num_requests_allowed `
66- or ` num_requests_denied ` request counter is increased by one.
91+ - The request is matched into a Bucket by evaluating the ` bucket_matchers `
92+ tree against the request attributes.
93+ - If the Bucket doesn't exist, gRPC server immediately sends the
94+ initial ` BucketQuotaUsage ` report to the RLQS server. The request is
95+ throttled according
96+ to [ RateLimitQuotaBucketSettings.no_assignment_behavior] .
97+ - If the Bucket exists, the request is throttled according to Bucket's quota
98+ assignment. Bucket's ` num_requests_allowed `
99+ or ` num_requests_denied ` request counter is increased by one.
671006 . For all existing buckets, a ` BucketQuotaUsage ` report is sent
68101 every [ RateLimitQuotaBucketSettings.reporting_interval]
69102 to ` RateLimitQuotaService.StreamRateLimitQuotas ` .
701037 . RLQS may send Bucket quota assignments via ` RateLimitQuotaResponse ` at any
71104 time. Once received, it must the quota must be applied to a Bucket with
72105 matching [ bucket_id] .
73106
74- ### Related Proposals:
75-
76- * [ A36: xDS-Enabled Servers] [ A36 ]
77-
78- [ A36 ] : A36-xds-for-servers.md
79-
80- ## Proposal
81-
82- TODO(sergiitk): A precise statement of the proposed change.
83-
84107### Temporary environment variable protection
85108
86109During initial development, this feature will be enabled via the
@@ -118,3 +141,5 @@ none.
118141[ RateLimitQuotaFilterConfig.bucket_matchers ] : https://www.envoyproxy.io/docs/envoy/latest/api-v3/extensions/filters/http/rate_limit_quota/v3/rate_limit_quota.proto#envoy-v3-api-field-extensions-filters-http-rate-limit-quota-v3-ratelimitquotafilterconfig-bucket-matchers
119142
120143[ bucket_id ] : https://www.envoyproxy.io/docs/envoy/latest/api-v3/service/rate_limit_quota/v3/rlqs.proto#envoy-v3-api-field-service-rate-limit-quota-v3-ratelimitquotaresponse-bucketaction-bucket-id
144+
145+ [ rlqs ] : https://www.envoyproxy.io/docs/envoy/latest/api-v3/service/rate_limit_quota/v3/rlqs.proto
0 commit comments