关闭LimitLion
项目描述
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的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | c7bed3130fc492ad8acfd8feb45581b4cb197eb6424bd353737880fda9ef23f3 |
|
MD5 | 441329e1bc382c97a627092958d19952 |
|
BLAKE2b-256 | bcf6ded764d34564965d73cf0d33f17069fc236230706502646b2e744646708e |