(四)秒杀扣库存、订单创建、支付、读各种信息

扣库存方案

下单减库存?

  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. 异步脚本定时同步库存至本地
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值