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通过线程锁控制同步,只 ...
随机推荐
- Word2Vec和LDA的区别与联系
Word2vec是目前最常用的词嵌入模型之一.是一种浅层的神经网络模型,他有2种网络结构,分别是CBOW(continues bag of words)和 skip-gram.Word2vec 其实是 ...
- 实验3 C语言分支语句和循环语句编程应用(友好猜日期^_^)
实验任务一 #include <stdio.h> #include <math.h> int main(){ float a, b, c, x1, x2; float delt ...
- Spring源码--debug分析循环依赖--构造器注入
目的:源码调试构造器注入,看看是怎么报错的. spring:5.2.3 jdk:1.8 一.准备 首先准备两个循环依赖的类:userService和roleServic <bean id=&qu ...
- 相对于Statement,PreparedStatement的优点是什么?
优点: 1.PreparedStatement有助于防止SQL注入,因为它会自动对特殊字符转义. 2.PreparedStatement可以用来进行动态查询. 3.PreparedStatement执 ...
- Java学习日报7.23
import java.util.Scanner;public class LandP {public static void main(String args[]) { System.out.pri ...
- 各开源协议BSD、Apache Licence 2.0、GPL
以下是上述协议的简单介绍:BSD开源协议BSD开源协议是一个给于使用者很大自由的协议.基本上使用者可以"为所欲为",可以自由的使用,修改源代码,也可以将修改后的代码作为开源或者专有 ...
- 对象的克隆(clone方法)
1.深拷贝与浅拷贝 浅拷贝是指拷贝对象时仅仅拷贝对象本身(包括对象中的基本变量),而不拷贝对象包含的引用指向的对象.深拷贝不仅拷贝对象本身,而且拷贝对象包含的引用指向的所有对象. 2.深拷贝和浅拷贝的 ...
- canvas--总结一
一.什么是Canvas? HTML5的canvas元素使用JavaScript在网页上绘制图像: 画布是一个矩形区域,可以控制其每一像素: canvas拥有多种绘制路径,矩形,圆形,字符以及添加图像的 ...
- PostgreSQL使用MySQL外表(mysql_fdw)
postgres使用mysql外表 转载请注明出处https://www.cnblogs.com/funnyzpc/p/14223167.html 浅谈 postgres不知不觉已经升到了版本13,记 ...
- 商品类型的下拉框绑定一个事件,通过ajax获取属性
html代码这么写 <!-- 商品属性 --> <table cellspacing="1" cellpadding="3" width=&q ...