系统限流功能

限流功能

现存问题

使用系统是有消耗成本的,用户有可能疯狂刷量,让你破产

解决方案

  1. 限制用户调用总次数,控制成本
  2. 用户在短时间内疯狂使用,导致服务器资源被占满,其他用户无法使用 → 限流算法

核心问题

限流阈值多大比较合适?比如限制单个用户在每秒只能使用1次

限流算法类型

1. 固定窗口限流

  • 原理:单位时间内允许部分操作,1小时只允许10个用户操作
  • 优点:实现最简单
  • 缺点:可能出现流量突刺。比如前59分钟内,用户访问量只有1个,但是第60分钟的用户访问量却有10个,那么就会导致用户访问量暴增,导致服务器压力过大,用户访问失败,服务器仍然有高峰。

2. 滑动窗口限流

  • 原理:在时间区间内平滑控制请求次数
  • 优点:不会出现流量突刺,1个小时的时间段内只能访问10个请求
  • 缺点:相对复杂,限流效果和滑动单位有关,滑动单位越小,限流效果越高,但是往往很难选到一个最合适的滑动单位

3. 漏桶限流

  • 原理:以固定的速度处理请求,当请求桶满了后拒绝请求。每秒处理10个请求,桶的容量是10,每0.1秒处理1个请求,如果10秒内只有10个请求,那么都能处理,如果是11个,桶就会溢出,那么最后一个会被拒绝
  • 优点:能够一定程度上应对流量突刺
  • 缺点:没办法迅速处理一批请求,只能一个一个按顺序来处理(固定速率的缺点)

4. 令牌桶限流

  • 原理:管理员先生产一批令牌,每秒生成10个;当用户要操作时,先去拿到一个令牌,有令牌的就有资格去操作,能够同时执行操作;拿不到令牌就等待
  • 优点:能并发处理同时的请求,并发性能高
  • 缺点:还是存在时间单位选取问题,时间单位小了,

限流的粒度

  1. 针对某个方法限流,即单位时间内最多允许同时XX个操作使用这个方法
  2. 针对某个限流,比如单个用户单位时间内最多执行XX次操作

限流实现方式

1. 本地限流(单机限流)

每个服务器单独限流,一般适用于单体项目,就是你的项目只有一个服务器

2. 分布式限流(多机限流)

  • Redisson集中统计用户频率数据限流
  • 网关集中限流和统计(Sentinel、Spring Cloud Gateway)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Whoam_laowei

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值