【发布时间】:2012-04-25 00:41:55
【问题描述】:
我想添加一个非常简单的过滤器,对每个 IP 进行速率限制,但仍然允许突发,有点像 iptables 允许做的事情。
我不想安装整个厨房水槽:我只需要一个实现该功能的过滤器类。
什么是一个好的数据结构/算法,允许做一个简单的“限速但允许短突发”?
例如,如果用户每分钟尝试执行的 GET / POST 次数超过 'x',我想提供一个 HTTP 错误代码,但我仍然想让同一个用户“爆发”到 ' y'(其中 y > x),直到他达到爆裂帽。
只是为了比较,下面是如何使用 iptables 配置类似的 rate-limitation-with-a-burst(这只是一个示例,以说明我在说什么,即使在我的情况不是对 TCP SYN 数据包设置速率限制+突发):
iptables -A INPUT -p tcp --syn -m limit --limit 1/s --limit-burst 5
【问题讨论】:
-
我对 Apache 的 svn 服务器的请求进行了一些分析,正是针对这个问题。我的结论是,如果所需的限制是 x reqs/min,那么每 n 分钟实施 nx 的限制,并根据您认为可接受的突发流量配置文件选择 n。我最终设置了每天的限制。
标签: java tomcat servlet-filters rate-limiting