赞
踩
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
例如:关键字搜索自动补全,用户快速输入造成自动补全之前的请求无效,可减少频繁网络请求,避免每个字都发送请求。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。