
有四个子系统,每个子系统的用的技术都不一样
几个系统之间经常需要相互调用或者传递消息,现在是通过 HTTP 调用的方式,很笨重,开发效率低,也容易出 BUG ; 有什么更好的方式吗?
现在每个子系统的资源都是隔离的,如数据库,redis ,es 这些都是每个子系统独有的,不能相互访问;
1 thevita Nov 23, 2021 需要解决 HTTP 不好维护的问题=rpc |
2 rekulas Nov 23, 2021 rpc? |
3 Egfly Nov 23, 2021 rpc+1 |
4 0TSH60F7J2rVkg8t Nov 23, 2021 个人感觉,从技术上说,http 并不是不合适的选择,你这语言横跨很多个系统,必须要有一个通用的数据传输协议,至于搭载的载体,可以忽略不记。既然如此,http 就不是关键点,而是你使用的调用通讯协议。比如,如果是以 json 为数据传输载体,则不仅 http 可行,pipe ( win 系统下的),SharedMemory (同计算机上的),都可以实现。不同组件之间只关心 json ,至于怎么收发,则可以是另外一套接口来完成了。 |
5 pi1ot Nov 23, 2021 我听起来 HTTP 就是比较恰当的选择 |
6 lichao Nov 23, 2021 为什么不用 MQ ? |
7 chanlk OP 统一回复 rpc 的老哥们; rpc 在其中的一个子模块里用到了,里面十几个模块都可以相互调用; 不同语言间的 rpc 我看了下不太好弄; 而且在之前的架构设计上就把这几个子系统做得很独立,rpc 会耦合起来(也许是我 rpc 用得不太对); 因为也有多地部署的需求,像流媒体系统这种; |
8 fuchaofather Nov 23, 2021 RPC + MQ |
9 clf Nov 23, 2021 RPC. 或者弄个 MQ 作为总线一样的存在,通过监听 MQ 来实现相互调用(要处理重复调用、异步、消息丢失等问题) |
10 iam286 Nov 23, 2021 用 RabbitMQ |
11 chanlk OP 其实好像也不是什么难题,用 MQ 就好,难的是推动各个模块的同事去一起做 |
12 ipwx Nov 23, 2021 http 其实挺香的。 其次就是大一点的 mq 项目,不过那种项目其实更看重并发,写起来蛋疼。 综上所述 http 其实挺香的。 |
13 devswork Nov 23, 2021 我这各个系统之间用的就是 http+RabbitMQ 。各个系统都是独立的,资源也是独立的,需求天天改天天变,开发人员少,所以写不成微服务 |
14 4BVL25L90W260T9U Nov 23, 2021 swagger 用上了么? |
16 techphoebe Nov 23, 2021 grpc 不挺好的吗,各种语言都支持,定义一套 proto 文件,比 http 严谨,不容易出错,编译型语言哪个字段或传值类型错了编译时就能报错,还能 stream 调用 |
17 dayeye2006199 Nov 24, 2021 可以上 proto+grpc > 不同语言间的 rpc 我看了下不太好弄; 这个是 proto 强项,定义文件编译各种语言 > 而且在之前的架构设计上就把这几个子系统做得很独立,rpc 会耦合起来(也许是我 rpc 用得不太对); 需要把交换的数据格式和暴露的接口定义出来;具体实现各个系统独立,不会耦合 > 因为也有多地部署的需求,像流媒体系统这种; grpc 还支持流式传输;多地部署你需要配合服务网格或者 load balancer 这样的设施使用 |
18 Itoktsnhc Nov 24, 2021 emmm 我觉得 rpc 还是 http 这个可能不是重点? > 很笨重,开发效率低,也容易出 BUG rpc 还是 http 无非就是协议,感觉重点应该在各个不同系统之间 payload 的定义如何管理,保证各个系统都能遵守对应 payload 的 scheme ? |