2008-08-30 173 views

回答

46

MPI采用快速可靠的网络设计紧密耦合的计算集群。 Spread和ØMQ专为大型分布式系统而设计。如果您正在设计一个并行科学应用程序,那么请使用MPI,但是如果您正在设计需要对故障和网络不稳定性进行恢复的持久分布式系统,请使用其中一个。

MPI的容错设施非常有限;大多数实现中的默认错误处理行为是全系统失败。而且,MPI的语义要求所有发送的消息最终都要消耗掉。这对于集群上的模拟有很大的意义,但对分布式应用程序来说却不是。

13

我还没有使用过任何这些库,但我可能会提供一些提示。

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

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

“可靠性”的概念与TCP略有不同。 TCP的可靠性是“无论发生什么,都要将这个数据包发送给最终的程序”。分布式编程的可靠性是“即使有些机器死机,整个系统仍然以一致的方式工作。”要真正保证所有参与者都能收到这条消息,就需要诸如2 phase commit或其中一种更快的选择。

5

您在这里处理的是非常不同的API,它们提供的服务类型和基础架构各不相同。我不太了解MPI和Spread为他们回答,但我可以在ZeroMQ上多一点帮助。

ZeroMQ是一个简单的消息通信库。除了基于一组受限制的常用消息传递模式(PUSH/PULL,REQUEST/REPLY,PUB/SUB等),它不会发送任何信息给不同的对等体(包括本地的对等体)。它严格根据这些模式处理客户端连接,检索和基本拥塞,您必须自己完成其余的工作。

虽然看起来非常有限,但这种简单的行为主要是您应用程序通信层所需的。它可以让您从一个简单的原型(所有内存)快速扩展到各种环境中更复杂的分布式应用程序,使用节点之间的简单代理和网关。但是,不要指望它执行节点部署,网络发现或服务器监控;你必须自己做。

简而言之,如果您有一个应用程序需要从简单的多线程进程扩展到分布式和可变环境,或者您希望快速进行实验和原型制作,并且没有解决方案似乎适合您的模型,请使用zeromq。但是,如果你想扩展到一个非常大的集群,预计不得不在网络的部署和监控方面付出一些努力。