常见的限流算法以及应用

常见的限流算法

令牌桶算法

1)存放固定令牌的桶,生产令牌的速率固定
2)当令牌达到上限时候,产生的令牌被丢弃或拒绝
3)n个请求过来,拿n个令牌,若令牌不足,则请求被决绝或等待

漏桶算法

1)桶容量固定,固定速录流出
2)桶是空的,不流出
3)以任意速率流入桶,若超过桶容量,被丢弃

对比:令牌桶算法可一次拿n个令牌,说明允许突发请求。漏桶算法流出速率固定,说明会平滑处理突发请求

计数器限流

例如数据库连接池大小,线程池大小,秒杀并发数限制。全局请求数量达到一定阈值进行限流。

常见的限流应用

应用层限流

1)底层数据库连接数,tomcat访问线程数,某个接口最大请求数总数限制
2)过载保护,guava的令牌桶算法,hystrix降级
场景:①系统只能抗住100/s流量 ②抢购超出限额,直接告诉用户没货
3)分布式限流
nginx+lua脚本实现

接入层限流

nginx限流模块
ngx_http_limit_conn_module可按照ip维度进行限流
ngx_http_limit_req_module漏桶算法的实现,可按照ip维度限制请求速率

节流

有时候想在特定时间内对重复的相同事情只处理一次,或者限制多个连续相同时间最小执行时间间隔。
1)throttleFirst/throttleLast
同一时间窗口内,若相同时间处理只处理第一个/最后一个。
例如:网页resize事件,快速改变浏览器大小时候,可保证页面不卡顿。
2)throttleWithTimeOut
限制两个连续时间执行时间不小于某个时间窗口。例如android实现RxJava1.2
例如:关键字搜索自动补全,用户快速输入造成自动补全之前的请求无效,可减少频繁网络请求,避免每个字都发送请求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值