zoukankan      html  css  js  c++  java
  • 秒杀

    1  秒杀流程

       在上面的秒杀方法中:

            避免发生超卖的解决方法是:在更新库存时,where条件后面加上stock>0

       避免同一个用户秒杀两件商品的方法是:在秒杀结果表中设置唯一索引(用户ID和商品ID)

       秒杀业务特点:(1)并发量大 (2)有时间限制,秒杀开始时间和秒杀结束时间  (3)商品库存有限制

       不支持高并发的瓶颈在于数据库,数据库的横向扩展不太容易。而java应用的横向扩展是很容易的,只要堆机器就可以。  

    2  秒杀技术挑战

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

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

         解决方案:将秒杀系统独立部署,甚至使用独立域名

      2 采用传统的单体应用还是分布式服务架构

        单体应用扩展不灵活,采用分布式服务架构可以更加灵活的利用服务器资源

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

        用户在秒杀开始前,通过不停刷新秒杀商品列表页面以保证不会错过秒杀,如果是访问数据库的话,必然造成数据库服务负载过大

        解决方案:秒杀商品列表页面静态化,(可以采用httpClient访问controller后,生成html文件)并缓存在CDN服务器上

      4 如何控制秒杀商品页面购买按钮的点亮和生成下单url地址

        通过jquery控制倒计时显示框,倒计时结束后将购买按钮点亮,同时通过ajax请求后台,动态生成下单url地址

      5 秒杀商品列表页面的动态更新

        由于项目采用分布式架构,这里采用quarz配置分布式定时任务,定时生成秒杀商品列表页面

      6 商品详情页面查询优化

        由于商品详情页面并发量大,可以采用redis作为一级缓存,ehcache作为二级缓存

     3  接口限流防刷

      用户访问某一个url时,将url和用户的token拼接作为key,访问次数作为value(初始值为1),并且设置过期时间,设置到redis中。 只要不超过最大访问限制次数,比如5,每访问一次value值加1,这样就可以做到限制某个用户在多长时间只能访问某个接口多少次。可以把该功能完善成一个注解,在要该功能的方法前面加一个注解就可以。

       

      

  • 相关阅读:
    希望jQuery操作DOM文档,则必须确保DOM载入后开始执行
    Web全栈AngularJS
    Web全栈AngularJS
    Web全栈AngularJS
    KD-Tree
    KD-Tree
    KD-Tree
    KD-Tree
    如何提升自身实力
    如何提升自身实力
  • 原文地址:https://www.cnblogs.com/moris5013/p/11953842.html
Copyright © 2011-2022 走看看