项目背景

一套抽奖+秒杀的系统。 系统设定可支持百万级别的QPS访问, 由于涉及到高QPS压力,防超卖、防超买,事务处理等多个问题, 查了好多网上的资料,最终完成了一个简单的秒杀系统; 虽然最终活动的QPS并没有打到预想的级别(十万级), 整个服务的稳定性和可用性也没有收到太多的考验,不过这里还是简要记录一下这次秒杀系统的设计。

难点与解决方案

  • 峰值QPS抗压:Kafka队列削峰,前端退避重试
  • 防超买、超卖(库存锁):Mysql行锁,保证数据更新原子性和可见性
  • 公平性保证:目前未解决,采用先到先得(后续考虑设计一套动态调整算法)
  • 存储热点避免:数据分桶(mysql一表多行 + mysql分表)
  • 分布式一致性:在线同步 + 在线重试 + 离线重试 (无法做到银行系统那样2pc)

系统框架