连载中 4/15

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

2026-09-04 · 701 阅读 · 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)

相关推荐

连载中 12/20

排查四件套:jstack、jmap、jstat、jcmd 的实战分工

jstack 看线程在干什么,jmap 看堆里装了什么,jstat 看运行时在变什么,jcmd 是统一入口。四把刀各管一段,配合着用没有查不动的现场。

#jstack#jmap#jstat#jcmd#排查工具
2026-09-16 · 5 阅读 · 0 评论 · 0 赞
连载中 11/20

GC 日志:把回收过程翻译成人话

一行 GC 日志里塞着七种信息:谁触发的、收了哪、停了多久、活了哪些。加上 -Xlog 配置,再加上日志分析工具,GC 不再是只能盯监控曲线的黑盒。

#GC日志#Xlog#日志分析#GC监控#Full GC排查
2026-09-16 · 13 阅读 · 0 评论 · 0 赞
连载中 10/20

ZGC:亚毫秒停顿是怎么炼成的

百 G 大堆停顿不到一毫秒,靠的是把搬家全部挪到并发阶段——着色指针让引用自带状态,读屏障让搬运中的对象依然可访问。代价是吞吐与内存,收益是停顿与堆大小解耦。

#ZGC#着色指针#读屏障#亚毫秒停顿#分代ZGC
2026-09-15 · 8 阅读 · 0 评论 · 0 赞