【问题标题】:Algorithm/data structure to throttle requests限制请求的算法/数据结构
【发布时间】:2021-02-13 02:33:08
【问题描述】:

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

def do_something(timestamp_in_ms)

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

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

【问题讨论】:

    标签: algorithm data-structures throttling


    【解决方案1】:

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

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

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

    资源:

    【讨论】:

    • 我想这里的队列在概念上应该实现为环形缓冲区?
    • @ZizhengTai 我认为这并不重要。您可以使用队列的任何实现。如果你喜欢环形缓冲区,你可以使用环形缓冲区。 Python 已经有 queue.Queuequeue.SimpleQueue 类,所以我建议使用其中之一,除非你特别想要学习机会来实现自己的。
    猜你喜欢
    • 1970-01-01
    • 2013-02-08
    • 2020-10-25
    • 2015-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-09
    • 2010-09-21
    相关资源
    最近更新 更多