分布式限流算法

一:限流的作用
有高并发的系统中,由于API接口无法控制调用发的行为,因此如果遇到瞬时请求数量递增,就会导致接口占用过多的服务器子u,导致响应速度降低或者超时,甚至可能英雌导致服务器宕机,尤其是数据库服务器。
所以就有限流的思想,限制客户端对服务器端端的请求限制,如果在单位时间内超过该请求限制,就会执行快速失败或者服务降级。
所以限流主要应对一下情况:

  1. 热点业务带来的突发情况

  2. 调用方bug导致的突发请求

  3. 恶意攻击请求
    二:主要的限流算法
    核心思想:限制每秒的事务数

  4. 固定窗口计数器
    核心思路:
    1:将时间化为多个窗口
    2:在每个窗口内请求一次计数器加一
    3:如果计数器超过限制数量,则本窗口所有请求都丢弃到下一个时间窗口,计数器重置。
    缺陷:如果在在该窗口内前半段时间没有请求,后半段时间请求饱和,这也会导致请求激增。

  5. 滑动窗口计数器
    核心思路:
    思路大致和固定窗口计数器一致,只不过是在将时间划为多个区间,每经过一个区间的时间,则抛弃最老的一个区间,并纳入新的区间。
    这就可以避免双倍请求的出现,不过时间区间的精度越高,所需要的空间容量越大

  6. 漏桶算法
    核心思路:
    1:将每个请求视为水滴放入漏桶进行存储
    2:漏桶已固定速率向外漏出请求,如果漏桶空了则停止漏水
    3:如果漏桶满了就会直接将水滴丢弃
    具体实现就是是使用队列时间,从队列中取出请求,如果请求过多则放在队列外排队或者拒绝
    缺陷:短时间有大量请求,需要等待一段时间才能响应

  7. 令牌桶算法
    核心思路:
    1:令牌以固定速率生成
    2:生成的令牌放入令牌桶,如果桶满了令牌直接丢弃,请求只有从令牌桶值拿到令牌才可以执行
    3:如果令牌桶空了,请求直接被丢弃
    这样请可以将请求平均分布到时间区间内,又可以承受突发激增请求。是一种比较常用的限流算法

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值