2008-08-30 169 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。但是,如果你想擴展到一個非常大的集羣,預計不得不在網絡的部署和監控方面付出一些努力。