时间窗口(固定窗口)
在固定的时间范围内,限制请求总数,达到请求总数后服务降级
优点
可以精准控制每个时间段内的总体性能,防止服务崩溃
缺点
没有办法防止时间范围临界点突发大流量,很可能在时间范围交界处被大量请求直接打到降级,影响后续服务
时间窗口(滑动窗口)
时间范围长短固定,此时间范围在整个时间轴上滑动统计,例如每分钟允许100个请求,在00:00:00~00:00:30有40个请求,则00:00:31~00:01:00允许60个请求,而在00:00:31~00:01:00有50个请求,则在00:01:01~00:01:30允许50个请求
优点
时间范围滑动进行统计,可以将剩余的性能留给该时间段的后半部分,可以防止时间临界点打崩的问题
缺点
无法平滑控制请求流量,仅能控制时间段内请求总量,宏观来看,时间轴上的请求数量波形可能出现较大的波动
漏斗算法
维持一定量的请求空间,以稳定的速度处理请求,当漏斗累积的请求数量超过最大值时开始拒绝请求
优点
永远匀速处理请求,保证了服务稳定性
缺点
无法应对突发流量,由于处理速度恒定,当大量请求到来时,用户等待时间长,用户体验差
令牌桶算法
维持一定量的令牌数量,系统以恒定时间生成令牌并放入桶中,用户请求到来时需要先获取令牌,获取到令牌才会处理请求
优点
相比漏斗算法,支持了突发大流量,预先生成的令牌可以在一瞬间被取走,后续再以恒定的速度处理请求,既能支持高并发场景,又能平滑控制流量,多数业务场景会采用此方案,用户体验较好
缺点
令牌桶的数量,生成的速度需要根据以往的系统性能以及用户习惯等经验的累积来判断
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。