简单的网购秒杀活动

xiaohuiji190 xiaohuiji190     2023-01-17     600

关键词:

之前看了《大型网站技术架构·核心原理与案例分析》一书,其中介绍了一些关于网购秒杀系统架构设计相关的知识,碰巧在imooc上也看到了有关的课程。在参考了各方资料之后,个人感觉对如何设计一个秒杀系统有了基本的了解,于是打算自己也试着实现一个简单的秒杀系统。本文的秒杀系统虽然是基于Spring MVC+Spring+Mybatis框架实现,但是其中的架构思想以及处理问题的方法是语言无关的。所以使用其他编程语言做开发的同学也可以看一看。
  本文主要是对秒杀系统架构设计、系统功能等进行介绍,另外提一下编码过程中遇到的一些坑,具体的编码不过多赘述,代码中都写了详细的注释。建议直接把项目down下来自己边运行边探究。
   项目github地址: https://github.com/eakonzhao/Spike-system ( 喜欢的话记得给个star哦 o(^▽^)o ) 
  怎么把项目运行起来?

  
         

  • git clone https://github.com/eakonzhao/Spike-system   
  • 打开 IDEA --> File --> New --> Open   
  • 打开pom.xml,然后让Maven将所需依赖都加载进来   
  • 将jdbc.properties中的数据库url、用户名和密码改成你自己的   
  • 运行Tomcat   
  • 在浏览器输入 http://localhost:8080/seckill/list  
  秒杀系统架构设计

  一、秒杀活动技术挑战
  
         

  • 对现有业务造成冲击:  
  秒杀活动一般是网站营销的附加活动。秒杀活动的特点是持续时间短、瞬时访问量大的特点,因此在秒杀活动进行期间肯定要占用大量的网络带宽以及服务器资源等,如果和网站日常的应用部署在一起必然会对现有业务造成冲击,甚至可能会导致宕机时间的发生。在实际生产中,我们有两种选择:一个是进行适当地服务降级,在秒杀活动进行的过程中关闭一些相对来说没有那么重要的服务。例如淘宝最初在应对双11的时候,就会把确认收货以及商品评价等功能关闭,以争取给予秒杀活动尽可能多的可用资源;另一个选择是秒杀系统和现有业务系统分开部署,其实也就是业务分割部署的思想。
  
         

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

  • 突然增加的网络及服务器带宽  
  秒杀活动时所需的带宽会超过网站平时使用的带宽
  
         

  • 用户未到秒杀时间直接下单  
  秒杀的流程应该是到了秒杀时间才能开始对商品下单购买,在此时间点之前,只能浏览商品信息而不能下单。而下单页面也是可以通过一个普通的URL获取,如果得到这个URL,那么不用等到秒杀开始就可以进行下单了。
  二、秒杀系统的应对策略
  
         

  • 秒杀系统独立部署
       
  • 秒杀商品页面静态化
    重新设计秒杀商品页面,不使用网站原来的商品详情页面,页面内容静态化:将商品描述、商品参数、成交记录和用户评价全部写入一个静态页面,用户请求不需要经过应用服务器的业务逻辑处理,也不需要访问数据库。所以秒杀商品服务不需要部署动态的Web服务器和数据库服务器。
       
  • 租借秒杀网络带宽
       
  • 动态生成随即下单页面URL
    为了避免用户直接访问下单页面URL,需要将该URL动态化,即使秒杀系统的开发者也无法在秒杀开始之前访问下单页面的URL。解决办法是在下单页面URL加入由服务器生成的随机数作为参数,在秒杀开始的时候得到。
      
  三、需求分析与系统架构
  下面是秒杀系统的一个基本流程图:
     
<ignore_js_op>技术分享图片
   秒杀系统业务流程
    但是在本系统中,并没有实现得那么完善,而是针对一部分方面进行了实践:
     
<ignore_js_op>技术分享图片
   本系统实现的功能
    前端主要流程图
     
<ignore_js_op>技术分享图片
   秒杀系统前端流程图
    后端简化流程图(因为还会涉及到访问Redis缓存等操作)
     
<ignore_js_op>技术分享图片
   后端简化流程图
    在这里特别把其中的事务拿出来说一下。我们的事务由两个操作组成,分别是操作两张表,一个操作是更新某张表的数据,另一个操作是往某张表里面插入数据。其实这里有一个优化的点,就是在业务代码中将插入操作放在更新操作之前。假如插入失败就直接回滚。但是如果把更新操作(即扣库存)放在前面,在并发的环境下可能会涉及高频率的行级锁竞争问题,导致系统性能急剧下降。(由数据库的三级封锁协议可知这样确实起到了一定的优化作用)
     
<ignore_js_op>技术分享图片
   从用户角度针对库存业务进行分析
      
<ignore_js_op>技术分享图片
   事务详情
      
<ignore_js_op>技术分享图片
   两张主要的数据表(Github已经放了建表的sql语句)
    系统功能介绍

  由于上面已经给出了系统的详细流程图,所以在这里就只展示几张系统的截图
     
<ignore_js_op>技术分享图片
   秒杀商品列表页
      
<ignore_js_op>技术分享图片
   秒杀待开启
      
<ignore_js_op>技术分享图片
   进入秒杀页面,可以开始秒杀
      
<ignore_js_op>技术分享图片
   由于库存为零,点击之后显示秒杀结束
      
<ignore_js_op>技术分享图片
   重复秒杀
    实现

  项目总体描述

  本项目是基于
  项目中应用到的技术与工具

  
         

  • IDEA   
  • MySQL   
  • Spring MVC   
  • Spring   
  • Mybatis   
  • Redis(用户缓存部分商品信息)   
  • Maven   
  • protostuff(用于序列化对象,性能会比jdk自带的序列化好) 
    ........ 
    其实还用到了一些技术,这里就不一一给出了。由于本项目采用Maven进行管理,所以在pom.xml文件里面都给出了所需的依赖。  
  项目骨架展示

     
<ignore_js_op>技术分享图片
   项目骨架展示
    遇到的一些坑

  
         

  • Spring MVC配置出错 
             
    <ignore_js_op>技术分享图片
         通配符很全面,但无法找到元素...
                
    <ignore_js_op>技术分享图片
         ApplicationContext.xml的头要配置正确
       
  • Spring MVC参数绑定错误 
    调试的时候打开浏览器控制台看到报了个400错误,后来检查之后发现原来是Spring MVC的参数绑定出错了,使用@pathVariable的时候要注意  
     
<ignore_js_op>技术分享图片
   控制台出现400错误
      
<ignore_js_op>技术分享图片
   400 Bad Request][email protected]`NG8JS2.png
      
<ignore_js_op>技术分享图片
   正确的@PathVariable语法 @PathVariable("parameter")
   
         

  • logback和slf4j整合出错导致无法正常打印日志信息
             
    <ignore_js_op>技术分享图片
         logback报错信息
         在查看了官方手册之后发现原来logback和slf4j在整合的过程中应该注意版本的问题
             
    <ignore_js_op>技术分享图片
         Logback-classic version 1.1.4 and later require slf4j-api version 1.7.15 or later.
      
     
<ignore_js_op>技术分享图片
   在pom.xml引入slf4j和logback的依赖时应该注意版本问题











































































sikuli--前端自动化操作的神器

前端自动话操作应用很广泛,从网购秒杀活动实现自动化抢购,到区块链货币高频交易前端脚本编写(非合作交易所不提供api的情况下)。自动化的流派分为2类,一类是对DOM对象进行解析的,这个是主流,但是受特定平台的限... 查看详情

网购的另一面思考

...沟通等等一切这个事件相关的成本。下面我说一下我个人的网购上不愉快的经历,就是这些经历让我再反思今天的网购。   1.几年前在网上买锁,由于和预期有差距,在和卖家沟通无果后,我给了差评,结果被电话骚扰。搞了... 查看详情

工作小记——小秒杀活动

...包。总共1900个,领完弹框“已领完” 需求还是比较简单的,但是这个总共1900是个隐患啊,需求轻描淡写的一笔,架构可要小心。就算需求方说不会大肆宣传,小范围宣传,到时候直接出banner,看到的人才点。但是架构还 查看详情

秒杀架构设计(代码片段)

...活动的整体思路,大家对这次分享反馈还不错,所以我就简单整理了一下,分享给大家参考参考业务介绍什么是秒杀?通俗一点讲就是网络商家为促销等目的组织的网上限时抢购活动比如说京东秒杀,就是一种定时定量秒杀,在... 查看详情

秒杀活动的技术挑战

...业转载请联系作者获得授权,非商业转载请注明出处。1.秒杀活动的技术挑战假设某网站秒杀活动只推出一件商品,预计会吸引1万人参加活动,也就说最大并发请求数是10000,秒杀系统需要面对的技术挑战有:对现有网站业务造... 查看详情

腾讯云

...然错过了就得再等一天了哦!腾讯云618活动相比阿里云要简单直观,阿里云618有点像淘宝买货,各种代金券,弄得人眼花缭乱。估计不少钢铁直男偏爱腾讯云这样的秒杀活动风格,简单!!虽然价格上比阿里云略贵,但配置非常... 查看详情

秒杀活动java怎么实现

秒杀与其他业务最大的区别在于:秒杀的瞬间:(1)系统的并发量会非常的大(2)并发量大的同时,网络的流量也会瞬间变大。一个秒杀或者抢购页面,通常分为2个部分,一个是静态的HTML等内容,另一个就是参与秒杀的Web后... 查看详情

公告关于“天天秒杀”活动时间调整

自2017年1月中旬上线以来,天天秒杀活动得到了广大新老学员的热烈支持,在此感谢大家对51CTO学院的包容与厚爱!下载“51CTO学院”APP,随时随地秒课>>>这一年中,我们也在持续优化秒杀体验:从最初仅限在APP中参与,到... 查看详情

秒杀项目

1定时释放秒杀入口,2秒杀商品添加到ES。 预约方式过滤掉一部分用户。只有预约了的商户才能参加本次“黑龙联合活动”。3首先秒杀活动是要提前报备,需要走完整审批流程,分了40台机器,(北京,香港,上海,共... 查看详情

秒杀系统架构分析与实战

1秒杀业务分析正常电子商务流程(1)查询商品;(2)创建订单;(3)扣减库存;(4)更新订单;(5)付款;(6)卖家发货秒杀业务的特性(1)低廉价格;(2)大幅推广;(3)瞬时售空;(4)一般是定时上架;(5)时间短... 查看详情

秒杀系统架构分析与实战

1秒杀业务分析正常电子商务流程(1)查询商品;(2)创建订单;(3)扣减库存;(4)更新订单;(5)付款;(6)卖家发货秒杀业务的特性(1)低廉价格;(2)大幅推广;(3)瞬时售空;(4)一般是定时上架;(5)时间短... 查看详情

秒杀微服务实现抢购代金券功能(代码片段)

文章目录需求分析秒杀场景的解决方案数据库表设计代金券表抢购活动表订单表创建秒杀服务pom依赖配置文件关系型数据库实现代金券秒杀相关实体引入抢购代金券活动信息代金券订单信息Rest配置类全局异常处理添加代金券秒... 查看详情

关于秒杀的场景特点分析

...量,只有少部分用户能够秒杀成功;-秒杀业务流程比较简单,一般就是下订单操作; 秒杀架构设计理念- 限流:鉴于只有少部分用户能够秒杀成功,所以要限制大部分流量,只允许少部分流量进入服务后端(暂未处理)... 查看详情

关于秒杀的场景特点分析

...量,只有少部分用户能够秒杀成功;-秒杀业务流程比较简单,一般就是下订单操作; 秒杀架构设计理念- 限流:鉴于只有少部分用户能够秒杀成功,所以要限制大部分流量,只允许少部分流量进入服务后端(暂未处理)... 查看详情

java架构知识点-大数据与高并发(学习笔记)

...,不能下订单,只能浏览对应活动商品的信息。简单来说,需要Disable订单按钮。页面流量突增秒杀活动开始前后,会有很多用户请求对应商品页面,会造成后台服务器的流量突增,同时对应的网络带宽增... 查看详情

财务金融成中国金融科技崛起的幕后功臣

...将“光棍节”取代。在电商激战的同时,也有高达60%左右的网民将在这一天进行网购。而除了数字惊人的GMV(成交总额),还有一个数据中隐含着更多的信息。数据显示,2013年“双十一”当天的人均花费相当于2.5个月的网购消... 查看详情

秒杀系统设计(代码片段)

...设计秒杀系统?这是一个高频面试题。这个问题看似简单,但是里面的水很深,它考查的是高并发场景下,从前端到后端多方面的知识。秒杀一般出现在商城的促销活动中,指定了一定数量(比如:10... 查看详情

秒杀系统架构分析

#1秒杀业务分析#正常电子商务流程(1)查询商品;(2)创建订单;(3)扣减库存;(4)更新订单;(5)付款;(6)卖家发货秒杀业务的特性(1)低廉价格;(2)大幅推广;(3)瞬时售空;(4)一般是定时上架;(5)时间... 查看详情