高并发在线票务抢票系统
1、立项背景与目标:面向限量票务秒杀场景,活动开始瞬间大量用户同时抢票,直接写数据库会造成行锁竞争和连接池打满,同时容易出现超卖、掉单(库存已扣但订单未生成)和重复下单。项目目标是让抢票热路径不访问 MySQL,通过 Redis 原子扣减保证不超卖,通过异步落库削峰,并用幂等和唯一索引保证不重复下单。
2、功能与核心模块:活动侧支持库存预热(默认只在 key 不存在时初始化,避免售卖中重置库存)和活动详情缓存预热;用户侧提供幂等 Token 获取、抢票、活动详情查询和订单列表查询。后台模块包括 Outbox 消息投递、订单异步落库、失败重试与死信落库、Redis 与数据库库存定时对账。
3、业务流程:用户先调用 token 接口获取一次性幂等 Token(60 秒有效),再携带 Token 调用抢票接口。请求依次经过滑动窗口限流、参数校验、Token 原子校验与删除,然后执行一次 Redis Lua 脚本,在脚本内完成活动状态与售卖时间窗口校验、库存判断与扣减、待发消息写入 Redis 发件箱,返回剩余库存后立即向用户返回抢票成功。随后由后台投递线程把消息发往 RabbitMQ,消费者在事务中写入订单和扣减记录并回写数据库库存,用户可通过订单接口查询最终结果。
电商