Servlet过滤器:非常简单的限速过滤器,允许突发

时间:2012-04-12 16:08:45

标签: java tomcat servlet-filters rate-limiting

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

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

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

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

仅仅是为了比较,这里是如何使用 iptables 配置类似的速率限制和突发(这只是一个例子,显示我正在谈论的内容,即使在我的情况不是关于在TCP SYN数据包上设置速率限制+突发):

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

2 个答案:

答案 0 :(得分:3)

Java 级别:

  • 找到一个基于Esper的速率限制器,您可以在其中构建自己的查询以符合您的突发需求。
  • Jetty有一个内置的servlet filter
  • 内置blocks的Java库,用于创建自己的机制
  • Camel有一个节流机制

但我认为在 webserver 级别实施更容易

或使用专用的服务器插件

答案 1 :(得分:0)

你也可以看看Guava RateLimiter - 它为更复杂的限速器提供了一个很好的起点。