实施大规模API使用配额系统

时间:2012-10-10 17:24:41

标签: api rest messaging quota rate-limiting

如何为自己的API实现API使用配额/速率限制系统?

在实践中,

  1. 需要实时并能够将使用情况收集到其他子系统中
  2. 应支持对DOS进行速率限制
  3. 应该是非常可扩展的,因为所有API调用都将调用此系统
  4. 实施此类系统时是否存在任何现有实施或经验分享?

1 个答案:

答案 0 :(得分:0)

您的API是否有可用的数据库?如果是这样,只需为每个要测量或限制的注册帐户存储一个计数器。

当有人登录时,使用AOP之类的技术来确保每个API调用都将通过限制算法运行,这应该很简单。 24小时限制系统的伪代码:

read access_count from DB
access_count++       
if access_count > limit then
   respond with something like 429 - Too Many Requests
else
   store access_count in DB
end

以上假设您有一个批处理作业,每晚遍历数据库,并将所有访问计数器清除为0,以便第二天的流量。

这种可扩展性取决于您的数据库选择。任何数据库都可以处理这个问题,特别是较新的NoSQL / NewSQL之一。