在具有TCP可靠性的UDP广播的答案之一中,用户提到了Spread消息传递API.我还遇到了一个叫做ØMQ的人.我对MPI也很熟悉.
所以,我的主要问题是:为什么我会选择一个而不是另一个呢?更具体地说,当有成熟的MPI实现时,为什么我会选择使用Spread或ØMQ?
MPI是紧密耦合的计算集群,具有快速,可靠的网络.Spread和ØMQ专为大型分布式系统而设计.如果您正在设计并行科学应用程序,请使用MPI,但如果您正在设计一个需要对故障和网络不稳定具有弹性的持久分布式系统,请使用其中一个.
MPI的容错设施非常有限; 大多数实现中的默认错误处理行为是系统范围的失败.此外,MPI的语义要求最终消耗所有发送的消息.这对于群集上的模拟很有意义,但对于分布式应用程序却没有.
我没有使用过任何这些库,但我可能会给出一些提示.
MPI是一种通信协议,而Spread和ØMQ是实际实现.
MPI来自"并行"编程,而Spread来自"分布式"编程.
因此,它实际上取决于您是否尝试构建并行系统或分布式系统.它们彼此相关,但隐含的内涵/目标是不同的.并行编程通过同时使用多台计算机来处理增加的计算能力.分布式编程处理可靠(一致,容错和高可用)的计算机组.
"可靠性"的概念与TCP略有不同.TCP的可靠性是"无论如何都将此数据包提供给最终程序".分布式编程的可靠性是"即使一些机器死机,整个系统仍然以一致的方式工作." 为了真正保证所有参与者都得到了消息,人们需要像2阶段提交或更快的替代方案之类的东西.