当前位置:  开发笔记 > 大数据 > 正文

消息总线与组播

如何解决《消息总线与组播》经验,为你挑选了1个好方法。

我正在开发一个由几个模块组成的应用程序,要求它们彼此共享信息。示例:发布/订阅场景,其中模块发布一些信息(例如状态变量),并且对特定信息感兴趣的模块将其获取。或者是一个请求/答复场景,感兴趣的模块会明确询问有关信息并得到答复。

我一直在研究不同的消息总线实现,即D-busØMQRabbitMQQPID(后两者基于AMQP)。但是后来有人指出,为什么不尝试使用一些复杂而繁重的消息总线实现,我为什么不简单地使用多播来解决问题。

缺乏经验来查看多播是否真的可以解决我的问题,并了解这两种解决方案的优缺点,因此,我恳请专家帮助我。非常感谢。



1> Scott A..:

我有在大型,大量生产环境中同时使用消息总线和多播的经验,并与几位经验丰富的网络工程师就这些问题进行了交谈,我可以说,除非广播到非常多的广播电台,否则应避免像瘟疫一样多播。节点(数百个)。

如果要使用多播,则必须了解它是不可靠的协议。邮件可能会丢失,可以重复,等等。您需要花费大量时间来在多播之上获取可靠性协议(重试,重复检测,重新发送),以使其有用。有一个很好的轶事,关于我正在尝试寻找多播命令机器人坦克的陆军测试标准...基本上,当您向一系列坦克发送“向右转90度,向右转90度,开火”时,其中一些仅收到右转消息,而其他一些则收到3,这是混乱的秘诀。

根据您需要共享的信息种类,有几种选择。

如果他们共享配置信息,请查看类似于Zookeeper的信息。它可靠,轻巧且易于使用。共享状态的最新值始终可用并保持不变。使用消息总线,您仍然需要具有重新发送协议,以防模块由于故障而错过上一个配置消息。

关于消息总线,它们可能很复杂。但是,我不必将ZeroMQ放在该类别中。它可以模拟消息总线,但是更多的是点对点机制。我没有在生产中使用它,但是我进行的研究和原型制作非常有利。

另一个选择可能是分布式数据网格,例如Oracle Coherence,GridGain,GigaSpaces等。同样,这是另一个要安装和维护的应用程序,因此您的复杂性增加了,但是数据网格有很多用途。

另一个MQ选项是HornetMQ。我没有使用过它(我们内部使用了两个商业的MQ,即Sonic和MQ系列),但是我看到了一些有利的比较。

D-Bus似乎已针对单台机器上的通信进行了优化,如果您正在进行对等,群集或其他类似操作,则FAQ建议您在其他地方查找。警告:我从未使用过D-Bus,所以我基本上是在反省我刚刚阅读的信息。

推荐阅读
罗文彬2502852027
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有