减库存方式

原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/11634031.html

在正常的电商平台购物场景中,用户的实际购买过程一般分为两步:下单和支付。

  • 下单一般采用TCC来实现
  • 支付一般采用独立消息服务来实现

其中减库存操作一般有如下3个方式:

下单减库存

秒杀系统一般采用“下单减库存”,逻辑上更为简单,性能上也更占优势。

即当买家下单后,在商品的总库存中减去买家购买数量。下单减库存是最简单的减库存方式,也是控制最精确的一种,下单时直接通过数据库的事务机制控制商品库存,这样一定不会出现超卖的情况。但是有个最大的局限就是,有些人下单后可能并不会付款,即恶意下单

针对恶意下单这种情况,解决办法还是要结合安全和反作弊措施来制止。例如,给经常下单不付款的买家进行识别打标(可以在被打标的买家下单时不减库存),给某些类目设置最大购买件数(参加活动的商品一人最多只能买3件),以及对重复下单付款的操作进行次数限制等。

付款减库存

即买家下单后,并不立即减库存,而是等到有用户付款后才真正减库存,否则库存一直保留给其他买家。但因为付款时才减库存,如果并发比较高,有可能出现买家下单后付不了款的情况,因为可能商品已经被其他人买走了,导致库存超卖

预扣库存

业务系统中最常见的就是预扣库存方案,比如买高铁票时候,下单后一般都有个“有效付款时间”,超过这个时间订单自动释放。

这种方式相对复杂一些,买家下单后,库存为其保留一定的时间(比如10分钟),超过这个时间,库存将会自动释放,释放后其他买家就可以继续购买。在买家付款前,系统会校验该订单的库存是否还有保留,如果没有保留,则再次尝试预扣;如果库存不足(也就是预扣失败)则不允许继续付款;如果预扣成功,则完成付款并实际地减去库存。

Reference

https://time.geekbang.org/column/article/40743

原文地址:https://www.cnblogs.com/agilestyle/p/11634031.html