openrstry 限流 是否有清零逻辑 连接池
openrstry 限流 是否有清零逻辑
https://github.com/openresty/lua-resty-limit-traffic
# encoding=utf-8
# Shawn 2020/4/28 10:31
from asgiref.sync import async_to_sync class ABCBucketToken:
def __init__(self):
pass def connect_bucket(self):
pass def refresh_token(self):
pass def check_token(self):
pass def disconnect_bucket(self):
pass def __del__(self):
pass class BizBucketToken(ABCBucketToken):
factory_req_id = lambda k: 'BizBucketToken.' + k
class_var_bucket_created = False def __init__(self, req_id='anonymoususer', limit=16, window_second=32):
self.req_id = BizBucketToken.factory_req_id(req_id)
self.limit = limit
self.window_second = window_second
# TODO
self.connect_bucket()
@classmethod
def connect_bucket(cls):
if cls.class_var_bucket_created:
return
# TODO cnf
# TODO check alive
def get_redis_conf():
return 'redis://:pwd@rcs.com:6379/2' async def create_redis_pool(i: str):
import aioredis
pool = await aioredis.create_redis_pool(i)
return pool redis_conf = get_redis_conf()
redis_pool = async_to_sync(create_redis_pool)(redis_conf)
cls.bucket = redis_pool
cls.class_var_bucket_created=True
def handle_token(self):
to_throttle = False
pttl = async_to_sync(self.bucket.pttl)(self.req_id)
if pttl == -2:
async_to_sync(self.bucket.set)(self.req_id, self.limit)
async_to_sync(self.bucket.pexpire)(self.req_id, self.window_second * 1000)
elif pttl == -1:
async_to_sync(self.bucket.pexpire)(self.req_id, self.window_second * 1000)
elif pttl == 0:
# TODO
pass
elif pttl > 0:
r = async_to_sync(self.bucket.get)(self.req_id)
r = int(r)
if r >= 1:
async_to_sync(self.bucket.set)(self.req_id, r - 1)
else:
to_throttle = True
return to_throttle def disconnect_bucket(self):
pass def __del__(self):
pass if __name__ == 'main':
pass
连接池
uid = get_uid(request)
BizBucketToken.connect_bucket()
r = BizBucketToken(req_id=uid, limit=160, window_second=32)
to_throttle = r.handle_token()
openrstry 限流 是否有清零逻辑 连接池的更多相关文章
- openrstry 限流 是否有清零逻辑
openrstry 限流 是否有清零逻辑 https://github.com/openresty/lua-resty-limit-traffic
- Spring Cloud微服务Sentinel+Apollo限流、熔断实战总结
在Spring Cloud微服务体系中,由于限流熔断组件Hystrix开源版本不在维护,因此国内不少有类似需求的公司已经将眼光转向阿里开源的Sentinel框架.而以下要介绍的正是作者最近两个月的真实 ...
- Spring Cloud微服务限流之Sentinel+Apollo生产实践
Sentinel概述 在基于Spring Cloud构建的微服务体系中,服务之间的调用链路会随着系统的演进变得越来越长,这无疑会增加了整个系统的不可靠因素.在并发流量比较高的情况下,由于网络调用之间存 ...
- SpringCloud升级之路2020.0.x版-31. FeignClient 实现断路器以及线程隔离限流的思路
本系列代码地址:https://github.com/JoJoTec/spring-cloud-parent 在前面一节,我们实现了 FeignClient 粘合 resilience4j 的 Ret ...
- ASP.NET Core中使用固定窗口限流
算法原理 固定窗口算法又称计数器算法,是一种简单的限流算法.在单位时间内设定一个阈值和一个计数值,每收到一个请求则计数值加一,如果计数值超过阈值则触发限流,如果达不到则请求正常处理,进入下一个单位时间 ...
- 基于.net的分布式系统限流组件 C# DataGridView绑定List对象时,利用BindingList来实现增删查改 .net中ThreadPool与Task的认识总结 C# 排序技术研究与对比 基于.net的通用内存缓存模型组件 Scala学习笔记:重要语法特性
基于.net的分布式系统限流组件 在互联网应用中,流量洪峰是常有的事情.在应对流量洪峰时,通用的处理模式一般有排队.限流,这样可以非常直接有效的保护系统,防止系统被打爆.另外,通过限流技术手段,可 ...
- 【源码】openresty 限流
小结: 1.在连接环节计数,有清零环节 有3个参量 maxburst unit_delay https://github.com/openresty/lua-resty-limit-traffic/b ...
- coding++:RateLimiter 限流算法之漏桶算法、令牌桶算法--简介
RateLimiter是Guava的concurrent包下的一个用于限制访问频率的类 <dependency> <groupId>com.google.guava</g ...
- 一个轻量级的基于RateLimiter的分布式限流实现
上篇文章(限流算法与Guava RateLimiter解析)对常用的限流算法及Google Guava基于令牌桶算法的实现RateLimiter进行了介绍.RateLimiter通过线程锁控制同步,只 ...
随机推荐
- MySQL为Null会导致5个问题,个个致命!
在正式开始之前,我们先来看下 MySQL 服务器的配置和版本号信息,如下图所示: "兵马未动粮草先行",看完了相关的配置之后,我们先来创建一张测试表和一些测试数据. -- 如果存在 ...
- JDBC(六)—— 数据库事务
数据库事务 事务 一组逻辑操作单元,使数据从一种状态变换到另一种状态 事务处理 保证所有事务都作为一个工作单元来执行,即使出现了故障,都不能改变这种执行方式. 当在一个事务中执行多个操作时,要么所有事 ...
- ORB-SLAM3 细读单目初始化过程(上)
作者:乔不思 来源:微信公众号|3D视觉工坊(系投稿) 3D视觉精品文章汇总:https://github.com/qxiaofan/awesome-3D-Vision-Papers/ 点击上方&qu ...
- 2020DevOps状态报告——平台模型:扩展DevOps的新方法
平台模型是我们在这个领域看到越来越多的方法,它源于负责产品或服务的端到端交付的产品团队的理念.如果只应用于单一的产品,或者几个产品,它的效果很好. 但如果有数百种产品或服务,把一个产品团队用于这些产品 ...
- 安装Linux Deploy和Termux之后,再安装ftp服务软件都是多余的!
之前以为Debian 9 running via Linux Deploy或者Termux在安卓系统部署之后,一定要安装vsftpd或者pure-ftpd这些专门的ftp服务器软件,才能提供ftp服务 ...
- 【模拟】P1143进制转换
题目相关 题目描述 请你编一程序实现两种不同进制之间的数据转换. 输入格式 共三行,第一行是一个正整数,表示需要转换的数的进制n(2≤n≤16),第二行是一个n进制数,若n>10则用大写字母A- ...
- Python 中的行向量、列向量和矩阵
1.一维数组 一维数组既不是行向量,也不是列向量. import numpy as npa=np.array([1,2,3])print(np.shape(a))>>>(3,) 2. ...
- 【MyBatis】自定义 MyBatis
自定义 MyBatis 文章源码 执行查询信息的分析 我们知道,MyBatis 在使用代理 DAO 的方式实现增删改查时只做两件事: 创建代理对象 在代理对象中调用 selectList() 配置信息 ...
- 最全的HashMap源码解析!
HashMap源码解析 HashMap采用键值对形式的存储结构,每个key对应唯一的value,查询和修改的速度很快,能到到O(1)的平均复杂度.他是非线程安全的,且不能保证元素的存储顺序. 他的关系 ...
- Docker 镜像仓库使用(六)
阿里云docker 容器镜像服务: www.aliyun.com 1 服务开通 (开通的时候要求创建密码请牢记此密码) 2 创建命名空间 3 创建镜像仓库 4 linux 客户端登录 登录: dock ...