消息队列 MQ 怎么做削峰填谷 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
kangmf
V2EX    问与答

消息队列 MQ 怎么做削峰填谷

  •  
  •   kangmf 2022-07-11 21:41:31 +08:00 2580 次点击
    这是一个创建于 1247 天前的主题,其中的信息可能已经有所发展或是发生改变。
    作为初学开发者,总是能看到消息队列 mq 可以做削峰填谷,但是具体不知道是怎么做的,有人可以简单说下嘛
    13 条回复    2022-07-12 13:17:23 +08:00
    dzdh
        1
    dzdh  
       2022-07-11 21:50:02 +08:00   2
    比如下单


    大量下单请求实时操作数据库进行扣减,可能会慢、卡顿、甚至数据库崩溃等等。

    MQ 不会,大量订单下来一股脑全扔到 MQ ,隔壁的消费者慢慢的一个个消费,顺序操作数据库,然后再返回下单成功与否。

    保持系统负载最高在某个点。
    sawyera
        2
    sawyera  
       2022-07-11 21:53:04 +08:00 via Android   1
    mq 的 consumer 一般是单线程跑 for 循环消费消息。所以不管有多少消息,消费端都按自己的消费速率一点一点处理,自然就削峰填谷了。
    MakHoCheung
        3
    MakHoCheung  
       2022-07-11 22:13:25 +08:00
    @sawyera 问下,多线程来消费信息的怎么保证消费的顺序
    JasonLaw
        4
    JasonLaw  
       2022-07-11 23:21:29 +08:00
    qping
        5
    qping  
       2022-07-12 09:08:58 +08:00
    @MakHoCheung #3 什么场景下要保证消费的顺序?
    cxe2v
        6
    cxe2v  
       2022-07-12 09:22:57 +08:00
    @MakHoCheung #3 再开一个 topic ,后续操作丢到新的 topic 下,然后下一步的 consumer 按照自己节奏来
    fatyoung
        7
    fatyoung  
       2022-07-12 09:53:13 +08:00
    @cxe2v 你这个做法不也是为了削峰吗? 下一步的 consumer 如果也是多实例多线程怎么保证顺序消费呢?
    cxe2v
        8
    cxe2v  
       2022-07-12 10:02:12 +08:00
    @fatyoung #7 要求消费顺序必然是第二步要在第一步后面,现在将消息进行了拆分,第二个 topic 里全是第二步,它们的第一步已经都是被操作过的,所以第二个 topic 的 consumer 就是多线程也不会影响这些已经完成第一步的消息的顺序
    fatyoung
        9
    fatyoung  
       2022-07-12 10:14:58 +08:00
    @cxe2v 哦哦我理解你的意思了。你说的消费顺序是指每个消息里面不同操作的顺序,我说的是序号 1 到 100 的消息按顺序发到服务器之后,消费者也要从序号 1 到 100 按顺序消费。
    cxe2v
        10
    cxe2v  
       2022-07-12 10:40:29 +08:00
    @fatyoung #9 额,消息队列不是先进先出吗?
    fatyoung
        11
    fatyoung  
       2022-07-12 11:09:01 +08:00
    @cxe2v 我的理解是:生产者的消息确实是顺序发送的,但是到了 broker 之后,存储可能不是顺序的,而且可能是存在多个分区的,同一个分区下消息确实是先进先出,多个分区就不能保证了。
    MakHoCheung
        12
    MakHoCheung  
       2022-07-12 13:12:54 +08:00
    @qping 处理有状态( a->b->c )的消息,比如网络延迟可能状态 c 的消息先被处理,b 的消息后被处理。我能想到就是丢掉 c 然后让生产者重发 c
    qping
        13
    qping  
       2022-07-12 13:17:23 +08:00
    @MakHoCheung #12 6 楼已经给了答案了,如果一定要有先后顺序那,就是 a 处理完了 再生成 b 的消息 b 处理完在生成 c 的消息

    或者说把 abc 视为一体,只有一个消息
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1025 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 18:27 PVG 02:27 LAX 10:27 JFK 13:27
    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