秒杀系统相关

参考:https://my.oschina.net/xianggao/blog/524943

1.正常电子商务流程;

查询商品——>创建订单——>扣减库存——>更新订单——>付款——>卖家发货;

2.秒杀业务的特征;

低廉价格、大幅推广、瞬时售空、一般是定时上架、时间短、瞬时并发量高;

**秒杀技术挑战**假如某网站秒杀活动只推出一件商品,预计会吸引1万人参加活动,也就是说最大并发请求数是10000,秒杀系统需要面对的技术挑战有:

1).对现有网站业务造成冲击;

  秒杀活动只是网站营销的一个附加活动,这个活动具有时间短,并发访问量大的特点,如果和网站原有应用部署在一起,必然会对现有业务造成冲击,稍有不慎可能导致整个网站瘫痪;

解决方案:将秒杀系统独立部署,甚至使用独立域名,使其与网站完全隔离;

2).高并发下的应用、数据库负载;

  用户在秒杀开始前,通过不停刷新浏览器页面以保证不会错过秒杀,这些请求如果按照一般的网站应用架构,访问应用服务器、连接数据库,会对应用服务器和数据库造成负载压力;

解决方案:通过缓存,如,使用redis,避免直接操作数据库;

3).增加网络及服务器带宽;

4).秒杀前避免通过接口下单成功;解决办法:下单页面url加入由服务器端生成的随机数作为参数,在秒杀开始的时候才能得到;

5).如何控制秒杀商品页面购买按钮的点亮;可通过javascript脚本控制;

6).如何只允许第一个提交的订单被发送到订单子系统;

  解决办法:需要在用户提交订单时,检查是否已经有了订单提交,如果已经有订单提交成功,则需要更新javascript文件,更新秒杀开始标志为否,购买按钮变灰;可以控制进入下单页面的入口,只有少数用户能进入下单页面,其它用户直接进入秒杀结束页面;

用户体验到的场景:亮色购买——>下单页面,提交订单——>付款——>下单成功;

         亮色购买——>下单页面,提交订单——>秒杀结束

         亮色购买——>秒杀结束

         灰色购买;

7).减库存的操作

  有两种选择,一种是拍下减库存,另外一种是付款减库存;可以采用“拍下减库存”的方式,拍下就是一瞬间的事,对用户体验会好些(没有支付的,处理方案:设置一个最长付款时间,比如30分钟,后台有个定时任务,轮训超过30分钟的待付款订单,然后关闭订单,恢复库存);

8).库存会带来“超卖”的问题:售出数量多于库存数量;

  由于库存并发更新的问题,导致在实际库存已经不足的情况下,库存依然在减,导致卖家的商品卖得件数超过秒杀的预期。方式:采用乐观锁;减库存前,先查一下库存数a,更新库存时,若是查到库存数b=a,则执行更新操作;

还有一种方式,会更好些,叫做尝试扣减库存,扣减库存成功才会进行下单逻辑;先检查某商品,销售数据是否<预期数,若成立,则执行更新操作;

此时需要搭建集群服务器;windows每个进程的线程数不超过2000;linux每个进程的线程数不超过1000;

越努力,越幸运!!! good good study,day day up!!!
原文地址:https://www.cnblogs.com/canglongdao/p/12684644.html