据说双11快到了,那我们来说说如何设计秒杀系统架构?技术挑战1.对原有业务的影响。秒杀活动只是网站营销的附加活动。其特点是时间短,并发访问量大。如果与网站原有应用一起部署,势必会对现有业务造成影响。解决方案:独立部署秒杀系统,甚至使用独立域名,与网站完全隔离。2、高并发下,数据库和应用负载用户在秒杀开始前不断刷新浏览器页面,保证不会错过秒杀。如果这些请求按照一般的网站应用架构访问应用服务器,连接数据库,就会被发送到应用服务器。和数据库服务器负载压力。解决方案:重新设计秒杀产品页面,不使用网站原有的产品详情页面,页面内容是静态的,用户请求不需要经过应用服务。带宽为2G。解决方法:由于秒杀新增网络带宽,需要重新购买或向运营商租用。为了减轻网站服务器的压力,秒杀产品页面需要缓存在CDN4中。防止被秒杀前下单的游戏规则是,你只能对秒杀后的产品下单。在此时间点之前,您只能浏览产品信息,无法下载。订单页面也是一个普通的URL。拿到这个网址,不用等秒杀开始就可以直接下单了。解决方案:为了防止用户直接访问订单页面的URL,需要动态更改URL。即使是秒杀系统的开发者,在秒杀开始之前,也无法访问订单页面的URL。方法是在下单页面的URL中加入一个服务器生成的随机数作为参数,只有秒杀启动时才能获取。对策1、独立部署和原有业务部署在不同的服务器上,防止高并发拖累整个网站2、静态页面将产品详情和描述静态化到页面3、租用秒杀的网络带宽向运营商租用带宽4.动态生成一个随机的订单页面URL。秒杀前无法访问订单页面的URL:添加服务器生成的随机数作为参数,可以在秒杀前获取到架构设计。它只有在打开时才能亮起,之前是灰色的。如果是动态页面,这个问题可以轻松解决,但是为了减轻服务器端的负载压力,更好的利用CDN、反向代理等性能优化手段,将这个页面设计成静态页面,并缓存起来在CDN和反向代理服务器中,甚至在用户的浏览器中。当秒杀启动时,用户刷新页面,请求根本不会到达应用服务器。解决方法:在秒杀产品页面添加javascript引用,在javascript中添加秒杀是否启动的flag和订单页面URL的随机数参数,此javascript使用随机版本号,无法被浏览器缓存.当交易开始时,用户的浏览器会生成并加载一个新的javascript文件。2.允许第一笔订单提交闪购开始。由于闪购中只有一个用户可以成功获取商品,因此需要在用户提交订单时检查订单是否已提交。解决方案:为了减轻订单页面服务器的负载压力,可以控制订单页面的入口。只有少数先提交的用户才能进入,后提交的用户直接进入秒杀结束页面。订单服务器检查机器已处理的订单请求数。*如果超过10个,则直接将完成的页面返回给用户;*如果不超过10个,用户可以进入订单填写和确认页面;查看全局已提交的订单数*如果秒杀产品总数已超过,则将完成的页面返回给用户;*若秒杀产品总数未超过,则提交至子订单系统。这大大减轻了数据库的负载压力。
