扣库存方案

下单减库存?

  1. 并发请求
  2. 创建订单(恶意下单&不会超卖)
  3. 扣库存
  4. 支付

支付减库存?

  1. 并发请求
  2. 创建订单(订单超卖)
  3. 支付 (订单支付不了)
  4. 扣库存

预扣库存?

  1. 并发请求
  2. 扣库存
  3. 创建订单
  4. 支付(不支付库存卖不出去)

先扣库存然后创建订单、支付
10分钟不支付则取消订单,避免不支付库存卖不出去问题

极高并发下单服务极致性能
减少上下文切换
较少阻塞式I/O

I/O主要包括

  • rpc调用
  • 磁盘读写

无I/O

  • 拆解-扣库存与写订单分开
  • 用内存
  • 用本地内存

单服务
单服务
多服务
多服务

  1. 初始化库存到本地库存
  2. 本地减库存,成功则进行统一减库存,失败则返回
  3. 统一减库存成功则写入MQ,异步创建订单
  4. 告知用户抢购成功

创建、支付订单

  • 与扣库存服务隔离
    创建支付
  • 用户收到抢购成功、页面跳转到订单中心去支付

读商品信息页面

  • 与库存服务隔离
  • 商品库一主多从提高读能力
  • 页面静态化+缓存+db实现即可

排队进度查看

  • 数组A储存排队中,待创建订单的用户;数组B用作索引,存储uid对应在数组A中的索引位置
  • 每次从数组A中依次消费数据,并记录最近消费的索引值X
  • 用户来查排队进度时,从hash表B中取出该uid对应存储的索引值Y;
  • 索引值Y-索引值X=排队进度值

高性能读库存

无I/O

  1. 读取本地库存,无则主动拉去一次,有则返回
  2. 异步脚本定时同步库存至本地

版权声明:本文为weixin_42260789原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_42260789/article/details/105456144