什么是限流削峰
限流削峰是对服务端进行流量控制的常见手段,控制QPS上限以达到减轻服务端负担的目的。一个好的限流削峰方案应该实现以下三条原则:
- 对系统入侵性小,与业务充分解耦,以降低维护成本
- 使用合适的限流模型,达到流量QPS的精准控制
- 高性能,响应迅速,尽量降低业务请求在限流逻辑上所花费的时间
限流削峰模式
限流削峰总体来讲有两种模式。
一是针对单机的限流,这种限流模式一般针对单结点服务系统或者在多结点集群服务中作为结点的保护策略。这种模式下,限流算法只需要在内存中实现即可。
二是针对集群的限流,这种限流模式会在集群维度进行限流,保证进入集群的流量维持在某一上限之下。这种限流模式无关乎集群中节点的数量,限流上限并不会随着集群中节点的增减而弹性变化,通常来讲会作为满足特殊诉求存在,比如受到下游服务的承载能力制约,需要合理控制进入集群的流量,防止下游服务过载。这种模式下,限流算法需要结合一个集群中每个节点都能访问的存储中介去实现,一般来讲redis会充当这个中介。
限流模型
目前主流的限流模型主要有四种:
1. 固定时间窗模型
通过限制时间段内的请求通过数进行限流。
优点:限流逻辑简单,redis限流响应速度快。
缺点:流量限制不够精确,容易造成最大双倍QPS的误差,无法限制突发流量。
应用场景:大但均匀、突发变化较少的流量,需要快速限流响应。