• 请不要在回答技术问题时复制粘贴 AI 生成的内容
chanlk
V2EX  ›  程序员

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

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

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

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

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

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

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


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