常见限流算法
限流
突发流量
某个热点事件(微博热搜)
竞争对手的爬虫
恶意的刷单
超高流量可能会导致服务器无法承受过高的压力挂掉, 这时候也可能会产生数据丢失(不如主动限流)
保证大部分流量的正常使用, 而牺牲掉了少部分流量
计数器(固定窗口)
用途
QPS限流
统计总访问量
临界问题
在第一个周期的最后5秒和下一个周期的开始5秒时间段内, 分别涌入100 的访问量,虽然没有超过每个周期的限制量, 但是整体上10秒内已达到200的访问量,已远远超过服务器的负载能力
该限流对于周期比较长的限流,存在很大的弊端
突刺现象
若在单位时间1s内的前10ms,已经通过了100个请求, 那后面的990ms,都只能眼巴巴的把请求拒绝
滑动窗口
解决固定窗口算法的临界问题
漏桶
限制常量流出速率
即使网络中不存在资源冲突(没有发生拥塞), 漏桶算法也不能使流突发(burst)到端口速率
对于存在突发流量来说缺乏效率
如果瞬时大流量的话,将有大部分请求被丢弃掉
若进水速率小于等于最大出水速率
出水速率等于进水速率
不会积水
若进水速率大于最大出水速率
恒定以最大速率出水
会积水
令牌桶
生成令牌的速度是恒定的, 而拿令牌是没有限速的
限制的是平均流入速率
允许一定程度突发流量
只要有令牌就可以处理, 支持一次拿多个令牌
当桶中的令牌达到最低限额的时候, 请求处理完之后将不会删除令牌,以此保证足够的限流
开源组件
分布式
阿里 Sentinel
Hystrix
Resilience4j
单体
guava RateLimiter
五月 04, 2020. Created by XMind