2008-08-30 12 views

Antwort

46

MPI wurde eng gekoppelte Rechencluster mit schnellen, zuverlässigen Netzwerken entwickelt. Spread und ØMQ sind für große verteilte Systeme ausgelegt. Wenn Sie eine parallele wissenschaftliche Anwendung entwickeln, verwenden Sie MPI. Wenn Sie jedoch ein persistentes verteiltes System entwickeln, das für Fehler und Netzwerkinstabilität widerstandsfähig sein muss, verwenden Sie einen der anderen.

MPI hat sehr begrenzte Möglichkeiten für Fehlertoleranz; Das Standardverhalten bei der Fehlerbehandlung in den meisten Implementierungen ist ein systemweiter Fehler. Außerdem erfordert die Semantik von MPI, dass alle gesendeten Nachrichten schließlich verbraucht werden. Dies ist für Simulationen in einem Cluster sehr sinnvoll, nicht jedoch für eine verteilte Anwendung.

13

Ich habe keine dieser Bibliotheken benutzt, aber vielleicht kann ich ein paar Hinweise geben.

  1. MPI ist ein Kommunikationsprotokoll, während Spread und ØMQ eigentliche Implementierung sind.
  2. MPI kommt von "paralleler" Programmierung, während Spread von "verteilter" Programmierung kommt.

Also hängt es wirklich davon ab, ob Sie versuchen, ein paralleles System oder ein verteiltes System zu bauen. Sie sind miteinander verwandt, aber die implizierten Konnotationen/Ziele sind unterschiedlich. Die parallele Programmierung befasst sich mit der Erhöhung der Rechenleistung durch die gleichzeitige Verwendung mehrerer Computer. Die verteilte Programmierung befasst sich mit einer zuverlässigen (konsistenten, fehlertoleranten und hoch verfügbaren) Gruppe von Computern.

Das Konzept der "Zuverlässigkeit" unterscheidet sich geringfügig von dem von TCP. Die Zuverlässigkeit von TCP ist "Geben Sie dieses Paket dem Endprogramm, egal was." Die Zuverlässigkeit der verteilten Programmierung ist "selbst wenn einige Maschinen sterben, das System als Ganzes weiterhin konsistent arbeitet." Um wirklich zu garantieren, dass alle Teilnehmer die Nachricht erhalten, benötigt man etwas wie 2 phase commit oder eine der schnelleren Alternativen.

5

Sie richten sich hier an sehr unterschiedliche APIs mit unterschiedlichen Vorstellungen über die Art der bereitgestellten Dienste und die Infrastruktur für jeden von ihnen. Ich weiß nicht genug über MPI und Spread, um für sie zu antworten, aber ich kann ein wenig mehr mit ZeroMQ helfen.

ZeroMQ ist eine einfache Messaging-Kommunikationsbibliothek. Es sendet nichts anderes als eine Nachricht an verschiedene Peers (einschließlich lokale) basierend auf einem eingeschränkten Satz von allgemeinen Messaging-Mustern (PUSH/PULL, REQUEST/REPLY, PUB/SUB usw.). Es behandelt Client-Verbindung, Abruf und grundlegende Engpässe streng nach diesen Mustern und Sie müssen den Rest selbst erledigen.

Dieses einfache Verhalten ist zwar sehr eingeschränkt, ist jedoch größtenteils das, was Sie für die Kommunikationsebene Ihrer Anwendung benötigen. Sie können damit sehr schnell skalieren, von einem einfachen Prototyp im Speicher bis hin zu komplexeren verteilten Anwendungen in verschiedenen Umgebungen mit einfachen Proxys und Gateways zwischen Knoten. Erwarten Sie jedoch nicht, dass Knotenbereitstellung, Netzwerkerkennung oder Serverüberwachung durchgeführt werden. Sie müssen es selbst tun.

Kurz gesagt, verwendet zeromq, wenn Sie eine Anwendung, die Sie von dem einfachen Multi-Thread-Prozess auf eine verteilte und variable Umgebung skalieren mögen, oder dass Sie schnell zu experimentieren und Prototypen und keine Lösungen scheinen mit Ihrem Modell zu passen. Erwarten Sie jedoch, dass Sie sich bei der Bereitstellung und Überwachung Ihres Netzwerks etwas anstrengen müssen, wenn Sie auf einen sehr großen Cluster skalieren möchten.