限速API(spring MVC)

时间:2014-12-22 01:56:03

标签: spring spring-mvc redis limit rate

我正在寻找最有效的方式来实施(或使用已经设置好的)速率限制器,以保护我的所有其余用户界面。我所看到的保护是每用户限制器的每秒呼叫次数"

我在网上看了一下,结果是使用了#34; Redis"或番石榴RateLimiter。

说实话,我从来没有使用过Redis,我真的不熟悉它。但通过查看其文档,似乎它具有非常强大的速率限制系统。

我还看了一眼Guava的RateLimiter。它看起来更容易使用(不需要安装redis等......)

所以我想在我的案例中提出一些建议""最好的解决方案?使用Redis"太多"?

你们有没有尝试过RateLimter?这是一个好的解决方案吗?它是否可扩展?

PS:如果您认为有更好的选择,我也会对上述其他解决方案持开放态度。

谢谢!

3 个答案:

答案 0 :(得分:2)

Guava的RateLimiter会阻塞当前线程,因此如果针对受限制的服务发生异步调用,则会阻塞大量线程,并可能导致空闲线程耗尽。

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

但是Kite仍然是单JVM方法。如果确实需要群集感知方法,Redis是一种可行的方法。

答案 1 :(得分:1)

如果您试图限制对基于Spring的REST api的访问,则应使用token-bucket algorithm

有一个bucket4j-spring-boot-starter项目,该项目使用bucket4j库来限制对REST api的访问。您可以通过应用程序属性文件进行配置。 limit the access based on IP address or username有一个选项。

如果您使用的是Netflix Zuul,则可以使用Spring Cloud Zuul RateLimit,它使用不同的存储选项:Consul,Redis,Spring Data和Bucket4j。

答案 2 :(得分:0)

没有硬性规则,完全取决于您的具体情况。如果"我从未使用过Redis",我会推荐番石榴RateLimiter。相比redis,一个全新的nosql系统,番石榴RateLimiter更容易上手。通过添加几行代码,您可以以可配置的速率分配许可。剩下要做的就是调整它以满足您的需求,例如为每个用户提供速率限制。