接近极限

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第三方库


热门话题
mysql java语言非法参数异常?   java绘制控制流图   无法通过java eclipse中的ssh隧道远程连接到mysql数据库   直接在@SuppressWarnings之后出现java Eclipse错误(“未选中”)   java如何使用远程api google应用程序引擎api客户端?   工具栏中的java导航图标颜色未更改?   java返回带有映射子集的实体   java Spring重新加载属性Bean未更新   fileoutputstream正在获取java。木卫一。IOException:流关闭错误,但未显式关闭它   jsp标记显示java。时间使用jstl的LocalDateTime   java如何设置onFailure事件(Spring,Kafka)的超时?   将java元素添加到多个线程中的列表时,会跳过这些元素   JAVAutil。扫描程序Java读取空格后的整数值   java JMonkey过滤器着色器获取片段的世界位置   java从mongodb获取随机值   java如何使用Intent。标记\u活动\u清除\u顶部以清除活动堆栈?   多线程如何控制在多个端口上监听的java服务器应用程序   在具有复合键的相关实体之间插入数据时发生java Hibernate错误