分布式子系统间的耦合性问题?

风象南 发布于 2016/04/12 17:08
阅读 412
收藏 0

开源之夏第三届火热来袭,高校学生参与赢万元奖金!>>>

场景:

    假设现在有三台机器分别部署了子系统A、子系统B、子系统C,子系统A中需要调用子系统B,子系统C又需要调用子系统A,这种情况下如果子系统非常多且调用关系负责的时候,采用RMI或hessian之类的技术进行通信调用会使子系统之间的耦合性较高,不易管理维护。

问题:

    有什么好的解决方案能让子系统之间解耦?

加载中
1
beyondforever68
beyondforever68
使用总线交互?activemq,qpid,rabbitmq这类
0
嘚儿个没
嘚儿个没

如果是企业级的应用或者传统基于PC的应用,就采用消息中间件,@beyondforever68提到的几个都可以。相当于在多个相关联的子系统间引入一个中介,调用者只需要将调用请求作为一个消息投递到消息中间件就可以,无需明确知道被调用者的物理位置等属性,被调用者通过监听消息中间件的相关主题/或队列,获取调用者提交的参数,之后处理并将结果写回消息中间件,调用者再去取就行。只要合理设计消息中间件中的主题/队列,很容易完成你说的功能。

如果是嵌入式应用,则要根据节点资源能力选取解决方案,在资源受限的环境中使用DDS或者MQTT-SN比较合理,前者类似于一个分布式的消息分发机构,每个节点在加入网络时向网络中广播自己的属性(主要是唯一标识等信息),调用者只需将对被调用者的请求提交给DDS,由DDS负责路由转发相应的调用,结果返回也一样,从而避免直接绑定节点的物理地址等信息;后者原理和DDS类似,具体细节我不是很清楚。另外在条件允许的情况下还可以采用MQTT协议,通过一个集中的消息中间件将嵌入式的设备接入。

0
大王来巡山
大王来巡山

1,如果同步调用RPC

2,如果异步调用 则消息队列更适合你

0
zigzagroad
zigzagroad
ESB,不过太重了
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部
返回顶部
顶部