3

我想添加一个非常简单的过滤器,执行每个 IP 的速率限制,但仍然允许突发,有点像iptables允许做的事情。

我不想安装整个厨房水槽:我只需要一个实现该功能的过滤器类。

什么是一个好的数据结构/算法,允许做一个简单的“限速但允许短突发”?

例如,如果用户每分钟尝试执行超过 'x' GET / POST ,我想提供一个 HTTP 错误代码,但我仍然想让同一用户“爆发”到 'y'(其中 y > x) 直到他击中爆裂帽。

只是为了比较,这里是如何使用iptables配置类似的速率限制与突发(这只是一个示例,以显示我在说什么,即使在我的情况下它不是关于设置速率限制+在 TCP SYN 数据包上突发):

iptables -A INPUT -p tcp --syn -m limit --limit 1/s --limit-burst 5
4

2 回答 2

4

Java级别:

  • 找到了一个基于Esper的速率限制器,您可以在其中构建自己的查询来匹配您的突发需求。
  • Jetty 有一个内置的 servlet过滤器
  • 一个带有内置的 Java 库,用于创建您自己的机制
  • 骆驼有节流机构

但我认为在网络服务器级别实现起来更容易

或使用专用服务器插件

于 2012-12-16T09:40:35.430 回答
0

您还可以查看 Guava RateLimiter - 它为更复杂的速率限制器提供了一个很好的起点。

于 2016-11-30T11:35:07.050 回答