【问题标题】:Spread vs MPI vs zeromq?Spread vs MPI vs zeromq?
【发布时间】:2010-09-07 07:43:27
【问题描述】:
【问题讨论】:
标签:
api
networking
messaging
distributed
cluster-computing
【解决方案1】:
MPI 设计为具有快速、可靠网络的紧密耦合计算集群。 Spread 和 ØMQ 是为大型分布式系统设计的。如果您正在设计一个并行的科学应用程序,请使用 MPI,但如果您正在设计一个需要对故障和网络不稳定具有弹性的持久分布式系统,请使用其他系统之一。
MPI 的容错功能非常有限;大多数实现中的默认错误处理行为是系统范围的失败。此外,MPI 的语义要求最终使用所有发送的消息。这对于集群上的模拟非常有意义,但对于分布式应用程序则不然。
【解决方案2】:
我没有使用过这些库,但我可以提供一些提示。
- MPI 是一种通信协议,而 Spread 和 ØMQ 是实际实现。
- MPI 来自“并行”编程,而 Spread 来自“分布式”编程。
因此,这实际上取决于您是尝试构建并行系统还是分布式系统。它们彼此相关,但隐含的内涵/目标不同。并行编程通过同时使用多台计算机来处理增加的计算能力。分布式编程处理可靠(一致、容错和高可用性)的计算机组。
“可靠性”的概念与 TCP 的概念略有不同。 TCP 的可靠性是“无论如何都要把这个数据包交给最终程序”。分布式编程的可靠性是“即使某些机器死了,系统作为一个整体继续以一致的方式工作”。要真正保证所有参与者都能收到消息,需要2 phase commit 之类的东西或更快的替代方案之一。
【解决方案3】:
您在这里处理非常不同的 API,对所提供的服务类型和每个 API 的基础架构有不同的概念。我对 MPI 和 Spread 了解不多,无法为他们解答,但我可以通过 ZeroMQ 提供更多帮助。
ZeroMQ 是一个简单的消息通信库。它只是根据一组受限的通用消息传递模式(PUSH/PULL、REQUEST/REPLY、PUB/SUB 等)向不同的对等点(包括本地对等点)发送消息。它严格根据这些模式处理客户端连接、检索和基本拥塞,剩下的事情你必须自己做。
虽然看起来很受限制,但这种简单的行为主要是您应用程序的通信层所需要的。它使您可以非常快速地从一个简单的原型(全部在内存中)扩展到各种环境中的更复杂的分布式应用程序,在节点之间使用简单的代理和网关。但是,不要指望它会做节点部署、网络发现或服务器监控;你必须自己做。
简而言之,如果您有一个应用程序想要从简单的多线程进程扩展到分布式和可变环境,或者您想要快速试验和原型化并且似乎没有适合您的模型的解决方案,请使用 zeromq。但是,如果您想扩展到非常大的集群,则需要在网络的部署和监控上付出一些努力。