Spread vs MPI vs zeromq?

47
Broadcast like UDP with the Reliability of TCP的一个回答中,有用户提到了Spread消息传递API。我也遇到了一个叫做ØMQ的API。我对MPI也有一些了解。
因此,我的主要问题是:为什么我会选择其中之一?更具体地说,当已经有成熟的MPI实现时,为什么我要选择使用Spread或ØMQ?
3个回答

57

MPI是为紧密耦合的计算集群和快速、可靠网络而设计的。 Spread和ØMQ是为大规模分布式系统设计的。如果您正在设计并行科学应用程序,请选择MPI;但如果您正在设计需要对故障和网络不稳定性具有弹性的持久分布式系统,则使用其他技术。

MPI的容错能力非常有限,大多数实现中的默认错误处理行为是系统范围内的失败。此外,MPI的语义要求所有发送的消息最终都被消费。这对于集群上的仿真非常有意义,但对于分布式应用程序来说则不然。


17

我没有使用过这些库,但我可能能给一些提示。

  1. MPI是一种通信协议,而Spread和ØMQ是实际的实现。
  2. MPI来自“并行”编程,而Spread来自“分布式”编程。

因此,它取决于您是要构建并行系统还是分布式系统。它们彼此相关,但隐含的内涵/目标是不同的。并行编程处理通过同时使用多台计算机来增加计算能力。分布式编程处理可靠(一致、容错和高可用)的计算机组。

“可靠性”的概念与TCP略有不同。TCP的可靠性是“无论如何都要将此数据包传递给最终程序。”分布式编程的可靠性是“即使某些机器出现故障,整个系统仍然以一致的方式继续工作。”为了确保所有参与者都收到了消息,需要像2阶段提交或其中较快的替代方案之一。


4
您正在处理非常不同的API,每个API都有不同的服务提供和基础架构概念。对于MPI和Spread,我了解得不够多,但是我可以在ZeroMQ方面提供更多帮助。
ZeroMQ是一个简单的消息通信库。它除了根据一组受限制的公共消息模式(PUSH/PULL、REQUEST/REPLY、PUB/SUB等)向不同的同伴(包括本地同行)发送消息外,什么都不做。它严格基于这些模式处理客户端连接、检索和基本拥塞,而你必须自己完成其他工作。
虽然看起来非常受限制,但这种简单的行为大多是您的应用程序通信层所需的。它让您能够从简单的原型快速扩展到各种环境中的更复杂的分布式应用程序,使用节点之间的简单代理和网关,全部在内存中实现。但是,不要指望它能够进行节点部署、网络发现或服务器监控;这一切都要由您自己完成。
简而言之,如果您有一个应用程序,希望将其从简单的多线程过程扩展到分布和可变环境,或者希望快速实验和原型设计,并且没有任何解决方案符合您的模型,那么就使用ZeroMQ。但如果您想扩展到非常大的集群,则需要在网络部署和监控方面付出一些努力。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接