在Broadcast like UDP with the Reliability of TCP的一个回答中,有用户提到了Spread消息传递API。我也遇到了一个叫做ØMQ的API。我对MPI也有一些了解。
因此,我的主要问题是:为什么我会选择其中之一?更具体地说,当已经有成熟的MPI实现时,为什么我要选择使用Spread或ØMQ?
因此,我的主要问题是:为什么我会选择其中之一?更具体地说,当已经有成熟的MPI实现时,为什么我要选择使用Spread或ØMQ?
MPI是为紧密耦合的计算集群和快速、可靠网络而设计的。 Spread和ØMQ是为大规模分布式系统设计的。如果您正在设计并行科学应用程序,请选择MPI;但如果您正在设计需要对故障和网络不稳定性具有弹性的持久分布式系统,则使用其他技术。
MPI的容错能力非常有限,大多数实现中的默认错误处理行为是系统范围内的失败。此外,MPI的语义要求所有发送的消息最终都被消费。这对于集群上的仿真非常有意义,但对于分布式应用程序来说则不然。
我没有使用过这些库,但我可能能给一些提示。
因此,它取决于您是要构建并行系统还是分布式系统。它们彼此相关,但隐含的内涵/目标是不同的。并行编程处理通过同时使用多台计算机来增加计算能力。分布式编程处理可靠(一致、容错和高可用)的计算机组。
“可靠性”的概念与TCP略有不同。TCP的可靠性是“无论如何都要将此数据包传递给最终程序。”分布式编程的可靠性是“即使某些机器出现故障,整个系统仍然以一致的方式继续工作。”为了确保所有参与者都收到了消息,需要像2阶段提交或其中较快的替代方案之一。