2014-12-22 30 views
1

我正在寻找更有效的方法来实现(或使用已经设置的)速率限制器来保护我所有的休息api url。我看到的保护是“每用户限制每秒呼叫” “Rate-Limit a API(spring MVC)

我在网上看了一下,出现的是使用”Redis“或Guava RateLimiter。

说实话我从来没有用过Redis,我真的不熟悉它。但通过查看它的文档,似乎它有一个相当强大的限速系统。

我也看过Guava的RateLimiter。它看起来更容易使用(不需要一个Redis的安装等...)

所以我想建议什么是“在我的情况”最好的解决方案? 正在使用Redis“多”? 你们有没有试过RateLimter?这是一个好的解决方案吗?可扩展?

PS:我也问了其他的解决方案,在2我前面提到的,如果你想有更好的选择

谢谢!

回答

0

有没有硬性规定,完全取决于你的具体情况。前提是“我从来没有使用Redis”,我会推荐番石榴RateLimiter。与Redis相比,这是一个全新的nosql系统,番石榴RateLimiter更容易入门。通过添加几行代码,您可以以可配置的速率分发许可证。剩下的工作就是根据您的需求进行调整,例如为每个用户提供速率限制。

2

Guava的RateLimiter会阻止当前线程,所以如果有一阵异步调用针对受限制的服务,将会阻塞大量线程并可能导致空闲线程耗尽。

也许基于Spring的库Kite满足您的需求。 Kite的“限速节流阀”在委托人达到某个时间段内请求数量的可配置限制后拒绝请求。速率限制器使用Spring Security来确定涉及的主体。

但风筝仍然是单JVM方法。如果您确实需要一种支持群集的方法,则Redis是一种可行的方法。