当前位置: 首页 > news >正文

商品库存秒杀系统架构设计

商品库存秒杀系统架构设计

目录

  1. 概述
    1.1 业务规则
    1.2 核心能力
  2. 整体架构与服务交互
    2.1 分层架构链路
    2.2 订单与库存四大交互链路
  3. 各服务职责边界
    3.1 网关
    3.2 客户端聚合服务
    3.3 订单服务
    3.4 库存服务(并发安全核心层)
  4. 数据存储设计
    4.1 MySQL 商品库存表 seckill_goods_stock
    4.2 MySQL 冻结流水表 stock_freeze_record(幂等核心)
    4.3 Redis Key设计
  5. 四层库存并发安全控制(防超卖、脏写、重复操作)
    5.1 第一层:前置流量削峰
    5.2 第二层:Redis层并发防护
    5.3 第三层:MySQL行锁原子更新
    5.4 第四层:幂等唯一索引兜底
  6. 核心业务全流程
    6.1 库存查询流程
    6.2 下单主流程(含并发控制)
    6.3 三条异步收尾流程
  7. 缓存一致性方案
  8. 数据一致性兜底保障
  9. 核心代码示例
    9.1 订单服务创建订单
    9.2 库存服务冻结接口(分布式锁+原子操作)
  10. 架构约束与避坑规范

1 概述

1.1 业务规则

  1. 下单先创建订单,再冻结库存;订单状态分为:待支付、已支付、已取消。
  2. 库存双字段设计:total_stock总库存、freeze_stock冻结库存,可售库存 = total_stock - freeze_stock
  3. 支付成功仅修改冻结流水状态,total_stockfreeze_stock数值不变;仅仓库发货完成后同步扣减两层库存。
  4. 订单服务单向RPC调用库存服务,无循环依赖;库存所有变更逻辑收口于库存服务。

1.2 核心能力

流量分层削峰、四层并发安全控制、Redis原子库存操作、MySQL行锁幂等、先删缓存+延时双删、多链路最终一致性兜底。

2 整体架构与服务交互

2.1 分层架构链路

客户端(App/小程序/H5) ↓ HTTP 网关Gateway(限流、鉴权、防刷) ↓ HTTP 客户端聚合服务(参数校验、接口聚合、前端收口) ↓ RPC(Feign/Dubbo) 【订单服务】业务调度中心 ↓ 四条同步/异步RPC调用 【库存服务】库存唯一管控服务 ├─ Redis集群:可售库存缓存 + 商品分布式锁 └─ MySQL库存库:商品库存表、冻结流水表 外部依赖:第三方支付平台、仓储系统(仅推送事件至订单服务)

2.2 订单与库存四大交互链路

  1. 下单冻结(同步主流程)
    订单创建待支付订单 → RPC调用库存冻结接口;Redis原子扣减预占名额,MySQL新增冻结流水并增加冻结库存;冻结失败订单置为已取消。
  2. 支付锁定(异步)
    支付回调更新订单为已支付 → RPC调用库存仅更新流水状态,不修改库存数值。
  3. 订单取消/超时(异步)
    订单改为已取消 → RPC调用库存解冻,Redis归还可售名额、MySQL扣减冻结库存。
  4. 仓库发货(异步)
    仓储推送发货消息至订单 → RPC调用库存扣减总库存与冻结库存,标记流水为已发货。

3 各服务职责边界

3.1 网关

全局登录鉴权、账号/IP限流、令牌桶削峰、非秒杀时段拦截、请求路由。

3.2 客户端聚合服务

前端统一收口,参数校验、用户限购、重复下单拦截、多服务数据聚合,不操作库存与订单底层库表。

3.3 订单服务

  1. 本地事务创建订单,主动发起库存相关RPC调
http://www.jsqmd.com/news/1143067/

相关文章:

  • GiftGenius 多智能体礼物推荐系统全栈开发教程
  • Jailhouse-gui核心功能解析:CPU分配与PCI设备管理的实用技巧
  • 实战教程:使用openEuler agent-skills批量处理CVE漏洞修复的完整指南
  • openEuler Summit 2023精华回顾:AI与内核技术突破全解析
  • Redisson 4.5 并发控制与缓存系统剖析 — 构建高性能分布式应用
  • 探索EulerMaker-Web架构设计:前端项目分层与模块划分解析
  • 网盘直链助手:告别限速烦恼,解锁八大网盘真实下载链接
  • Paws垂直Pod自动扩缩器(VPA)完全指南:从部署到实战
  • 未来展望:perlporter即将支持的5大新特性,让Perl模块打包更智能
  • Docker部署euler-copilot-vectorize-agent全攻略:步骤与技巧
  • abichecker 开发者指南:如何扩展和定制 ABI 检查功能
  • 高性能计算新利器:深入解析kmpi消息传递库的10大优势
  • 小龙虾技能-13-multimedia-01_Weather_天气查询
  • libxml2-rust API使用手册:保持兼容性的Rust接口设计
  • perlporter实战案例:手把手教你打包Perl-Clone模块
  • 物联网Node-Red开发教程-第2章工作界面与流程基础
  • libSRTP安全漏洞防范:从协议规范到代码审计的深度实践
  • kucg API参考手册:通信框架的完整接口文档
  • 终极鸣潮游戏模组指南:解锁无限游戏体验的完整教程
  • openEuler安全加固工具自动化部署:企业级安全基线实施终极指南
  • IDM激活脚本完全指南:永久解锁下载管理器的三大方法
  • 终极指南:openEuler agent-skills的CVE修复全流程详解
  • ub-pkg-manager核心命令解析:check、dump、rollback、update全攻略
  • 医用超声远程诊断系统:视频流算法核心技术解析
  • resaware_nri_plugins监控与告警:集成Prometheus实现实时性能监控
  • 为什么选择kail_dnn_adapter?鲲鹏AI加速与oneDNN生态整合的终极方案
  • Open-eBackup用户指南:轻松掌握多场景备份策略与最佳实践
  • 如何快速部署MQTT-Proxy:5分钟搭建高可用物联网消息平台
  • 如何使用 abichecker 快速检测 RPM 包 ABI 兼容性问题:面向开发者的完整指南
  • libxml2-rust实战教程:从C到Rust的无缝迁移指南