今天爱分享给大家带来淘宝超卖问题是如何解决的【图文解答】,希望能够帮助到大家。
淘宝超卖现象的产生及解决方案
一、什么是超卖现象?
超卖即“超卖缺货”,当宝贝库存接近0时,如果多个买家同时付款购买此宝贝,将会出现“超卖缺货”现象。产生超卖缺货这种情况是商家无法控制的,并且发生这种情况的概率极低。
二、电子商务的主交易流程:
1,查询商品 2,创建订单 3,扣减库存 4,更新订单 5,付款 6,卖家发货
(1)减库存的操作
有两种选择,一种是拍下减库存 另外一种是付款减库存
目前淘宝采用的“拍下减库存”的方式,拍下就是一瞬间的事,对用户体验会好些。
库存会带来“超卖”的问题:售出数量多于库存数量
由于库存并发更新的问题,导致在实际库存已经不足的情况下,库存依然在减,导致卖家的商品卖得件数超过秒杀的预期。这样的损失只能由淘宝来负责了。
三、如何解决超卖的问题?
方案:采用乐观锁。
1,秒杀由于存在的广泛的用户,并发暴涨的情况下,一定要注意在
文案方面做得尽量人性话些。在系统承载不足的情况,不能让会员觉得被欺骗了。同时对于一些重要信息需要做到可查,比如显示订单的下单信息,付款信息等。
2,在秒杀的时候,由于瞬时访问量导致应用的压力暴涨,数据库的load上升,IC(商品中心)的压力很大,从而导致了其他非秒杀的交易也受到了影响。
解决方案:
1,增加应用的机器
2,将秒杀应用与普通交易相隔离。对IC做了分组隔离,从而保证秒杀不会影响主站的其他交易。
3,由于商品详情页面(detail)该页面用户的刷新频率很高,所以 尽量将该页面静态化,淘宝的秒杀商品详情页面,去除了很多不必要的后台查询逻辑,比如卖家的信誉,星级等信息。
4,detail页面的响应时间在3-5秒,主要原因是需要到数据库查询库存信息,该操作所花时间比较长,对数据库的压力也很大。所以采用了从缓存取库存信息。淘宝有一个tair缓存,在应用起来的时候,会将商品的库存信息加载到tair中。
5,聚划算的一次秒杀活动中,出现超卖的情况,原因是:库存信息是从tair中取的,拍下时在tair中减少了库存,但是在真正购买时,会去更新数据库中的库存,这样就导致数据库的当前库存信息又去更新了tair中的库存信息。
这件事情带来的思考是:尽量将信息保持一致,能够做到同一处修改最好。比如保持总库存以及sku的库存修改保持一致。
后来的方案是:数据库中只记录默认的库存信息,对库存的更新都放在tair中去做。不过这个就要保证tair的足够稳定,不然tair挂掉,购买信息就全丢了。所以可以采用一些机制保证信息的可恢复。比如记日志,不过这种涉及到IO的也会影响性能了。
6,最后,还可以租用更多的IDC,采用异地IDC架构,高效的CDN架构,及其全局服务负载均衡系统,完全可以解决问题。