V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
melonzzz

面试秒杀问题求解

  •  
  •   melonzzz · Apr 13, 2019 · 5976 views
    This topic created in 2574 days ago, the information mentioned may be changed or developed.
    用尽可能少的机器来做一次秒杀活动?主要是问需要怎么设计
    只说了限流,削峰,CDN 缓存,还有什么需要考虑的嘛
    Supplement 1  ·  Apr 13, 2019

    搜到了一个repo体量大体思路还是比较清晰的给他打个广告吧 https://github.com/qiurunze123/miaosha

    28 replies    2019-04-19 19:15:59 +08:00
    melonzzz
        1
    melonzzz  
    OP
       Apr 13, 2019
    top
    binux
        2
    binux  
       Apr 13, 2019 via Android
    把名额分配给自己,前段直接 setTimout ("已售销")
    whileFalse
        3
    whileFalse  
       Apr 13, 2019   ❤️ 4
    让大部分用户的请求到不了数据层。

    一是学小米,在页面 js 做手脚,开始秒杀后让大部分人直接结束,不需要发送请求到后端。
    二是请求到了后端 web 层之后,在进入 app 层排队之前就随机丢弃一部分,剩下的再要不是进队列啊要不直接走 DB 都行了。
    如果做得精细点,还可以使用在线统计的方式,秒杀开始前一分钟拿到在线数量,计算出页面和 web 层丢弃的比例,传给页面或 web 层。确保 web 层和 app 层不被压垮。
    whileFalse
        4
    whileFalse  
       Apr 13, 2019
    如果说页面连个请求都不发就直接结束太 tm 假了,那好办,web 端按某种方式随机到 100 个后端 api 地址上;其中只有 10 个是真的 api,另外的 90 个都返回静态的“秒杀未开始或已经售罄”即可🐶
    dongisking
        5
    dongisking  
       Apr 13, 2019 via Android
    超卖超买,锁这些吧
    Dounx
        6
    Dounx  
       Apr 13, 2019 via Android
    redis 缓存?
    supuwoerc
        7
    supuwoerc  
       Apr 13, 2019
    "需要很大一部分的前端屠宰" =。=
    uyhyygyug1234
        8
    uyhyygyug1234  
       Apr 13, 2019
    那感觉不是秒杀,是在抽奖啊
    guyujiezi
        9
    guyujiezi  
       Apr 13, 2019
    把 90%的请求拦截在前端
    luozic
        10
    luozic  
       Apr 13, 2019
    層層削峰。隔離部署,容量規劃和熔斷要搞好。 --- 高可用
    防止黃牛 刷票的要搞好,其他的都是細節。--- 安全
    pathbox
        11
    pathbox  
       Apr 13, 2019 via iPhone
    用尽可能少的机器来做 本身就是错误的方向
    cxtrinityy
        12
    cxtrinityy  
       Apr 13, 2019 via Android
    前端屠杀这个过分了,这特么感情不是比手速网速,是比幸运值么
    carlclone
        13
    carlclone  
       Apr 13, 2019
    缓存,队列,分布式...数据库分片...超买超卖优化方案..
    melonzzz
        14
    melonzzz  
    OP
       Apr 13, 2019
    @whileFalse 要考虑的地方着实很多 上次看到过一篇秒杀设计写的很透彻,忘了收藏
    murmur
        15
    murmur  
       Apr 13, 2019
    直接前端随机返回失败,或者后端恒定 error,我相信个大互联网公司的举报系统都是这么设计的
    melonzzz
        16
    melonzzz  
    OP
       Apr 13, 2019
    @pathbox 也就是最优资源配置,不浪费资源
    lhx2008
        17
    lhx2008  
       Apr 13, 2019 via Android
    如果要公平,用中间件硬抗也可以的,前端先发请求申请一个指标,最快的拿到指标,其他放掉。

    但是还是抽奖比较简单
    melonzzz
        18
    melonzzz  
    OP
       Apr 13, 2019
    @binux 这个挺不错[狗头]
    lhx2008
        19
    lhx2008  
       Apr 13, 2019
    像小米的话,放指标用的别的队列,几分钟后推回来,这样用户体验比较差,不过成本比较低,也可以兼顾到后面支付和减库存的压力。
    lhx2008
        20
    lhx2008  
       Apr 13, 2019
    淘宝的就比较狠,因为时时刻刻都在秒杀,所以根本没什么策略,也可能是我还没到那个水平
    death00
        21
    death00  
       Apr 13, 2019
    长知识了,原来秒杀还有抽奖一说
    melonzzz
        22
    melonzzz  
    OP
       Apr 13, 2019
    @lhx2008 怪不得小米这么难抢,抢到的都可以去买彩票了
    lhx2008
        23
    lhx2008  
       Apr 13, 2019
    @melonzzz 小米现在是,你到点抢,他会弹一个你在排队,你等两分钟运气好的话,可以拿到指标,也可能拿不到,哈哈
    tabris17
        24
    tabris17  
       Apr 13, 2019
    @death00 秒杀在本质上抽奖是等价的
    Fitz
        25
    Fitz  
       Apr 13, 2019
    这 小米真的是在前端就给判死刑了吗?
    Emmanuel1989
        26
    Emmanuel1989  
       Apr 14, 2019
    @lhx2008 小米确实是真的无良,欺骗你在排队,浪费感情,白白等半天。还不如直接 fail fast 来的痛快。
    usingnamespace
        27
    usingnamespace  
       Apr 15, 2019 via iPhone
    java 的没意思。。。
    tonghuashuai
        28
    tonghuashuai  
       Apr 19, 2019
    秒杀其实就是个抽奖,大部分的请求被 js 拦截了,根本到不了后端
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5357 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 99ms · UTC 07:13 · PVG 15:13 · LAX 00:13 · JFK 03:13
    ♥ Do have faith in what you're doing.