秒杀

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,这样就可以做到限制某个用户在多长时间只能访问某个接口多少次。可以把该功能完善成一个注解,在要该功能的方法前面加一个注解就可以。

   

  

 

posted @ 2019-11-28 21:23  踏月而来  阅读(315)  评论(0编辑  收藏  举报