measure/enforce 客户 Web 请求配额的技巧

Techniques to measure/enforce a quota on customer web requests

我有一个用于 B2B 应用程序的 Web 应用程序,其中包含多个同质 Web 前端(具体来说,我 运行 在 App Engine 上使用)。我需要设计一个短期配额系统,以便在客户的突发请求率超过他们的配额时拒绝流量。需要支持的客户数量在数万范围内。我要衡量这些配额的时间尺度将在 "minutes" 范围内;最多一个小时。

例如如果时间范围是 10 分钟并且客户 X 提出的请求远远超过他们的配额,那么我可以接受系统服务 all 他们的请求,直到他们用完他们的请求数量每 10 分钟允许一次,然后在剩下的 10 分钟 window 中拒绝他们的所有请求,然后在接下来的 10 分钟 window.

中重新开始该过程

我考虑过的半生不熟的解决方案:

Memcache 适用于这种方案,但使用原子增量和获取。

但是请注意,10 分钟的限制 window 对保护您的系统免受过载没有太大作用。至少,您应该在整个 window 期间的不同时间(随机或精心选择)重置客户数量,这样您就不会同时被所有客户压得喘不过气来。如果您有足够的客户,这将确保负载稍微均匀分布。