赞
踩
1.滑动窗口
为了防止瞬时流量,可以把固定窗口近一步划分成多个格子,每次向后移动一小格,而不是固定窗口大小,这就是滑动窗口(Sliding Window)。
阿里开源限流神器 Sentinel使用的是滑动窗口,但是在预热模式下使用的是令牌桶,
2.漏桶算法
3.令牌桶
Guava是google提供的java扩展类库,其中的限流工具类RateLimiter采用的就是令牌桶算法。
令牌桶和漏桶对比:
令牌桶是按照固定速率往桶中添加令牌,请求是否被处理需要看桶中令牌是否足够,当令牌数减为零时则拒绝新的请求;
漏桶则是按照常量固定速率流出请求,流入请求速率任意,当流入的请求数累积到漏桶容量时,则新流入的请求被拒绝;
令牌桶限制的是平均流入速率(允许突发请求,只要有令牌就可以处理,支持一次拿3个令牌,4个令牌),并允许一定程度突发流量;
漏桶限制的是常量流出速率(即流出速率是一个固定常量值,比如都是1的速率流出,而不能一次是1,下次又是2),从而平滑突发流入速率;
令牌桶允许一定程度的突发,而漏桶主要目的是平滑流入速率;
两个算法实现可以一样,但是方向是相反的,对于相同的参数得到的限流效果是一样的。
令牌桶应用到业务处理的场景,就要求即使有突发流量来了,系统自己或者下游系统要真的能够处理的过来.令牌桶的保护主要是丢弃请求更适合“突发流量”,是指秒杀、抢购、整点打卡签到、微博热点事件这种业务高并发场景
漏桶能更好的保护下游接口
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。