Algorithm/data 限制请求的结构

Algorithm/data structure to throttle requests

我有一个每秒调用多次的请求接口,大致如下所示:

def do_something(timestamp_in_ms)

我正在寻找一种方法来进行简单的请求限制,以确保仅处理一秒钟内的前 N ​​个请求,并丢弃其余请求。理想情况下,这应该适用于持续一秒的每个时间间隔(例如 00:00:00.123-00:00:01.123)而不是仅时钟秒(例如 00:00:00-00:00:01).

另一个问题是 do_something 被调用得非常频繁,因此限制必须是高性能的。

您可以使用一个 queue 来保存之前 N-1 个请求的时间戳,并将新候选请求的时间戳与队列中最早请求的时间戳进行比较.

  • 如果差异超过一秒,则执行候选请求并将其时间戳添加到队列中;
  • 如果相差小于一秒,则候选请求被丢弃。

每当将新的时间戳添加到队列中时,最旧的时间戳就会被丢弃。

资源: