高并发接口限流方案

高并发系统用于保护系统有三种利器:缓存、降级、限流。

服务端限流的方案可以归纳为两窗两桶(固定窗口,滑动窗口,漏桶算法,令牌桶算法)

固定窗口法

  • 固定时间周期划分时间为多个时间窗口,如:每10秒为一个时间窗口
  • 在每个时间窗口内,每有一个请求,计数器加一
  • 当计数器超过限制,丢弃本窗口之后的所有请求
  • 当下一时间窗口开始,重置计数器

缺点

  • 通过请求量为允许限制的两倍

    假设限制1秒内最多通过10个请求,在第一个窗口的最后半秒内通过了10个请求,第二个窗口的前半秒内又通过了10个请求。这样看来就是在1秒内通过了20个请求。

  • 一旦流量进入速度有所波动,要么计数器会被提前计满,导致这个周期内剩下时间段的请求被限制。要么就是计数器计不满,导致资源无法充分利用。

滑动窗口法

  • 以当前时间为截止时间,往前取一定的时间作为时间窗口,比如:往前取 60s 的时间
  • 当有新的请求进入时,删除时间窗口之外的请求,对时间窗口之内的请求进行计数统计,若未超过限制,则进行放行操作;若超过限制,则拒绝本次服务

缺点

  • 当时间区精度越高,占用的空间资源就越大。

漏桶算法

  • 将每个请求视为水滴加入漏桶进行存储
  • 漏桶以固定速率匀速出水(处理请求)
  • 若桶满则抛弃请求

缺点

  • 不适合突发请求场景:当短时间内有大量的突发请求时,即便此时服务器没有任何负载,每个请求也都得在队列中等待一段时间才能被响应。

令牌桶算法

  • 以恒定的速度往令牌桶中放入令牌
  • 当有请求过来则从令牌桶中获取令牌进行后续请求
  • 当获取令牌失败后则进行友好处理。

分布式场景

网关限流

Nginx限流
  1. 基于IP地址和基于服务器的访问请求限流
  2. 并发量(连接数)限流
  3. 下行带宽速率限制
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值