gpt4 book ai didi

rate-limiting - 基于同一路由的多个键的速率限制

转载 作者:行者123 更新时间:2023-12-05 07:20:50 26 4
gpt4 key购买 nike

我们使用 spring-cloud-gateway 使用 RedisRateLimiter 进行速率限制。如果我们有一个按键来按每条路线进行速率限制,一切都可以立即使用。但是,我们有一个用例,其中针对单个给定路线。我们想通过多层进行速率限制。例如,对于给定的路由 ID 1,我们希望将池中某个用户的速率限制为每秒 10 个请求。但是,与此同时,我们还希望将同一路由的总体池请求速率限制为每秒 100 次。所以基本上对同一条路线使用 2 个不同的 key ,同时跟踪每个。

我们尝试使用速率限制器过滤器,但正如预期的那样,我们无法在配置中声明多个速率限制器。我们还尝试使用以下方法:

    spring.cloud.gateway:
routes:
- id: 1
uri: https://example.org/
predicates:
- Path=/path
filters:
- name: RequestRateLimiter
args:
redis-rate-limiter.replenishRate: 10
redis-rate-limiter.burstCapacity: 20
key-resolver: "#{@userKeyResolver}"
- name: RequestRateLimiter
args:
redis-rate-limiter.replenishRate: 100
redis-rate-limiter.burstCapacity: 200
key-resolver: "#{@poolKeyResolver}"

在上面的描述中,池中可以有多个用户。因此,用户的速率应限制为每秒 10 个请求的补充速率,而整个池的速率应限制为每秒 100 个请求的补充速率。但是由于正在使用相同的过滤器,因此速率限制器的第一个配置被第二个覆盖。

我们查看了以下帖子,提出了一种基于独立于路由的用户计划进行速率限制的方法:Rate limiting based on user plan in Spring Cloud Gateway

然而,这不适用于我们的用例,因为它的速率限制基于给定的 API key ,与路由无关。有没有一种方法可以使用 Spring 云网关来实现这一点。任何可以让我们支持这个用例的配置。

最佳答案

这有点老了,但你应该能够定义多个速率限制器。如果您愿意分享您遇到的错误,我本可以进行更深入的研究。无论如何,遇到类似的问题,我在主 key 解析器(poolKeyResolver)上添加了 @Primary 批注,它的效果很好。我在收到的每个 API 请求中都保存了两个 key 。

关于rate-limiting - 基于同一路由的多个键的速率限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57260083/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com