连载中 2/15

流量漏斗:把百万请求筛成千级订单

2026-09-02 · 585 阅读 · 0 评论 · 0 赞

一道小学算术题

开抢前先做一道算术:100 万请求、50 件商品,意味着 99.995% 的请求从出生那一刻就注定失败。这不是悲观,是设计输入:如果放这 100 万个请求走完全程,就是 100 万次扣库存、几十万笔脏订单、不可预测的数据修复;如果在第一层就拦下 90%,第二层再拦 80%,走到数据库的请求只剩千级——系统就从"扛不住"变成"绰绰有余"。秒杀架构的第一性原理:让注定失败的请求,在最便宜的层失败

五层漏斗

从外到内,五道闸门各司其职:第一层,页面与 CDN——静态化加本地拦截,让纯浏览流量与重复点击不出端,这一层拦掉的不是"用户",是重复与无效请求;第二层,网关——入口限流加防刷,把总流量钳制在系统容量内;第三层,风控——把脚本与黄牛从真人里筛出去;第四层,Redis 预扣——用内存原子操作扣减库存资格,只有抢到资格的请求才向后走;第五层,MQ 异步下单——把订单落库的速度从"用户等"改成"系统消化",数据库按自己的节奏平稳写入。

层级入口流量出口流量主要手段
页面/CDN100 万40 万静态化、防抖、错峰
网关40 万20 万限流、黑名单
风控20 万8 万设备指纹、行为识别
Redis 预扣8 万2000Lua 原子扣减
MQ 异步下单200050 单削峰、幂等落库

越早过滤越便宜

漏斗各层的"过滤单价"差得惊人:CDN 拦一个请求,成本几乎为零,还顺手省了带宽;网关拦一个,是一次内存判断;风控拦一个,要查指纹画像,几百微秒;Redis 拦一个,一次原子操作;等到数据库来拦,用的是最贵的行锁竞争和事务回滚。同样的过滤效果,放在外层做是优化,放在内层做是事故——这也是为什么把"扣库存"从数据库提到 Redis、把"限流"从服务提到网关,每一步上移都是数量级的收益。

被拦下的流量去哪了

漏斗拦掉 99% 的请求,但拦下不等于甩脸子:命中限流的返回排队页,"您前面还有 8 万人";未抢到的直接进入售罄态,页面置灰明示"已抢完";愿意等的进候补名单,后续有货自动补。失败的体验也是产品设计的一部分——明确比沉默好,排队比报错好。体验做不好,前面架构省下的成本,客服与舆情会加倍还回来。

骨架搭完,接下来逐层展开。先从最便宜的一层讲起:前端削峰——页面层就该拦下八成流量

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 赞