我想添加一个非常简单的过滤器来执行每个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
最佳答案
在Java级别:
找到了基于Esper的速率限制器,您可以在其中构建自己的查询以匹配突发需求。
Jetty具有内置的servlet filter
具有内置blocks的Java库,用于创建您自己的机制
Camel具有节流机制
但我认为在网络服务器级别更容易实现
Nginx
Apache Httpd
或带有专用服务器附件
IBM WebSphere DataPower