Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
实现大规模API使用配额系统_Api_Design Patterns_Architecture_Rate Limiting_Quota - Fatal编程技术网

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

实现大规模API使用配额系统,api,design-patterns,architecture,rate-limiting,quota,Api,Design Patterns,Architecture,Rate Limiting,Quota,从高层次的角度来看,如何实现API使用配额系统 特别是,它必须满足以下要求: 实时 快速,而不是显著降低API的速度 如果使用内存缓存,则需要在突然关闭后恢复(有利于API客户端的配额精度的小损失是可以的) 速率限制(DOS保护) 结垢井 是否有任何公认的体系结构模式/算法用于实现此类系统?您的API是否有可用的数据库?如果是这样,只需为您想要测量或限制的每个注册帐户存储一个计数器即可 当有人登录时,使用一种技术,例如确保每个API调用都将通过您的节流算法运行,这应该很简单。24小时节流系统

从高层次的角度来看,如何实现API使用配额系统

特别是,它必须满足以下要求:

  • 实时
  • 快速,而不是显著降低API的速度
  • 如果使用内存缓存,则需要在突然关闭后恢复(有利于API客户端的配额精度的小损失是可以的)
  • 速率限制(DOS保护)
  • 结垢井

是否有任何公认的体系结构模式/算法用于实现此类系统?

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

当有人登录时,使用一种技术,例如确保每个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数据库。

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

当有人登录时,使用一种技术,例如确保每个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数据库