欢迎来到天天文库
浏览记录
ID:41575172
大小:108.90 KB
页数:15页
时间:2019-08-28
《秒杀系统架构分析》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、秒杀系统架构分析与实战(反馈非常好的文章,推荐)來源:陶邦仁1秒杀业务分析正常电子商务流程(1)查询商品;(2)创建订单;(3)扣减库存;(4)更新订单;(5)付款;(6)卖家发货秒杀业务的特性(1)低廉价格;(2)大幅推广;(3)瞬时售空;(4)一般是定时上架;(5)时间短、瞬时并发量高;2秒杀技术挑战假设某网站秒杀活动只推出一件商品,预计会吸引1万人参加活动,也就说最大并发请求数是10000,秒杀系统需要面对的技术挑战有:对现有网站业务造成冲击秒杀活动只是网站营销的一个附加活动,这个活动具冇时间
2、短,并发访问量大的特点,如果和网站原有应用部署在一起,必然会对现有业务造成冲击,稍有不慎可能导致整个网站瘫痪。解决方案:将秒杀系统独立部署,甚至使用独立域名,使具与网站完全隔离。高并发下的应用、数据库负载用户在秒杀开始前,通过不停刷新浏览器页而以保证不会错过秒杀,这些请求如果按照一般的网站应用架构,访问应用服务器、连接数据库,会对应用服务器和数据库服务器造成负载压力。解决方案:重新设计秒杀商品页面,不使用网站原来的商品详细页面,页面内容静态化,用户请求不需要经过应用服务。突然增加的网络及服务器带宽假
3、设商品页面大小200K(主要是商品图片大小),那么需要的网络和服务器带宽是2G(200KX10000),这些网络带宽是因为秒杀活动新增的,超过网站平时使用的带宽。解决方案:因为秒杀新增的网络带宽,必须和运营商重新购买或者租借。为了减轻网站服务器的压力,需耍将秒杀商品页而缓存在CDN,同样需耍和CDN服务商临时租借新增的出口带宽。直接下单秒杀的游戏规则是到了秒杀才能开始对商品下单购买,在此吋间点之前,只能浏览商品信息,不能卜•单。而卜•单页面也是一个普通的URL,如杲得到这个URL,不用等到秒杀开始就
4、可以下单了。解决方案:为了避免用户直接访问下单页面URL,需要将改URL动态化,即使秒杀系统的开发者也无法在秒杀开始前访问下单页面的URL。办法是在下单页面URL加入曲服务器端生成的随机数作为参数,在秒杀开始的时候才能得到。如何控制秒杀商品页面购买按钮的点亮购买按钮只冇在秒杀开始的时候才能点亮,在此Z前是灰色的。如果该页而是动态牛成的,当然可以在服务器端构造响应页面输出,控制该按钮是灰色还是点亮,但是为了减轻服务器端负载压力,更好地利用CDN、反向代理等性能优化手段,该页而被设计为静态页而,缓存在C
5、DN、反向代理服务器上,其至用户浏览器上。秒杀开始时,用户刷新页面,请求根本不会到达应用服务器。解决方案:使用JavaScript脚木控制,在秒杀商詁静态页面屮加入一个JavaScript文件引用,该JavaScript文件中包含秒杀开始标志为否;当秒杀开始的时候生成一个新的JavaScript文件(文件名保持不变,只是内容不一样),更新秒杀开始标志为是,加入卜•单页面的URL及随机数参数(这个随机数只会产生一个,即所冇人看到的URL都是同一个,服务器端可以用redis这种分布式缓存服务器来保存随机
6、数),并被用户浏览器加载,控制秒杀商品页面的展示。这个JavaScript文件的加载可以加上随机版本号(例如xx.js?v二32353823),这样就不会被浏览器、CD"和反向代理服务器缓存。这个JavaScript文件非常小,即使每次浏览器刷新都访问JavaScript文件服务器也不会对服务器集群和网络带宽造成太大压力。如何只允许第一个提交的订单被发送到订单子系统由于最终能够成功秒杀到商詁的用户只有一个,因此需要在用户提交订单吋,检查是否已经冇订单提交。如果已经冇订单提交成功,则需要更新JavaS
7、cript文件,更新秒杀开始标志为否,购买按钮变灰。事实上,由于最终能够成功提交订单的用户只冇一个,为了减轻下单页而服务器的负载压力,可以控制进入下单页面的入口,只有少数用户能进入下单页面,其他用户直接进入秒杀结束页面。解决方案:假设下单服务器集群有10台服务器,每台服务器只接受最多10个下单请求。在还没有人提交订单成功之前,如果一台服务器已经冇十单了,而冇的一单都没处理,可能出现的用户体验不佳的场景是用户第一次点击购买按钮进入已结束页而,再刷新一下页而,冇可能被一单都没冇处理的服务器处理,进入了填
8、写订单的页面,可以考虑通过cookie的方式来应对,符合一致性原则。当然可以采用最少连接的负载均衡算法,出现上述情况的概率大大降低。如何进行下单前置检查卜•单服务器检杳木机已处理的卜•单请求数目:如果超过10条,直接返回已结束页而给用户;如果未超过10条,则用户可进入填写订单及确认页面;检查全局已提交订单数口:已超过秒杀商品总数,返回已结束页面给用户;未超过秒杀商品总数,提交到了订单系统;秒杀一般是定时上架该功能实现方式很多。不过目前比较好的方式是:提前设定好商品的上
此文档下载收益归作者所有