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

关于某些秒杀的设计

  •  
  •   hytex 2022-09-21 13:29:05 +08:00 2198 次点击
    这是一个创建于 1118 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我一直有一个疑问,看过一些秒杀代码,类中都会有一个 hashmap 来存储当前某个产品的库存,进入方法的时候获取对应商品的库存,如果够的话就执行之后的代码,如果不够的话就去库或者 redis 继续取。伪代码如下

     private HashMap map = new HashMap(); /** * 库存判断 */ public void preHandle(int id) { //判断 map 中的数量 if(Integer.parseInt(map.get("id").toString())<1){ //获取库中的数量,并 put 到当前的 map 中,假定 result 为库中获取到的数量 int result = 10; //如果数量>0 ,则执行下单逻辑 if(result>0){ order(); }else { //抛出库存不足的异常 } } //执行下单逻辑 order(); } public void order(){ //订单逻辑 } 

    那如果现在我有 3 台机器,其中两台中的 map 中的 id 为 1 的商品数量为 0 了,只有一台 map 中 id 为 1 的数量为 10 。我是如何确保对应访问的流量是对应到有余量的服务上的呢

    10 条回复    2022-09-21 20:43:38 +08:00
    7911364440
        1
    7911364440  
       2022-09-21 14:54:15 +08:00
    本地缓存只能在单机上用
    lmshl
        2
    lmshl  
       2022-09-21 15:02:24 +08:00   1
    鉴于秒杀系统的流量,没必要去平衡这点差异,还没等你把流量转发给有余量的进程上去,那点余量就已经被别人秒掉了。
    bootvue
        3
    bootvue  
       2022-09-21 15:03:30 +08:00
    分布式缓存 分布式锁
    lmshl
        4
    lmshl  
       2022-09-21 15:04:27 +08:00   1
    如果你真的对”正确答案“感兴趣的话,可以了解一下什么是《位置透明( Location Transparency )》 https://doc.akka.io/docs/akka/current/general/remoting.html

    它是分布式系统中的概念
    wolfie
        5
    wolfie  
       2022-09-21 15:04:54 +08:00   1
    没请求到 有库存的实例上,算用户倒霉。下一个。
    hytex div class="fr">     6
    hytex  
    OP
       2022-09-21 15:09:06 +08:00
    @lmshl 明白你的意思了,确实…
    hytex
        7
    hytex  
    OP
       2022-09-21 15:09:36 +08:00
    @7911364440 单机、秒杀。 这两个词放在一起总感觉有点违和。
    wdwwtzy
        8
    wdwwtzy  
       2022-09-21 15:32:40 +08:00
    没懂,假设 3 台机器,真实库存是 100 ,那这个 map 存 100 还是 33 ? 100 的话那不就超卖了,33 的话还可以理解……
    oceanthe1h
        9
    oceanthe1h  
       2022-09-21 18:08:15 +08:00
    为 0 了不应该先去 Redis 里找吗,为什么要把流量路由走呢
    ailer
        10
    ailer  
       2022-09-21 20:43:38 +08:00 via Android
    这个 map 是减轻 Redis 压力的吧?难道不是一种缓存措施吗?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1478 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 16:43 PVG 00:43 LAX 09:43 JFK 12:43
    Do have faith in what you're doing.
    ubao 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