不同子系统间如何优雅地传递消息 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
请不要在回答技术问题时复制粘贴 AI 生成的内容
chanlk

不同子系统间如何优雅地传递消息

  •  
  •   chanlk Nov 23, 2021 3395 views
    This topic created in 1619 days ago, the information mentioned may be changed or developed.

    有四个子系统,每个子系统的用的技术都不一样

    1. 一个有十几个 dubbo 子模块的业务系统,模块间可以相互调用;
    2. 由五六个 C++、Go 流媒体模块组成的流媒体系统;
    3. 一个新的 IOT 系统,单体的,java 写的;
    4. 三四个传统 java 模块,单体的;

    几个系统之间经常需要相互调用或者传递消息,现在是通过 HTTP 调用的方式,很笨重,开发效率低,也容易出 BUG ; 有什么更好的方式吗?

    现在每个子系统的资源都是隔离的,如数据库,redis ,es 这些都是每个子系统独有的,不能相互访问;

    18 replies    2021-11-24 09:42:19 +08:00
    thevita
        1
    thevita  
       Nov 23, 2021
    需要解决 HTTP 不好维护的问题=rpc
    rekulas
        2
    rekulas  
       Nov 23, 2021
    rpc?
    Egfly
        3
    Egfly  
       Nov 23, 2021
    rpc+1
    0TSH60F7J2rVkg8t
        4
    0TSH60F7J2rVkg8t  
       Nov 23, 2021
    个人感觉,从技术上说,http 并不是不合适的选择,你这语言横跨很多个系统,必须要有一个通用的数据传输协议,至于搭载的载体,可以忽略不记。既然如此,http 就不是关键点,而是你使用的调用通讯协议。比如,如果是以 json 为数据传输载体,则不仅 http 可行,pipe ( win 系统下的),SharedMemory (同计算机上的),都可以实现。不同组件之间只关心 json ,至于怎么收发,则可以是另外一套接口来完成了。
    pi1ot
        5
    pi1ot  
       Nov 23, 2021
    我听起来 HTTP 就是比较恰当的选择
    lichao
        6
    lichao  
       Nov 23, 2021
    为什么不用 MQ ?
    chanlk
        7
    chanlk  
    OP
       Nov 23, 2021
    统一回复 rpc 的老哥们;
    rpc 在其中的一个子模块里用到了,里面十几个模块都可以相互调用;
    不同语言间的 rpc 我看了下不太好弄;
    而且在之前的架构设计上就把这几个子系统做得很独立,rpc 会耦合起来(也许是我 rpc 用得不太对);
    因为也有多地部署的需求,像流媒体系统这种;
    fuchaofather
        8
    fuchaofather  
       Nov 23, 2021
    RPC + MQ
    clf
        9
    clf  
       Nov 23, 2021
    RPC.

    或者弄个 MQ 作为总线一样的存在,通过监听 MQ 来实现相互调用(要处理重复调用、异步、消息丢失等问题)
    iam286
        10
    iam286  
       Nov 23, 2021
    用 RabbitMQ
    chanlk
        11
    chanlk  
    OP
       Nov 23, 2021
    其实好像也不是什么难题,用 MQ 就好,难的是推动各个模块的同事去一起做
    ipwx
        12
    ipwx  
       Nov 23, 2021
    http 其实挺香的。

    其次就是大一点的 mq 项目,不过那种项目其实更看重并发,写起来蛋疼。

    综上所述 http 其实挺香的。
    devswork
        13
    devswork  
       Nov 23, 2021
    我这各个系统之间用的就是 http+RabbitMQ 。各个系统都是独立的,资源也是独立的,需求天天改天天变,开发人员少,所以写不成微服务
    4BVL25L90W260T9U
        14
    4BVL25L90W260T9U  
       Nov 23, 2021
    swagger 用上了么?
    chanlk
        15
    chanlk  
    OP
       Nov 23, 2021
    @ospider 用了,接口多了没这种会疯的
    techphoebe
        16
    techphoebe  
       Nov 23, 2021
    grpc 不挺好的吗,各种语言都支持,定义一套 proto 文件,比 http 严谨,不容易出错,编译型语言哪个字段或传值类型错了编译时就能报错,还能 stream 调用
    dayeye2006199
        17
    dayeye2006199  
       Nov 24, 2021   2
    可以上 proto+grpc

    > 不同语言间的 rpc 我看了下不太好弄;
    这个是 proto 强项,定义文件编译各种语言

    > 而且在之前的架构设计上就把这几个子系统做得很独立,rpc 会耦合起来(也许是我 rpc 用得不太对);
    需要把交换的数据格式和暴露的接口定义出来;具体实现各个系统独立,不会耦合


    > 因为也有多地部署的需求,像流媒体系统这种;
    grpc 还支持流式传输;多地部署你需要配合服务网格或者 load balancer 这样的设施使用
    Itoktsnhc
        18
    Itoktsnhc  
       Nov 24, 2021
    emmm 我觉得 rpc 还是 http 这个可能不是重点?
    > 很笨重,开发效率低,也容易出 BUG
    rpc 还是 http 无非就是协议,感觉重点应该在各个不同系统之间 payload 的定义如何管理,保证各个系统都能遵守对应 payload 的 scheme ?
    About     Help     Advertise     Blog     API     FAQ     Solana     914 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 68ms UTC 22:43 PVG 06:43 LAX 15:43 JFK 18:43
    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