秒杀系统
sequenceDiagram participant User as 用户 participant Frontend as 前端/App participant Redis as Redis缓存 participant MQ as 消息队列 participant OrderService as 订单服务 participant DB as 数据库 User->>Frontend: 点击"立即抢购" Frontend->>Frontend: 校验(未开始/验证码) Frontend->>Redis: 请求扣减库存 (Lua脚本) alt 库存不足 或 用户已买 Redis-->>Frontend: 返回失败 (秒杀结束) Frontend-->>User: 提示"手慢了" else 库存充足 Redis->>Redis: 预扣库存 (decr) Redis-->>Frontend: 返回成功 (排队中) Frontend->>MQ: 发送"创建订单"消息 Frontend-->>User: 提示"正在为您排队..." loop 轮询结果 Frontend->>Backend: 查询订单结果 end end MQ->>OrderService: 消费消息 OrderService->>DB: 1. 插入订单 (唯一索引防重) OrderService->>DB: 2. 扣减真实库存 alt 数据库事务成功 OrderService-->>Redis: 标记订单创建成功 else 异常/重复 OrderService-->>Redis: 回滚Redis库存 end 秒杀系统的核心挑战 秒杀系统的特点是时间短、并发高、资源少,核心要解决的问题是: ...