多点部署的系统下高并发的数据收集汇总,怎么设计? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
rizon

多点部署的系统下高并发的数据收集汇总,怎么设计?

  •  
  •   rizon
    othorizon 2019 年 5 月 21 日 1373 次点击
    这是一个创建于 2530 天前的主题,其中的信息可能已经有所发展或是发生改变。

    A 服务高并发的上报数据,
    B 服务是多点部署的,B 服务要接收 A 服务的上报数据,并对上报的数据及时的汇总进行后需要的监控报警操作。

    这个场景该怎么设计好,求大佬们支招?

    抛砖引玉:
    A 服务通过 MQ 上报数据,
    B 服务消费数据,在消费到一条数据后存储到 redis 中,然后触发一个异步的汇总线程任务。
    异步汇总线程任务: 申请一个 redis 锁(确保只有一个任务在做汇总操作),拉取所有的明细数据,汇总后将汇总结果存储到 redis 中(如果已经存在一个汇总结果,则合并结果),删除明细数据,释放 redis 锁。


    另外问一个 MQ 的问题:
    我再 MQ 中通过 fanout Exchange 模式,将一个消息发送到两个队列,
    然后每个队列中各有 5 个消费者,
    那么是不是每个队列只有一个消费者可以消费到数据?
    就是说实现了类似 kafka 中对消费者分组的那种效果:每组消费者都可以消费到数据,每组消费者中只有一个消费者可以消费到数据。

    2 条回复    2019-05-21 16:50:42 +08:00
    opengps
        1
    opengps  
       2019 年 5 月 21 日 via Android
    A 尽量合并上报
    B 扩展负载均衡,扩展队列保证数据快速收取,然后再找一组机器从队列取数识别报警
    xkeyideal
        2
    xkeyideal  
       2019 年 5 月 21 日
    刚好有个类似的场景,目前我的项目中 B 是单点,同样也考虑过 B 是多点部署的问题,下面是我的解决思路:

    1. 需要引进一个 C,C 可以单点部署,C 专门用来接收 MQ 中 A 发送的消息
    2. C 需要进行消息的路由分发工作,即提前对同类消息进行分片操作,B 的单点机器只处理分片后的某类消息
    3. 上述方案,本质上还是将 B 变成单点,避免消息汇总的操作,单点即不安全,那么可以使用 raft 协议将单点变成集群
    4. 随着数据量的增加,分片的量如果不够多,那么随着类别的增多,也必然对 B 造成压力
    5. 解决 4 的问题方案有两种,直接用另外更多的机器把全套系统搭起来,然后将负载切过来,原来的机器下线;采用 redis 的 slot 扩容方案
    关于     帮助文档     自助推广系统     博客     AP     FAQ     Solana     897 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 51ms UTC 21:45 PVG 05:45 LAX 14:45 JFK 17:45
    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