跳转到主要内容

关闭LimitLion

项目描述

CircleCI

LimitLion

使用Redis作为后端的令牌桶速率限制节流器。受Stripe的使用速率限制器扩展您的API博客文章启发。可用于控制一个到多个进程的处理速率。可能的实现包括保护数据库免受高处理速率的影响、编排队列消费者进程或强制执行HTTP请求速率限制。

使用以下命令安装: pip install limitlion

以下是一个名为test的简单节流器示例,它允许每秒5次请求(RPS),具有2的突发因子,使用8秒窗口并请求每个工作单元1个令牌(默认)。更多信息请查看examples目录。

redis = redis.Redis('localhost', 6379)
throttle_configure(redis)
while True:
    allowed, tokens, sleep = throttle('test', 5, 2, 8)
    if allowed:
        print ('Do work here')
    else:
        print ('Sleeping {}'.format(sleep))
        time.sleep(sleep)

设计

速率限制逻辑使用经典的令牌桶算法,但完全由Lua Redis脚本实现。它利用Redis的TIME命令,确保所有调用者之间具有公平的微秒级分辨率,而不管调用者的时钟如何。请注意,桶在整秒开始和结束。

需要Redis 3.2+,因为使用了replicate_commands()来支持在Lua脚本中使用TIME命令。

配置

为RPS、突发因子和窗口大小提供了默认值,并将其提供给节流器Lua脚本。如果这些值在Redis中尚未存在,Lua脚本将创建一个名为throttle:[throttle name]:knobs的哈希表。然后,脚本使用该knobs哈希表中的值进行令牌桶计算。每次调用还会设置knobs键的TTL为7天,以便在最近一周内保持活跃。

由于这些设置存储在Redis中,因此可以使用单独的进程动态调整它们。这可能只是手动发布Redis命令以更改RPS,也可能是一个更复杂的进程,它轮询Prometheus指标以确定数据库的当前负载并相应地调整RPS。

运行计数器

这是一个用于在Redis中跟踪指定时间窗口计数的小型但实用的工具。这些计数可以用于决定限制或失败进程,以及用于诊断。有关详细信息,请查看 running_counter.py

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分布

limitlion-1.0.0.tar.gz (9.1 kB 查看哈希值)

上传时间

由以下支持

AWSAWS云计算和安全赞助商DatadogDatadog监控FastlyFastlyCDNGoogleGoogle下载分析MicrosoftMicrosoftPSF赞助商PingdomPingdom监控SentrySentry错误日志StatusPageStatusPage状态页面