假设有人想编写一个应用程序,其中不同的进程之间需要通信。这些通信将通过发送字符串和/或numpy数组来完成。
在选择OpenMPI和RabbitMQ等工具时,需要考虑哪些因素?
在选择OpenMPI和RabbitMQ等工具时,需要考虑哪些因素?
这类问题没有单一的正确答案,它取决于许多不同的因素。例如:
ZeroMQ
之类的东西可能是最快的。如果在一组主机上运行,则取决于可用的互连方式。例如,OpenMPI 可以利用 InfiniBand/MiryNet 链接。几个月前我遇到了这种情况,我决定使用AMQP与RabbitMQ使用主题交换,另外还使用memcache处理大型对象。
AMQP消息都是字符串,以JSON对象格式传递,因此很容易添加消息属性(如重试次数)并重新发布。 JSON对象是JSON的子集,对应于Python字典。例如{"recordid": "272727"}是具有一个属性的JSON对象。我可以选择只使用Python来锁定消息队列,但这样做会限制我们只能使用Python。
大型对象不会通过AMQP路由,而是进入memcache,供另一个进程检索。您也可以使用Redis或Tokyo Tyrant来完成此工作。想法是我们不希望短消息排在大型对象后面。
最终,我的Python进程最终同时使用AMQP和ZeroMQ处理架构的两个不同方面。您可能会发现,使用OpenMPI和AMQP对于不同类型的工作都有意义。
在我的情况下,监管进程永远运行,启动整个工作程序,除非它们死亡或挂起,在这种情况下,监管人员将重新启动它们。工作以消息形式通过AMQP不断流动,每个进程只处理工作的一步,因此当我们确定瓶颈时,我们可以拥有多个进程实例,可能在单独的机器上,以消除瓶颈。在我的情况下,我有15个进程实例,其中一个有4个,另外还有大约8个单个实例。
OpenMPI
相比RabbitMQ
有什么优势吗? - user3262424