zoukankan      html  css  js  c++  java
  • 秒杀系统的设计

    https://mp.weixin.qq.com/s/yJLvFwzEhIrsjHjPng8W_Q

    什么是秒杀

    简单的说就是商家对商品在特定时限内设置极低的价格,由用户在同一时间进行在线抢购的行为。

    秒杀系统设计

    很多同学会认为秒杀系统的设计很简单。但是仔细分析这个事情,会发现里面坑很多。

    从场景上来说,由于商品价格超低,网站涌入的访问量,可能是正常时候的几倍甚至几十倍。而这种状态又不是时常发生的,这就对现有的业务产生了冲击。如何在保证现有系统正常运行,而又不影响秒杀的正常进行,是个很有技术含量的事情。

    总结来说,限时、限量和海量用户是秒杀的主要特点。而针对这个特点,系统设计上要达到以下的标准:

    1、如何设计有效的逻辑确保系统访问的稳定性;

    2、设计哪些手段可以有效防止薅羊毛现象的出现;

    3、在保证前两个的效果基础上,让用户抢购的体验更好。

    先简单分析下秒杀系统的设计,从逻辑上讲,主要分为三部分:活动管理、发布秒杀活动和用户参与。基本的产品架构如下图所示:

    自营性的电商系统只包含商家本身,如果是平台型电商,就涉及到平台秒杀和商家自助秒杀两种模式。在平台秒杀模式下,商家需要报名申请秒杀活动,审核通过后才能参与的。商家自助秒杀模式则由商家自己自行发布组织。秒杀发布的产品结构如如下图所示:

    注意的是,在商品设置中,秒杀的库存是单独设置的,如果秒杀商品和商品设置为同一个库存,恩,结果可想而知。

    活动设置、商品设置、抢购设置的原型就不画了。

    恩,下面说一下如何防止薅羊毛这件事情。

    如何防止用户薅羊毛

     

    秒杀大部分时候其实是在赔本赚吆喝,通过秒杀商品吸引用户、流量。因为商品价格极低,就很容易出现用户恶意刷单和作弊的情况,也就是我们俗称的薅羊毛。

    一般的防止手段可以概括如下:

    虽然列出了上面的限制,但是需要说明的是,并不是所有的限制都是有效的,限制越多,逻辑越复杂,前台用户的抢购体验越不好。因而,需要持续关注活动期间用户的抢购行为状况,及时作出调整。

    秒杀系统如何面对高并发量

     

    或许你以为咱们的产品设计已经完成了,其实这才刚刚开始。如前所述,由于大量用户的涌入,会造成众多难以想象的问题:

    1、如何避免对现有网站的冲击?

    解决办法:描述使用单独的二级域名,独立部署;

    2、用户在参加活动时候,不停的刷新页面,以保证不错过秒杀

    解决办法:设计单独的商品页面,页面内容静态化;

    3、秒杀作为一项活动,时间点到了才能进行,但是下单的页面也是一个URL,如果获取到该URL也能下单

    解决办法:将该URL动态化处理,在服务端生成随机参数,只有时间点到了才能得到

    4、如何解决超卖的现象

    由于同一时间内参与的用户数量极大,导致库存并发更新的问题,实际库存已经不足的情况下,前台依然可以下单,库存依然在减

    解决办法:技术上设置乐观锁或者悲观锁,实际中,商家多备一些货

    5、描述活动的概率和控制数量

    由于秒杀活动非常吸引人,导致一个商品虽然有10W库存,但是却有100W人涌进来,如何解决?

    解决办法:因为你不可能让所有的用户都抢到商品,通常来说概率设定在十万分之一到五十万分之一,具体还是要看用户量级。

    而另一方面,面对疯狂进来的用户,网站响应慢,半天加载不出来,这个问题怎么解决?从产品设计的角度讲,一种方式可以采取限流的方式,利用先进先出的规则,将前面的用户先放进来,后面的用户排队引流到其它页面。当然这种方式对用户体验不是很好。另一种方式也可以采用预约码的形式,在秒杀开始之前,发放预约码,凭预约码进入。

    6、如何应对秒杀器

    一般采取秒杀答题、秒杀验证码等方式。

    就到这里:)

  • 相关阅读:
    Java集合之LinkedHashMap
    ConcurrentHashMap原理分析
    Java集合之HashMap
    JAVA集合之ArrayList
    Python内建函数
    Vscode 安装Java Spring项目
    音频质量评估-2
    音频质量评估-1
    Python list 实现
    怎么测试大数据
  • 原文地址:https://www.cnblogs.com/shoshana-kong/p/11222787.html
Copyright © 2011-2022 走看看