一杯咖啡的时间,聊聊技术与成长
收官:秒杀架构全景复盘
回到崩掉的那一晚:同样的 10 万人抢 50 台,现在的系统怎么接——从 CDN 到数据库逐层走一遍。漏斗全景、演进路线与克制的设计:小流量秒杀用不到全套装,过度设计也是事故。
全链路压测与容量规划
单接口压八万、全链路压八百——每个组件的容量账都好算,拼在一起才是真相。影子库隔离压测数据,容量公式加冗余系数,短板决定上限,压测报告要给每层一个结论。
降级与兜底:秒杀挂了也要体面
Redis 不可用、MQ 堆积、风控超时——秒杀链路上没有组件是永远可靠的。降级的本质是有损服务:提前定义哪些损失可接受、谁来决策、开关在哪,预案写在演练里而不是文档里。
数据对账:Redis 与 DB 的最终一致
Redis 扣的、MQ 传的、DB 记的——三个存储三条路径,每个失败分支都是差异来源。总库存恒等式、实时抽样加离线全量、自动修复与人工兜底的分界线,对账是最终一致的最后一块拼图。
幂等与一人一单:重复请求的全量防御
网络重试、用户连点、脚本多打——重复请求防不住,一人一单就是一句空话。幂等令牌挡住九成重复,数据库唯一索引兜住剩下的,两层各自独立生效,重复订单从机制上消失。
订单超时与库存回补:延迟消息的闭环
下单占住库存却不支付,15 分钟后必须有人来收——关单回补是预扣模式的另一半。延迟消息怎么选、关单与支付的竞态怎么解、回补怎么做到不多不少,这篇把闭环补完。
异步下单:MQ 削峰与订单落库
资格扣完的请求不能直接砸数据库——MQ 把两千 QPS 的洪峰削成五百一秒的平稳落库。消息不丢的三段保证、消费端幂等、订单号预生成,把异步链路接成闭环。
热点库存:一万个人抢同一行
Redis 单线程扛十万 QPS,但一个热 Key 的极限就在那里——库存分片把一个热点拆成 N 个桶,本地缓存让售罄后的请求不再打 Redis,热点探测让分桶在开抢前自动就位。
Redis 预扣库存:Lua 原子扣减的完整实现
数据库的热点行扛不住,Redis 的内存原子操作扛得住——把扣库存从行锁竞争改成 Lua 脚本一步完成。脚本怎么写、库存怎么预热、Redis 挂了怎么办,这篇给完整实现。