Apollo 技术文档Apollo 技术文档
指南
  • 架构概述
  • BigWorld 架构深度解析
  • BigWorld 进程架构与玩家生命周期
  • AOI九宫格系统详解
  • AOI广播与消息去重
  • Base 模块
  • Core 模块
  • Runtime 模块
  • Data 模块
  • Network 模块
  • /modules/actor.html
  • Game 模块
  • BigWorld 模块
服务器应用
API 参考
QA
GitHub
指南
  • 架构概述
  • BigWorld 架构深度解析
  • BigWorld 进程架构与玩家生命周期
  • AOI九宫格系统详解
  • AOI广播与消息去重
  • Base 模块
  • Core 模块
  • Runtime 模块
  • Data 模块
  • Network 模块
  • /modules/actor.html
  • Game 模块
  • BigWorld 模块
服务器应用
API 参考
QA
GitHub
  • MMORPG 架构 QA

Q89: 如何设计限流和防刷机制?

核心结论

限流和防刷的目标,不只是拦住“太多请求”,而是区分:

  • 正常高频行为
  • 恶意或异常重复行为
  • 关键资源保护需求

真正有效的系统通常不是只上一种令牌桶算法,而是分层做:

  • 接入层限流
  • 会话层限流
  • 业务层防刷

一、先区分限流和防刷

两者相关,但不完全一样。

1. 限流

更关注:

  • 资源保护
  • 系统稳定性

2. 防刷

更关注:

  • 恶意收益获取
  • 自动化滥用
  • 异常重复操作

有些请求量不大,但收益异常高,也属于防刷问题。

二、限流粒度必须分层

常见粒度包括:

  • IP
  • 账号
  • 角色
  • 会话
  • 接口或消息类型

不同层级解决的问题不同。

例如:

  • IP 更偏外部攻击与接入保护
  • 角色和接口粒度更贴近业务刷取行为

三、业务层防刷比算法更重要

很多高价值漏洞不是靠大流量触发,而是靠:

  • 重复点击
  • 自动脚本
  • 边界状态重试

所以业务层通常还需要:

  • 幂等
  • 冷却时间
  • 状态机校验
  • 收益上限

这些比单纯“每秒多少次”更关键。

四、不同接口应采用不同策略

例如:

  • 登录接口适合严格接入限流
  • 聊天适合频率和内容双控
  • 领奖和购买适合幂等加频率限制
  • 移动消息不能直接按普通接口限流思路处理

如果所有请求都套同一桶参数,体验和安全都不会太好。

五、限流触发后的处理也要设计

常见处理方式包括:

  • 直接拒绝
  • 延迟响应
  • 降级服务
  • 进入验证码或人工复核
  • 记入风控分

并不是所有超限都该一刀切封禁。

六、工程上更稳妥的组合

常见做法是:

  • 接入层做粗限流
  • 会话层做频率控制
  • 业务层做幂等、状态机和收益限制
  • 风控层做持续异常统计

这样才能同时保护系统和业务收益。

七、常见误区

1. 限流就是令牌桶

令牌桶很常见,但只是基础工具,不是完整防刷方案。

2. 请求量不大就不算刷

很多刷子恰恰利用低频高收益漏洞。

3. 超限就封号最稳

很多时候更合理的是逐级处置和持续观察。

参考资料

  • 限流、幂等和风控评分实践资料
在 GitHub 上编辑此页
最后更新: 3/20/26, 6:06 AM
贡献者: cuihairu