node.js 在处理高并发,防止库存超卖,有解决方案吗?
发布于 6 年前 作者 lzm-zeem 3423 次浏览 来自 问答

先来就库存超卖的问题作描述:一般电子商务网站都会遇到如团购、秒杀、特价之类的活动,而这样的活动有一个共同的特点就是访问量激增、上千甚至上万人抢购一个商品。然而,作为活动商品,库存肯定是很有限的,如何控制库存不让出现超买,以防止造成不必要的损失是众多电子商务网站程序员头疼的问题,这同时也是最基本的问题。

从技术方面剖析,很多人肯定会想到事务,但是事务是控制库存超卖的必要条件,但不是充分必要条件。 但是如果node来处理高并发的问题,该怎么去处理呢?有大神指教不!

5 回复

redis 队列 原子性

pgsql advisor lock 咨询锁应对秒杀场景很适合。可以搜索下 德哥 的相关博客文章

下单先扣库存,然后订单支付有超时时间,如果超时未付款就将库存补回去。常规非限购的电商业务中,通常库存是会预先估算好上货库存能顶一段时间的,库存降到阈值再补货,不会遇到库存透支的问题。即便在售罄临界点,也只是会有一部分用户会看到售罄,如果有人超时未完成实付,过一会刷新还可能会有余货,总体上对用户影响不大。

限量抢购的业务场景也可以用上面这个方案,但是因为短时间就会达到售罄临界点,所以会让用户频繁看到时有时无的库存,如果产品设计上能接受也就无所谓了。但如果完美主义,一定要解决库存时有时无的问题,就要用一些额外的技术来支持了,比如之前小米做过排队,让用户能看到前面多少个人处于等待和付款的阶段,付款超时就相当于排队过号,把后面的人放进付款阶段。有了排队机制后,可以在真正付款成功的时候减库存;在库存归零的时候直接关闭排队。

@waitingsong 好的,谢谢

回到顶部