在其中一个答案中 像 UDP 一样进行广播,同时具有 TCP 的可靠性, ,用户提到 传播 消息传递 API。我还遇到过一个叫 ØMQ. 。我也有一定的了解 MPI.

所以,我的主要问题是:为什么我会选择其中之一而不是另一个?更具体地说,当有成熟的 MPI 实现时,为什么我会选择使用 Spread 或 ØMQ?

有帮助吗?

解决方案

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

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

其他提示

我没有使用过这些库,但我也许可以给出一些提示。

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

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

“可靠性”的概念与TCP略有不同。TCP的可靠性是“无论如何将此数据包授予最终程序。”分布式编程的可靠性是“即使某些机器死亡,整个系统仍在继续以一致的方式工作。”为了确保所有参与者收到信息,一个人都需要类似的东西 2阶段提交 或更快的替代方案之一。

您在这里处理的是非常不同的 API,对于所提供的服务类型和每个 API 的基础设施有不同的概念。我对 MPI 和 Spread 的了解不够,无法回答它们,但我可以使用 ZeroMQ 提供更多帮助。

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

尽管看起来非常受限,但这种简单的行为主要是应用程序通信层所需要的。它允许您使用节点之间的简单代理和网关,从全部位于内存中的简单原型快速扩展到各种环境中更复杂的分布式应用程序。但是,不要指望它能够进行节点部署、网络发现或服务器监控;你必须自己做。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top