Q89: 如何设计限流和防刷机制?
核心结论
限流和防刷的目标,不只是拦住“太多请求”,而是区分:
- 正常高频行为
- 恶意或异常重复行为
- 关键资源保护需求
真正有效的系统通常不是只上一种令牌桶算法,而是分层做:
- 接入层限流
- 会话层限流
- 业务层防刷
一、先区分限流和防刷
两者相关,但不完全一样。
1. 限流
更关注:
- 资源保护
- 系统稳定性
2. 防刷
更关注:
- 恶意收益获取
- 自动化滥用
- 异常重复操作
有些请求量不大,但收益异常高,也属于防刷问题。
二、限流粒度必须分层
常见粒度包括:
- IP
- 账号
- 角色
- 会话
- 接口或消息类型
不同层级解决的问题不同。
例如:
- IP 更偏外部攻击与接入保护
- 角色和接口粒度更贴近业务刷取行为
三、业务层防刷比算法更重要
很多高价值漏洞不是靠大流量触发,而是靠:
- 重复点击
- 自动脚本
- 边界状态重试
所以业务层通常还需要:
- 幂等
- 冷却时间
- 状态机校验
- 收益上限
这些比单纯“每秒多少次”更关键。
四、不同接口应采用不同策略
例如:
- 登录接口适合严格接入限流
- 聊天适合频率和内容双控
- 领奖和购买适合幂等加频率限制
- 移动消息不能直接按普通接口限流思路处理
如果所有请求都套同一桶参数,体验和安全都不会太好。
五、限流触发后的处理也要设计
常见处理方式包括:
- 直接拒绝
- 延迟响应
- 降级服务
- 进入验证码或人工复核
- 记入风控分
并不是所有超限都该一刀切封禁。
六、工程上更稳妥的组合
常见做法是:
- 接入层做粗限流
- 会话层做频率控制
- 业务层做幂等、状态机和收益限制
- 风控层做持续异常统计
这样才能同时保护系统和业务收益。
七、常见误区
1. 限流就是令牌桶
令牌桶很常见,但只是基础工具,不是完整防刷方案。
2. 请求量不大就不算刷
很多刷子恰恰利用低频高收益漏洞。
3. 超限就封号最稳
很多时候更合理的是逐级处置和持续观察。
参考资料
- 限流、幂等和风控评分实践资料
