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

Ced*_*tin 3 java tomcat rate-limiting servlet-filters

我想添加一个非常简单的过滤器,对每个 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
Run Code Online (Sandbox Code Playgroud)

mes*_*chs 5

Java级别:

  • 找到了一个基于Esper 的速率限制器,您可以在其中构建自己的查询来满足您的突发要求。
  • Jetty有一个内置的servlet过滤器
  • 具有内置块的 Java 库,用于创建您自己的机制
  • 骆驼有油门机构

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

或者使用专用服务器插件