由某东抢购商品,联想到一个解决服务器大并发的方法。 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
tool2d
V2EX    编程

由某东抢购商品,联想到一个解决服务器大并发的方法。

  •  
  •   tool2d 2022-12-09 16:07:21 +08:00 3582 次点击
    这是一个创建于 1041 天前的主题,其中的信息可能已经有所发展或是发生改变。
    举个例子,如果有 100 万人早上 10 点同时抢货,而备货数量只有 1 万,那么注定有 99 万人的服务器抢购提交,是无效提交。

    与其让 100 万个并发流入进来,造成网络阻塞,不如直接本地生成一个 100 之类伪随机数,把 90%的人,直接拒之门外。剩余 10%的幸运儿,按照固定 QPS 放进来抽奖,一直到 1 万备货,全部发完为止。

    这样别说百万并发,APP 对面突发性千万并发,都能轻松应对。当然不能让那些抢不到的人看出破绽,本地模拟提交页面还是需要的,比如让人误以为正在网络提交,以免打击用户抢购积极性。
    27 条回复    2022-12-10 12:21:44 +08:00
    lllllliu
        1
    lllllliu  
       2022-12-09 16:10:55 +08:00
    你这被查出来就要废,如果也要请求网络,那么瞬时还是会有那么多基础流量的。
    cando
        2
    cando  
       2022-12-09 16:11:22 +08:00
    抽签买口罩
    抽签买药
    hahasong
        3
    hahasong  
       2022-12-09 16:11:35 +08:00
    你的想法很创新 十年前抢小米的时候就是这样干的
    terence4444
        4
    terence4444  
       2022-12-09 16:12:24 +08:00 via iPhone
    小米之前好像就是这么搞的,前端发假请求
    tool2d
        5
    tool2d  
    OP
       2022-12-09 16:14:18 +08:00
    @lllllliu 1 万备货是货真价实,这应该不算欺骗吧。
    isno
        6
    isno  
       2022-12-09 16:14:50 +08:00
    你这聪明用到正经处,那得多有前途啊。。
    chairuosen
        7
    chairuosen  
       2022-12-09 16:17:11 +08:00
    你可以在网关层拦,这样就看不出来了
    wu00
        8
    wu00  
       2022-12-09 16:17:17 +08:00   1
    “本地生成一个 100 之类伪随机数,把 90%的人,直接拒之门外” 你这个本地应该是指客户端吧,你以为有超过 100 万人来抢,结果只有 2 万人来抢,备货一万只卖 2000 个?
    tool2d
        9
    tool2d  
    OP
       2022-12-09 16:21:46 +08:00
    @wu00 90%是比例,永远有 10%的幸运儿能挤进来,不是一次性随机数,是每次伪提交前,都会生成一次。

    比如有 2 万人来,那就永远有 2 千人能进池子里来,可以一直抽奖,直到把池子里的 1 万个货全部抽完。
    fcfangcc
        10
    fcfangcc  
       2022-12-09 16:22:22 +08:00   2
    这不是新鲜方案了,但是比例要在后端控制。比如前端直接先随机掉 50%,然后后端网关层再随机调配置的比例,只要网关抗住就行了,真正到后端的请求量已经很少了。而且不容易呗发现
    Xyg12133617
        11
    Xyg12133617  
       2022-12-09 16:37:36 +08:00
    大佬们,我想问,现在的 jd ,tb ,pdd 等电商平台的抢购现在不就是这种情况嘛?
    现在的抢购,要么就是前方拥堵,拥堵的。是不是就是有一部分幸运儿获得了资格呀,大家手速也都是差不多的呀。有些人的脚本也不是百分之百中啊,难道真的是拼的节点到达他们服务器的网速吗?
    elonmask
        12
    elonmask  
       2022-12-09 17:02:40 +08:00   1
    之前抢华为折叠机,我都断网了,点击一下还在抢购中呢,
    garlics
        13
    garlics  
       2022-12-09 17:10:37 +08:00
    本来就是这么做的,不过这个判断是在后端。我记得之前使用抢茅台脚本的时候,作者就说明了返回 A 状态码是参与了抢购,B 状态码就是直接过滤掉的。
    肯定不能放在前端,一抓包就露馅了。
    sdwgyzyxy
        14
    sdwgyzyxy  
       2022-12-09 17:27:53 +08:00
    为什么非要做伪提交呢,网关层不要有复杂逻辑,应该很容易能支持高并发吧。
    bk201
        15
    bk201  
       2022-12-09 17:46:40 +08:00
    预约完了,直接抽备货数目的用户给予进入真实订单页面的权利,隔段时间计算剩余库存,继续抽取,直至货卖完。其他没权限的用户直接给予固定页面,太繁忙,稍后再试。
    malusama
        16
    malusama  
       2022-12-09 18:46:43 +08:00
    完全没必要前端过滤啊, 如果一开始就知道这玩意会被抢光订好了一定用户内抽, 那就是抽奖.
    多少并发都不是瓶颈啊

    怕的是那种. 你不知道哪个 sku 是爆款, 非爆款的你得给用户一个下单了就确定的感觉. 而不是得等一段时间, 不然人家觉得买不到就走了.
    giaodadi
        17
    giaodadi  
       2022-12-09 20:46:47 +08:00
    不如预约抽奖
    bequt
        18
    bequt  
       2022-12-09 20:55:43 +08:00
    放心啦,都是把 90%的流量挡在门外
    xiubin
        19
    xiubin  
       2022-12-09 21:31:19 +08:00   1
    百度承包春晚那年 不就是这么干的么,客户端随机连请求都不发
    MarkLazy
        20
    MarkLazy  
       2022-12-09 23:46:30 +08:00
    两个问题
    1. 这个过滤的阈值最好后端配置,前端查询,因为不同的商品抢购程度不一样
    2. 稍微懂点代码的人,直接绕过你前端过滤逻辑,直接给你服务器发请求,你如何识别
    Jooooooooo
        21
    Jooooooooo  
       2022-12-09 23:50:26 +08:00
    很正常的操作, 这种参加人数远远超过商品数量的都是在各个环节去丢弃流量.

    前端做被人发现会有 pr 风险就拿到后端做, 这种本地随机数判断性能损耗非常小, 可以抗很大的流量.
    autoxbc
        22
    autoxbc  
       2022-12-10 01:43:57 +08:00
    我看到「限量抢购」都是直接关闭页面,看到支付方式「随机立减」马上换另一种支付
    fackVL
        23
    fackVL  
       2022-12-10 04:03:53 +08:00 via iPhone
    网关随机过滤一下就好
    eason1874
        24
    eason1874  
       2022-12-10 04:59:01 +08:00   5
    恭喜你,你成功悟出来了行业内人尽皆知的秘密

    现在比较新的做法是在发给前端的 JWT 里,夹带用户评级,网关在 JWT 鉴权的同时判断用户等级,等级未达标的直接失败,连参与随机的机会都没有。同时也有白名单用户,只要在特定时间内,必定成功
    cnkuner
        25
    cnkuner  
       2022-12-10 08:51:51 +08:00 via Android
    一般放网关随机丢弃的,前端不搞,容易被人看出来,也不安全。
    jackma0571
        26
    jackma0571  
       2022-12-10 11:02:30 +08:00
    放进来,库存怎么控制,我下单了你锁不锁库存,我超过多少时间没付款,你释不释放,那是不是一直有人在等,要等多久
    needpp
        27
    needpp  
       2022-12-10 12:21:44 +08:00
    换个思路,原价卖,随机返
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2985 在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 00:29 PVG 08:29 LAX 17:29 JFK 20:29
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86