限流功能
现存问题
使用系统是有消耗成本的,用户有可能疯狂刷量,让你破产
解决方案
- 限制用户调用总次数,控制成本
- 用户在短时间内疯狂使用,导致服务器资源被占满,其他用户无法使用 → 限流算法
核心问题
限流阈值多大比较合适?比如限制单个用户在每秒只能使用1次
限流算法类型
1. 固定窗口限流
- 原理:单位时间内允许部分操作,1小时只允许10个用户操作
- 优点:实现最简单
- 缺点:可能出现流量突刺。比如前59分钟内,用户访问量只有1个,但是第60分钟的用户访问量却有10个,那么就会导致用户访问量暴增,导致服务器压力过大,用户访问失败,服务器仍然有高峰。
2. 滑动窗口限流
- 原理:在时间区间内平滑控制请求次数
- 优点:不会出现流量突刺,1个小时的时间段内只能访问10个请求
- 缺点:相对复杂,限流效果和滑动单位有关,滑动单位越小,限流效果越高,但是往往很难选到一个最合适的滑动单位
3. 漏桶限流
- 原理:以固定的速度处理请求,当请求桶满了后拒绝请求。每秒处理10个请求,桶的容量是10,每0.1秒处理1个请求,如果10秒内只有10个请求,那么都能处理,如果是11个,桶就会溢出,那么最后一个会被拒绝
- 优点:能够一定程度上应对流量突刺
- 缺点:没办法迅速处理一批请求,只能一个一个按顺序来处理(固定速率的缺点)
4. 令牌桶限流
- 原理:管理员先生产一批令牌,每秒生成10个;当用户要操作时,先去拿到一个令牌,有令牌的就有资格去操作,能够同时执行操作;拿不到令牌就等待
- 优点:能并发处理同时的请求,并发性能高
- 缺点:还是存在时间单位选取问题,时间单位小了,
限流的粒度
- 针对某个方法限流,即单位时间内最多允许同时XX个操作使用这个方法
- 针对某个限流,比如单个用户单位时间内最多执行XX次操作
限流实现方式
1. 本地限流(单机限流)
每个服务器单独限流,一般适用于单体项目,就是你的项目只有一个服务器
2. 分布式限流(多机限流)
- Redisson集中统计用户频率数据限流
- 网关集中限流和统计(Sentinel、Spring Cloud Gateway)

被折叠的 条评论
为什么被折叠?



