常见限流算法

常见限流算法

所谓限流,就是指限制流量请求的频次。它主要是在高并发情况下,用于保护系统的一种策略,主要是避免在流量高峰导致系统崩溃,造成系统不可用的问题。

实现限流常见的算法4 种,分别是计数器限流算法、滑动窗口限流算法、漏桶限流算法、令牌桶限流算法。下面,我给大家详细介绍每种算法的基本原理。

动动发财小手,关注 + 点赞 + 收藏不迷路。

一.计数器限流算法

指在固定的时间段内,限制接口调用的次数,例如1分钟接口只能调用100次,超过100次则不再调用。

算法实现

记录上一次接口调用的时间,与当前时间进行比较,在同一分钟内,则记录数器累加1,否则计数值器重置再累加1,计数器超过100则返回限流拒绝。

算法缺陷

在时间段临界值附近如果有密集的请求,会导致单位时间内调用次数超过限流次数。比如01分钟的后半分钟调用了100次,02分钟的前半分钟调用了100次,会导致00:00:30 ~ 00:01:30时间段内调用接口200次

二.滑动窗口限流算法

本质上也是一种计数器,只是通过以时间为维度的可滑动窗口设计,来减少了临界值带来的并发超过阈值的问题。每次进行数据统计的时候,只需要统计这个窗口内每个时间段的访问量就可以了,之后不断往后滑动。

Spring Cloud 中的熔断框架Hystrix,以及Spring Cloud Alibaba 中的Sentinel 都采用滑动窗口来做数据统计。

三.漏桶限流算法

它是一种恒定速率的限流算法,不管请求量是多少,服务端的处理效率是恒定的。基于MQ 来实现的生产者消费者模型,其实算是一种漏桶限流算法。

四.令牌桶限流算法

相对漏桶算法来说,它可以处理突发流量的问题。它的核心思想是,令牌桶以恒定速率去生成令牌保存到令牌桶里面,桶的大小是固定的,令牌桶满了以后就不再生成令牌。

每个客户端请求进来的时候,必须要从令牌桶获得一个令牌才能访问,否则排队等待。在流量低峰的时候,令牌桶会出现堆积,因此当出现瞬时高峰的时候,有足够多的令牌可以获取,因此令牌桶能够允许瞬时流量的处理。

网关层面的限流、或者接口调用的限流,都可以使用令牌桶算法,像Google 的Guava,和Redisson 的限流,都用到了令牌桶算法。

五.总结

限流的本质是实现系统保护,最终选择什么样的算法,一方面取决于统计的精准度,另一方面考虑限流维度和场景的需求。

引用:

1.Tom弹架构

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值