QPS限流如何设置阈值比较合理
限流配置中,阈值其实是很难准确并恰当的设置的。 我理解的配置原则:
- 不能影响正常流量
- 能起到限流作用,保护服务
现状却是阈值真的很难配置,已经用了很多脑细胞, 说下我的配置理解:
- 服务会提供多个接口,多个接口在线上有多种请求组合,用户的使用方式无法精确预判,所以,没法以固定情景确定每个接口的阈值
- 针对单个接口压测得到每个接口QPS上限,能做到不误杀的配置是,针对每个接口配置阈值,分别是接口QPS上限,但是这样大概率会不起作用,无法真的保护服务。
- 按80%比例配置阈值,可能会误杀正常流量。 各位有好的方案配置阈值嘛?
2 回复
看你的目的是为了
- 防攻击: 更精确识别恶意请求, 放弃服务可能会被流量拖垮, 即使流量是正常用户产生的流量
- 保证服务稳定: 确保未限流用户可正常访问, 放弃限流用户, 即使限流用户可能是正常用户
这2个目的存在些许冲突, 实践中可能两个都用, 工作在不同的层面, 并且有不同的策略和阈值
-
防攻击 防爬虫 防dos
- 持续增强恶意请求的识别能力, 或者反向识别正常用户
- 比如每小时超过n次请求的用户, 自动化的办法是找能覆盖99%用户的请求量
- 异常用户需要给展示人机识别
-
保证服务稳定
- 需要引入服务负载指标, 到达临界前一些, 就需要限流用户
- 注意是用户, 不是请求, 已有用户离开后, 才能接受新用户
- 限流用户需要展示排队界面
- 考虑全链路是否能上弹性计算
@netwjx 感谢用心的解答,不过和我的问题对不上,我问的很具体了,限流的目的我是知道的,问题是阈值如何设置合理,希望能集思广益讨论下,我也查阅了很多资料,并没有一个合理的方案