首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >replenishRate和burstCapacity有什么区别?

replenishRate和burstCapacity有什么区别?
EN

Stack Overflow用户
提问于 2019-10-29 10:58:09
回答 1查看 2.2K关注 0票数 5

在RequestRateLimiter的Redis实现中,我们必须指定两个属性redis-rate-limiter.replenishRateredis-rate-limiter.burstCapacity作为RequestRateLimiter过滤器的参数。

根据文档的说法

redis-rate-limiter.replenishRate是指您希望允许用户每秒执行多少次请求,而不需要任何删除请求。这是令牌桶被填充的速率。 redis-rate-limiter.burstCapacity是用户允许在一秒钟内完成的最大请求数。这是令牌桶可以容纳的令牌数。将此值设置为零将阻止所有请求。

据我所见,replenishRate是发出请求的rateburstCapacity是可以发出的最大值请求(都在1秒以下)。然而,在一个实际的场景中,我似乎无法理解两者之间的区别。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-22 07:17:41

使用不同的时间单位更容易理解,例如:

  • 补充费率:每分钟1000个请求
  • 突发容量:每秒500次请求

前者控制您永远不会马上收到超过1000个请求,而则允许您在同一秒钟内支持高达500个请求的临时加载峰值。您可能在第二0中有一个500次突发,在第二次1中又有一个500次突发,并且您已经达到了速率限制(在同一分钟内有1000次请求),因此在接下来的58秒内将删除新的请求。

在Spring (SCG)的上下文中,文档有点模糊(the rate limiter needs to be allowed some time...):

通过在replenishRate和burstCapacity中设置相同的值来实现一个稳定的速率。通过将burstCapacity设置为高于replenishRate,可以允许临时突发。在这种情况下,速率限制器需要有一段时间间隔(根据replenishRate),因为两个连续的突发将导致丢弃请求(HTTP429-太多的请求)。

根据前面的例子推断,SCG的工作方式如下:

  • 补充速率:每秒1000个请求
  • 突发容量:每秒2000次请求

您可以在同一秒钟(第二次0)内获得2000次请求的突发(峰值)。由于您的补充率是1000 rps,您已经通过了两个周期的津贴,所以您不能发送另一条消息,直到第二3。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58606122

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档