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 个请求的时间戳,并将新候选请求的时间戳与队列中最早请求的时间戳进行比较.
- 如果差异超过一秒,则执行候选请求并将其时间戳添加到队列中;
- 如果相差小于一秒,则候选请求被丢弃。
每当将新的时间戳添加到队列中时,最旧的时间戳就会被丢弃。
资源:
我有一个每秒调用多次的请求接口,大致如下所示:
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 个请求的时间戳,并将新候选请求的时间戳与队列中最早请求的时间戳进行比较.
- 如果差异超过一秒,则执行候选请求并将其时间戳添加到队列中;
- 如果相差小于一秒,则候选请求被丢弃。
每当将新的时间戳添加到队列中时,最旧的时间戳就会被丢弃。
资源: