电商系统如何防止超卖的场景?

提问者:帅平 问题分类:微服务
在商城的系统中,用户的每一次下单都会对应扣减库存的场景,那么如果防止前端出现超卖的情况呢?
1 个回答
命里最重要的人
命里最重要的人
方案一:直接数据库扣减。通过sql判断剩余库存是否大于等于待扣库存,满足则扣减库存。该方案利用乐观锁原理即update的排他性确保事务性,避免超卖。
该方案的优点是:
    实库实扣,不会出现超卖;
    数据库乐观锁保证并发扣减一致性;
    数据库事务保证批量扣减正常回滚。
该方案的缺点是:
    行级锁的原因存在性能瓶颈,高并发会出现请求堵塞超时问题;
    直连数据库,每次扣库存都是写操作,接口性能较低。

方案二:利用分布式锁,强制串行化扣减同一商品库存
该方案的优点是:
    减轻数据库压力,同时还能确保不会超卖。
该方案的缺点是:
    每次只能有一个请求抢占锁,不能应对高并发场景。
发布于:12个月前 (03-17) IP属地:四川省
绿水长流
绿水长流
常规渠道,库存扣减是后置逻辑,由于流量不高,一般都采用的是直接数据库扣减,但还是需要对弊端做了一些措施:
前置校验严格,同时针对刷单场景会有严格限流,保证最终扣减库存的流量可控;
库存系统读写分离,减少数据库的压力。
发布于:12个月前 (03-17) IP属地:四川省
我来回答