秒杀压测:从 891 到 2464 QPS 中间发生了什么

同步下单和异步下单各压了一遍,差距 2.76 倍。瓶颈从来不在接口层,在数据库门口排的队。

AI-Mall 的秒杀第一版是同步下单:请求进来,查库存、扣库存、写订单,一条链路走完才返回。逻辑没毛病,但所有请求都堵在数据库门口排队,压测数据很难看。后来改成异步:Redis 里用 Lua 脚本一次完成库存预扣,扣成功就把下单消息投给 RocketMQ,订单慢慢落库,接口立刻返回。

同一套压测场景,售罄后的流量打进来:同步版 891 QPS,异步版 2464 QPS,是 2.76 倍;突发抢购时的延迟降了约 47%。两个版本都没超卖、没重复下单,这部分靠的是数据库的唯一索引和条件更新兜底,订单取消后库存也会回补,所以异步只是把队从数据库门口挪走,正确性还是落在库里。

最后说一句诚实话:这次压测是同机单机容器跑的,绝对值不能外推到任何真实环境,能看的只有相对差距,和“不超卖不重复”这个定性结论。谁要是拿单机压测的数字去吹生产性能,那是耍流氓。

回文章列表