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通过线程锁控制同步,只 ...
随机推荐
- apk获取sha1值的方法
安卓应用都使用一个签名证书(.keystore或.jks文件)签名,签名证书可以由jdk生成.证书生成后,证书就有其sha1值. 使用此证书打包后的安卓应用,也有其一样的sha1值.md5值和sha2 ...
- Android 安全研究 hook 神器frida学习(一)
在进行安卓安全研究时,hook技术是不可或缺的,常用的有Xposed:Java层的HOOK框架,由于要修改Zgote进程,需要Root,体验过Xposed,整个过程还是很繁琐的,并且无法hook,na ...
- [译] 使用 Espresso 隔离测试视图
原文地址:Testing Views in Isolation with Espresso 原文作者:Ataul Munim 译文出自:掘金翻译计划 译者:yazhi1992 校对者:lovexiao ...
- Promise是如何实现异步编程的?
Promise标准 不能免俗地贴个Promise标准链接Promises/A+.ES6的Promise有很多方法,包括Promise.all()/Promise.resolve()/Promise.r ...
- 又一个小而美的Java 开发框架: Solon 1.2 新篇
Solon 1.2 发布后,取消了X类名前缀.故对此文做些调整. Solon 是Java世界里一个新的极易上手的Java开发框架.参考过 Javalin . Spring boot 等很多现有框架的设 ...
- Linux下删除文件名带有空格的文件
1.使用单引号将文件名括起来进行操作: rm '2018-08-07 17-29-48.png'
- Linux嵌入式学习-远程过程调用-Binder系统
Binder系统的C程序使用示例IPC : Inter-Process Communication, 进程间通信RPC : Remote Procedure Call, 远程过程调用 这里我们直接只用 ...
- JAVA程序通过JNI调用C/C++库
java程序如何调用c/c++库中的函数主要分为三个步骤: 1. 加载库文件. System.loadLibrary 2. 找到函数( java函数<----映射---->c函数 ) 3. ...
- Qt学习笔记-安装phonon模块
如果想要运行使用Qt中的phonon写的程序,需要满足一下条件:Qt基本库.Qt phonon库.phonon_backend(后端插件)和多媒体播放后台.下面以linux(Fedora 12)系统. ...
- CSDN中的MARKDOWN编辑器如何快速复制粘贴图片?
前言 我们在使用csdn的markdown编辑器复制其它网站图片,按住ctrl+C复制选择图片,然后按ctrl+V粘贴图片到md编辑器无任何反应!markdown编辑器每次都没法复制粘贴截图! 下面小 ...