项目面向电商大促中瞬时流量集中、库存容易超卖、同步下单链路响应慢等问题,构建了一套前后端分离的高并发秒杀商城,按千级 QPS 场景进行架构设计。普通用户可完成注册登录、商品搜索与分类浏览、商品详情查看、购物车管理、普通下单、秒杀抢购、结果查询、订单支付和取消,形成从选品到履约的完整业务闭环。
核心秒杀流程包含活动倒计时、库存实时展示、单用户限购、Redis 原子预扣、RabbitMQ 排队削峰、异步创建订单及前端结果轮询;订单模块支持普通订单与秒杀订单统一展示,并对 15 分钟未支付订单自动取消及恢复库存。后台服务同时实现商品与分类管理、秒杀活动及商品配置、用户认证、角色/菜单权限模型和图片对象存储能力。
项目目前包含 9 个前端页面、38 个 HTTP 接口和 14 张业务表,覆盖用户、商品、购物车、秒杀、订单和权限等模块。通过缓存、异步消息和补偿任务将高峰请求与数据库写入解耦,在保证库存一致性和下单幂等的同时,为用户提供“排队处理中—秒杀成功/失败”的可感知反馈。
我主要负责项目的全栈架构设计与核心链路实现。整体采用 Vue 3 + Vite + Element Plus + Pinia 构建交互层,Axios 统一携带 JWT;后端基于 Java 17、Spring Boot 3、Spring Security 6 和 MyBatis-Plus,MySQL 负责持久化,Redis 保存库存、购买标记及订单处理状态,RabbitMQ 承担削峰异步下单,Redisson 提供分布式锁,MinIO 负责图片存储。系统按用户、商品、购物车、秒杀、订单、权限六个业务域拆分,前后端通过统一响应格式和异常处理协作。
秒杀请求先校验活动时间窗和历史订单,再通过 Redis Lua 在一次原子操作中完成“处理中状态检查、重复购买检查、库存判断与 DECR、购买标记写入、PROCESSING 结果写入”,避免并发穿透和库存超卖。成功请求进入 RabbitMQ,消费者使用手动 ACK,在 Redisson 锁和数据库事务内条件扣减秒杀库存与商品库存,并依次写入订单主表、秒杀订单表和订单明细表;成功后将正式订单号回写 Redis,前端每 500ms 轮询结果。
实现中的主要难点是缓存、消息与数据库之间的一致性。针对 MQ 发送失败或消费异常,系统会恢复 Redis 库存、移除购买标记并清理处理中状态;针对重复消息和用户重复点击,通过历史订单查询、Redis 标记和分布式锁实现多层幂等;针对长期卡在 PROCESSING 的任务,每 5 分钟扫描并重新入队或补写结果;针对未支付订单,每分钟扫描 15 分钟超时记录并自动取消、回补库存。活动状态也由定时任务自动流转并预热库存。认证层采用 BCrypt、JWT 无状态会话和 RBAC 权限模型。实际启动验证了商品、秒杀和订单页面的数据闭环,后端 Maven 构建与前端 Vite 生产构建均通过。