接近极限

limitlion的Python项目详细描述


CircleCIMaintainabilityTest Coverage

限制

使用redis作为后端的令牌桶速率限制限制。灵感来自 条纹Scaling your API with rate limiters 博客文章。可用于控制从一个进程到多个进程的处理速率。 可能的实现包括保护数据库不受高处理率的影响, 编排队列使用者进程,或强制执行http请求速率限制。

下面是一个名为test的节流阀的简单示例,它允许5每秒请求数(rps) 使用8第二个窗口并请求1标记的2突发因子(默认) 对于每个工作单元。在examples目录中查找更多信息。

redis=redis.Redis('localhost',6379)throttle_configure(redis)whileTrue:allowed,tokens,sleep=throttle('test',5,2,8)ifallowed: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脚本创建一个 这些值如果在ReIDIS中还不存在。然后脚本使用这些值 在标记桶计算的knobs散列中。每次调用还设置 将knobs键的ttl设置为7天,这样只要 节流阀在上周已经启动。

由于这些设置存储在redis中,因此可以使用单独的进程来调整 它们在飞行中。这可以简单地手动发出redis命令 更改RPS或更复杂的进程,将普罗米修斯度量值轮询为 确定数据库的当前负载并相应地调整rps。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java使用哪个地图/集合?   bluej Java:计算税   由于性能问题,java双精度字符串替代方案   java Eclipse CDT生成设置因重新启动而丢失   如何在java控制台中显示字节流值   java获取url地址,其中是包含我的页面的iframe   java 403禁止的spring启动API调用错误?   如果一个方法返回true,java将停止计时器   使用JavaNIO获取文件创建日期   在Java中从整数转换为二进制时保留整个字节的字符串   java AspectJ&Maven警告:“未应用……中定义的建议?”   java为什么我得到3,我不应该得到+7   java当一个方法包含多个返回的if语句时,如何从该方法中获取返回值?   在运行时循环java(scan.nextLine()!="$")   java配置休眠。cfg。春天的xml   java使用HtmlUnit模拟用户,错误   java CLI如何持续检查更改   java最大素因子(返回)