接近极限

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集合引用应用程序?   java无法插入到swagger 2.0文档中常见错误代码的html链接   循环中的java输入不匹配异常   java Spring批处理集成运行并行作业的远程分区   在Android中使用Gson在自定义类的ArrayList中读取java   C++规范化图像描述符OpenCV-java   java Andmore的Android软件包生成器失败,错误与sun/misc/BASE64Encoder相关   如何用java从多部分数据格式创建接收代码   java用文件填充数组   分页如何在Java代码中实现下一步按钮单击?   我们能用泛型参数动态调用Java接口方法吗?   java从另一个项目中定义的类调用静态方法需要为这两个项目添加库   反射:运行时类型信息是否存储在java中?   编写一个Java程序,允许用户输入自己的公式并进行计算   java Tomcat多个webapps文件夹   java比较两个xml文件并向第一个xml文件添加新标记   反射我能用正则表达式在java中找到类的方法吗?