秒杀的系统设计 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
vnex
V2EX    问与答

秒杀的系统设计

  •  
  •   vnex 2020 年 5 月 20 日 2642 次点击
    这是一个创建于 2076 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我看,秒杀的一些系统设计,似乎都是根据商品 ID hash 到同一个逻辑节点,然后在逻辑节点里面,排队处理

    那么为什么不是分散到其他节点,基于分布式锁来处理呢?一样可以保证一致性

    目前在想,是不是因为,如果基于分布式锁的话,那么没有抢到锁,只能返回秒杀失败,这样可能导致,商品依旧有库存,但是因为抢的时候,刚好有其他用户抢锁了,导致秒杀失败

    谢谢

    第 1 条附言    2020 年 5 月 21 日
    另外一个,就是如果用分布式锁的话,貌似就可以动态扩容了,如果是 hash 到同一个节点,要怎么加机器?新旧请求 hash 到不同节点吗?如果是这样的话,那么像微信抢红包的,520 的时候加一堆机器,要等到 522 凌晨才能释放?有点太浪费了吧?
    9 条回复    2020-05-22 11:15:38 +08:00
    kop1989
        1
    kop1989  
       2020 年 5 月 20 日   1
    因为秒杀的关键不是高性能逻辑,是减轻服务器压力。
    单线程排队,甚至是请求抽奖,都是节省服务器压力为目的。并不是为了高效处理队列。
    kop1989
        2
    kop1989  
       2020 年 5 月 20 日
    举个不恰当的例子,程序员去大厂面试。为何是排队一个一个面,而不是根据来的人数动态匹配面试官?
    因为对于公司而言,占用 10 个人 30 分钟,和占用一个人 300 分钟,产能影响、面试结果准确度等结果是不同的。
    而最终目的却相同(给一个人发 offer )。
    那作为公司而言为什么要做出对自己不利的面试策略?
    luckyrayyy
        3
    luckyrayyy  
       2020 年 5 月 20 日   1
    性能啊,几十万个请求抢一个锁,画美不看。
    EPr2hh6LADQWqRVH
        4
    EPr2hh6LADQWqRVH  
       2020 年 5 月 20 日   1
    就随便收集请求 random 一下算了,别跟自己过不去。
    night98
        5
    night98  
       2020 年 5 月 20 日   1
    基于分布式锁会存在抢占锁的问题,多个线程等待锁释放耗费的性能也是很高昂的代价,所以直接 hash 到单个节点排队处理,超出队列大小的还能直接返回失败,相比分布式锁会要少很多的内网请求。记住,高并发的原理就是尽可能做最少的事情,能走内存访问的不要走网络访问,能走网络的不要走 io,当然这种场景可以参考下无锁队列进行实现。
    jugelizi
        6
    jugelizi  
       2020 年 5 月 21 日 via iPhone   1
    看上去是没趟过分布式锁的坑
    vnex
        7
    vnex  
    OP
       2020 年 5 月 21 日
    @jugelizi 介绍指导下 :)
    vnex
        8
    vnex  
    OP
       2020 年 5 月 22 日
    @night98 那要如何支持动态扩容呢,如果想加节点,不就要停机维护?

    我看到有介绍说,在连接层,添加一个新的映射关系,老 ID 走老的映射,新 ID 走新的映射

    但是
    像抢红包,红包可以放 24 小时,入会处理峰值时的请求呢?靠单个节点排队吗?
    vnex
        9
    vnex  
    OP
       2020 年 5 月 22 日
    @night98 高并发的原理就是尽可能做最少的事情,能走内存访问的不要走网络访问,能走网络的不要走 io,当然这种场景可以参考下无锁队列进行实现。
    感觉这个是指高性能吧

    高并发,应该是 节点无状态+cache+分库分表,读写分离主从
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3362 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 11:38 PVG 19:38 LAX 03:38 JFK 06:38
    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