Servletfilter:非常简单的限速filter,允许突发
我想添加一个非常简单的filter来执行每IP速率限制,但仍然允许突发,有点像iptables允许做的。
我不想安装整个厨房水槽:我只需要一个实现该function的Filter类。
什么是一个好的数据结构/算法,允许做一个简单的“速率限制但允许短暂的突发”?
例如,如果用户尝试每分钟执行的操作超过’x’GET / POST,我想提供HTTP错误代码,但我仍然想让同一个用户“爆发”到’y’(其中y> x)直到他击中爆裂帽。
仅仅是为了比较,这里是如何使用iptables配置类似的速率限制与突发(这只是一个例子,显示我在说什么,即使在我的情况下它不是关于设置速率限制+ TCP TCP数据包突发):
iptables -A INPUT -p tcp --syn -m limit --limit 1/s --limit-burst 5
在Java级别:
- 找到一个基于Esper的速率限制器,您可以根据突发需求构建自己的查询。
- Jetty有一个内置的servlet filter
- 带有内置块的 Java库,用于创建自己的机制
- 骆驼有一个节流机构
但我认为在网络服务器级别实施更容易
- Nginx的
- Apache Httpd
或者使用专用服务器插件
- IBM WebSphere DataPower
你也可以看看Guava RateLimiter – 它为更复杂的限速器提供了一个很好的起点。
- 如何在Wildfly中部署时使用persistence.xml设置hibernate.hbm2ddl.auto
- Java Graphics.drawImage()如何工作以及ImageObserver的作用是什么
- scala和java枚举之间的差异
- 如何使Tomcat中的所有会话失效?
- ITextRenderer:将页面高度调整为内容
- 将java随机数生成向某个数字倾斜
- Mockito – 期望0匹配,1记录(InvalidUseOfMatchersException)
- 如何使Java.awt.Robot类型为unicode字符? (可能吗?)
- 无法从类路径上的/AwsCredentials.properties文件加载AWS凭据