gpt4 book ai didi

java - Spring中如何实现基于客户端 token 的限速?

转载 作者:IT老高 更新时间:2023-10-28 13:53:11 24 4
gpt4 key购买 nike

我正在使用 Spring 3 + Spring MVC 开发一个简单的 REST API。身份验证将通过 OAuth 2.0 或使用 Spring Security 的带有客户端 token 的基本身份验证来完成。这仍在辩论中。所有连接都将强制通过 SSL 连接。

我一直在寻找有关如何实现速率限制的信息,但似乎没有很多信息。实现需要分布式,因为它可以跨多个 Web 服务器工作。

例如,如果有 3 个 api 服务器 A、B、C 并且客户端被限制为每秒 5 个请求,那么像这样发出 6 个请求的客户端会发现对 C 的请求被拒绝并出现错误。

A recieves 3 requests   \
B receives 2 requests | Executed in order, all requests from one client.
C receives 1 request /

它需要基于请求中包含的 token 工作,因为一个客户端可能代表许多用户发出请求,并且每个用户应该受到速率限制而不是服务器 IP 地址。

设置将是 HAProxy 负载平衡器后面的多个 (2-5) Web 服务器。有一个 Cassandra 支持,并且使用了 memcached。 Web 服务器将在 Jetty 上运行。

一个潜在的解决方案可能是编写一个自定义 Spring Security 过滤器,该过滤器提取 token 并检查在最后 X 秒内使用它发出了多少请求。这将允许我们为不同的客户做一些事情,比如不同的速率限制。

关于如何做到这一点有什么建议吗?是否有现有的解决方案,还是我必须编写自己的解决方案?我以前没有做过很多网站基础设施。

最佳答案

It needs to work based on a token included in the request, as one client may be making requests on behalf of many users, and each user should be rate limited rather than the server IP address.

The set up will be multiple (2-5) web servers behind an HAProxy load balancer. There is a Cassandra backed, and memcached is used. The web servers will be running on Jetty.

我认为该项目是请求/响应 http(s) 协议(protocol)。并且您使用 HAProxy 作为前端。也许 HAProxy 可以使用 token 进行负载平衡,您可以从 here 查看.

那么同样的token请求会到达同一个webserver,webserver可以使用内存缓存来实现限速。

关于java - Spring中如何实现基于客户端 token 的限速?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10183168/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com