连载中 4/15

网关与接入层:限流、防刷与黑名单

2026-09-04 · 705 阅读 · 0 评论 · 0 赞

系统级的第一道闸门

端上削峰拦的是重复点击与无意流量,但脚本不点按钮、直接打接口——系统的第一道防线必须自己站住。网关是所有流量的必经之路,在这里做三件事:限流决定系统最多接多少,防刷决定谁来得太频繁,黑白名单决定谁根本不该来。网关层微服务系列里讲过路由与过滤器链,这一篇聚焦秒杀场景的特殊配置。

入口限流:按容量放行

秒杀接口的限流值不来自拍脑袋,来自压测:全链路压测测出系统安全容量,比如 2 万 QPS,网关就按 2 万放行——令牌桶匀速发牌,超出的请求不进系统,直接返回排队页或售罄页。两个配置要点:限流规则按接口单独配置,秒杀接口的阈值远小于普通接口,互不影响;阈值进配置中心,活动期间随时可调——发现下游吃紧,先把入口阀门拧小,这比事后扩容快得多。

// 网关限流:令牌桶,秒杀接口独立配置
filters:
  - name: RequestRateLimiter
    args:
      redis-rate-limiter.replenishRate: 20000   # 稳态放行速率(压测得来)
      redis-rate-limiter.burstCapacity: 40000   # 瞬时容忍突发
      key-resolver: "#{@userKeyResolver}"       # 按用户维度限,不是全局一刀切
// 被限流的请求返回 429 + 排队页地址,而不是裸报错

防刷三板斧

频次控制按维度交叉:IP 维度——单 IP 秒级窗口限频,对付最粗糙的脚本;设备维度——设备指纹限频,穿透换 IP 的脚本;账号维度——单账号参与次数与下单次数上限。单维度都好绕(IP 池、设备农场),交叉才是关键:同一设备换一百个账号、同一账号换一百个 IP,交叉维度下都会露出马脚。频次数据用 Redis 原子计数,窗口用滑动窗口统计更精确。

黑名单与白名单

已知作恶的直接进名单:命中风控的设备与账号、历史黄牛、异常代理网段——网关过滤器查名单命中即拦,名单从风控中心实时下发到 Redis,网关本地再缓存一份降低延迟。白名单同样重要:内部压测账号、特定渠道用户需要确定性放行时,走白名单旁路。名单是动态的:活动进行中持续更新,误杀的及时捞出,新发现的实时加入——名单管理的本质是把风控的判断能力前置到入口。

排队:把硬拒变成等待

超过容量的流量不能一拒了之——几十万用户同时收到"系统繁忙",舆情立刻爆炸。排队方案把硬拒变成等待:超容量的请求进入虚拟排队,前端展示"您前面还有 N 人",后台按消化能力逐步放行。实现可以轻可以重:轻量版用 Redis 计数器分配排队号,超出的直接显示预计等待;重量版做真正的消息队列排队。排队的意义不在公平,在把不可控的洪峰转成可控的消化节奏。

网关拦下的是"来得太猛的",还剩一类更难缠的——"伪装成真人的"。下一篇讲风控:黄牛与脚本的对线。

☕
503

10 年全栈工程师 · 503咖啡馆主理人

#网关限流#防刷#黑名单#令牌桶#虚拟排队

评论 (0)

热门推荐

连载中 11/22

主从搭建实操:从零配出一主两从

光讲原理不过瘾?手把手搭一主两从:my.cnf 六个参数、复制账号、GTID、CHANGE REPLICATION SOURCE TO、SHOW REPLICA STATUS 验收,附翻车排查清单。

#MySQL#主从复制#GTID#主从搭建#高可用
2026-05-07 · 10101 阅读 · 0 评论 · 0 赞
连载中 16/22

连接池:HikariCP 参数与连接风暴

连接池不是越大越好:8 核机器配 1000 连接反而更慢的数学原理,HikariCP 四个必调参数,maxLifetime 与 wait_timeout 的隐形陷阱。

#MySQL#连接池#HikariCP#maxLifetime#连接风暴
2026-05-10 · 9873 阅读 · 0 评论 · 0 赞
连载中 4/16

缓存穿透:恶意 ID 打穿 MySQL 的四道防线

请求的数据在缓存和数据库里都不存在时,缓存形同虚设。聊聊参数校验、空值缓存、布隆过滤器、限流熔断四道防线的原理与组合打法。

#Redis#缓存穿透#布隆过滤器#高可用
2026-05-16 · 9294 阅读 · 21 评论 · 287 赞