• 秒杀系统架构设计


      秒杀活动的用户量可能是网站平时正常访问量的数百甚至上千倍,网站如果为了秒杀时的最高并发量而设计部署,就需要比正常运营多的多的服务器,而这些服务器在绝大部分时候都是用不着的,浪费惊人。所以秒杀业务不能使用正常网站的业务流程,也不能与正常网站业务共用服务器,必须设计部署专门的秒杀系统。

    秒杀系统所面对的技术挑战:

      1.对现有业务造成冲击

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

      3.突然增加的网络及服务器带宽

      4.直接下单

        秒杀规则是到点了才能下单,而下单页面也只是一个普通的url,如果得到这个url则不用等到秒杀开始就能下单了。

    秒杀系统应对策略:

      1.秒杀系统独立部署

      2.秒杀商品页面静态化

        重新设计秒杀商品页面,不使用原本的商品详情页,将商品信息、成交记录、用户评价全部写入一个静态页面,用户请求不经过应用服务器的业务逻辑处理,也不需访问数据库。所以秒杀商品服务不需部署动态的web服务器和数据库服务器。

      3.租借秒杀活动网络带宽

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

      4.动态商城随机下单页面URL

        为了避免用户直接访问下单页面URL,需要将该URL动态化,即使是秒杀系统的开发者也无法在秒杀开始访问前访问下单页面的URL。办法就是在下单页面URL加入由服务器端生成的随机数作为参数,在秒杀开始的时候才能得到。

    秒杀系统架构设计:

      秒杀系统是为秒杀而设计的,用户最关心的是如何能快速刷新商品页面,而不是商品详情的体验细节,因此秒杀系统页面设计应尽量简单。

      商品页面购买按钮也只有在活动开始的时候才会变亮,在此之前及秒杀商品卖出后,该按钮都不可以点击。

      

    下单表单也应尽量简单,购买数量只能是一个且不可修改,送货地址和付款方式都使用用户默认设置,没有默认可不填,允许提交订单后修改;只有第一个的订单发送给网站的订单子系统,其余用户体检订单后只能看到秒杀结束页面。

      

    秒杀系统其余问题:

      1.如何控制秒杀商品页面按钮点亮

      购买按钮只有活动开始的时候才会点亮,此前是灰色的。如果该页面是动态生成的,当然可以在服务器端构造相应页面输出,控制按钮是灰色还是点亮,但是为了减轻服务器端负载压力,更好的利用CDN、反向代理等性能优化手段,该页面被设计为静态页面,缓存在了CDN、反向代理服务器上,甚至用户浏览器上。秒杀开始时,用户刷新页面,请求根本不会到达应用服务器。

      解决办法就是在页面加入一个javascript脚本来控制,该javascript文件中加入了秒杀是否开始的标志和下单URL的随机数参数。当秒杀开始时生成一个新的javascript文件并且被用户浏览器加载,控制秒杀页面的展示。这个javascript文件使用速记版本号,且不被浏览器、CDN和反向代理服务器缓存。

          

    这个javascript文件非常小,几十每次浏览器刷新都访问javascript文件服务器也不会对服务器集群和带宽造成太大压力。

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

      在用户提交订单式,检查是否已经有订单提交,通过控制下单页面的入口,只有少数用户能进入下单页面,其它用户直接进入秒杀结束页面。

            

    秒杀系统整体架构

      

  • 相关阅读:
    前端-----盒子模型
    跨域
    DRF的分页
    DRF的权限和频率
    DRF 版本和认证
    DRF的视图和路由
    APIView和View的区别
    Serializers序列化组件
    RESTful
    Vuex以及axios
  • 原文地址:https://www.cnblogs.com/akaneblog/p/6793914.html
Copyright © 2020-2023  润新知