Skip to content

Commit 8e4dc44

Browse files
committed
Simplified background
1 parent b8880c3 commit 8e4dc44

File tree

1 file changed

+45
-20
lines changed

1 file changed

+45
-20
lines changed

A77-xds-rate-limiting-rlqs.md

Lines changed: 45 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,40 @@ types of such service:
4343
gRPC only intends to support quota-based global rate limiting, Rate Limiting
4444
Quota 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

4881
1. [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:
5588
4. gRPC Server installs a Server Interceptor (filter in C-core, later called
5689
"the Interceptor" for simplicity)
5790
5. 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.
67100
6. For all existing buckets, a `BucketQuotaUsage` report is sent
68101
every [RateLimitQuotaBucketSettings.reporting_interval]
69102
to `RateLimitQuotaService.StreamRateLimitQuotas`.
70103
7. 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

86109
During 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

Comments
 (0)