写点什么

秒杀系统的挑战和应对方案

用户头像
2流程序员
关注
发布于: 2020 年 08 月 04 日

挑战1

  • 对现有业务对冲击

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

  • 应对:

网站是为正常运营设计对,而秒杀活动带来的并发访问用户却是平时的百倍甚至千倍。网站如果为秒杀时的最高并发访问量进行设计部署,就需要比正常运营多得多的服务器,而这些服务器在绝大部分的时候都是用不着都,浪费惊人。所以,网站都秒杀业务不能使用正常网站业务流程,也不能和正常网站交易业务公用服务器,必须专门设计和单独部署秒杀系统。如果需要,还可以使用独立的域名,使其与网站完全隔离。

挑战2

  • 高并发下的应用、数据库负载

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

  • 应对

秒杀商品页面静态化。重新设计秒杀商品页面,不使用网站原来对商品详情页面,页面内容静态化。这样做的好处是,用户请求不需要经过应用服务器的业务逻辑处理也不需要访问数据库。并且,可以利用CDN、反向代理和浏览器的缓存机制,进一步降低对Web服务器对压力。

挑战3

  • 突然增加对网络及服务器带宽

假设商品页面大小200K(主要是商品图片),并发请求数10000,那么需要的网络带宽和服务器带宽是2G,这些网络带宽是因为秒杀活动新增的,超过网站平时使用的最大带宽。

  • 应对

向运营商购买或租借网络带宽;为了减轻网站服务器的压力,需要将秒杀商品页面缓存在CDN,同样需要和CDN服务商临时租借新增的出口带宽。

挑战4

  • 直接下单

按找秒杀的规则,只有到了秒杀时间才能开始对商品下单购买,在此时间点之前,只能浏览商品信息,不能下单。而下单页面也是一个普通的URL,如果得到这个URL,不用等到秒杀开始就可以下单。

  • 应对

动态生成随机下单页面URL。为了避免用户直接访问下单页面的URL,需要将URL动态化,即使秒杀系统的开发者也无法在秒杀开始前访问下单页面的URL。可以用动态生成js文件的方法,控制下单页面的访问时间和URL。

挑战5

  • 如何控制规定数量的最先到达的请求成功下单

由于秒杀商品数量有限,而提交订单的用户很多,因此需要在用户提交订单时,检查订单数量是否超过限制。同时,下单页面服务器的负载压力也是巨大的,如何减轻压力。

  • 应对

可以采用计数阀门的方法,在计数器达到设置值时,不再处理下单请求,直接跳转到“活动已结束”页面。



用户头像

2流程序员

关注

还未添加个人签名 2020.03.18 加入

还未添加个人简介

评论

发布
暂无评论
秒杀系统的挑战和应对方案