Frage

In einer der Antworten auf Broadcast wie UDP mit der Zuverlässigkeit von TCP, erwähnt ein Benutzer das Verbreiten Messaging-API.Ich bin auch auf einen namens gestoßen ØMQ.Ich habe auch eine gewisse Vertrautheit mit MPI.

Meine Hauptfrage lautet also:Warum sollte ich das eine dem anderen vorziehen?Genauer gesagt: Warum sollte ich Spread oder ØMQ verwenden, wenn es doch ausgereifte Implementierungen von MPI gibt?

War es hilfreich?

Lösung

MPI wurde für eng gekoppelte Rechencluster mit schnellen, zuverlässigen Netzwerken konzipiert.Spread und ØMQ sind für große verteilte Systeme konzipiert.Wenn Sie eine parallele wissenschaftliche Anwendung entwerfen, entscheiden Sie sich für MPI. Wenn Sie jedoch ein persistentes verteiltes System entwerfen, das gegenüber Fehlern und Netzwerkinstabilität widerstandsfähig sein muss, verwenden Sie eines der anderen.

MPI verfügt über sehr begrenzte Möglichkeiten zur Fehlertoleranz;Das standardmäßige Fehlerbehandlungsverhalten in den meisten Implementierungen ist ein systemweiter Fehler.Außerdem erfordert die Semantik von MPI, dass alle gesendeten Nachrichten irgendwann verbraucht werden.Dies ist für Simulationen auf einem Cluster durchaus sinnvoll, für eine verteilte Anwendung jedoch nicht.

Andere Tipps

Ich habe keine dieser Bibliotheken verwendet, kann aber möglicherweise einige Hinweise geben.

  1. MPI ist ein Kommunikationsprotokoll, während Spread und ØMQ tatsächliche Implementierungen sind.
  2. MPI stammt aus der „parallelen“ Programmierung, während Spread aus der „verteilten“ Programmierung stammt.

Es hängt also wirklich davon ab, ob Sie versuchen, ein paralleles System oder ein verteiltes System aufzubauen.Sie hängen miteinander zusammen, aber die impliziten Konnotationen/Ziele sind unterschiedlich.Bei der parallelen Programmierung geht es um die Steigerung der Rechenleistung durch die gleichzeitige Nutzung mehrerer Computer.Die verteilte Programmierung befasst sich mit einer zuverlässigen (konsistenten, fehlertoleranten und hochverfügbaren) Gruppe von Computern.

Das Konzept der „Zuverlässigkeit“ unterscheidet sich geringfügig von dem von TCP.Die Zuverlässigkeit von TCP lautet: "Geben Sie dieses Paket dem Endprogramm, egal was passiert". Die Zuverlässigkeit der verteilten Programmierung lautet: "Auch wenn einige Maschinen sterben, funktioniert das gesamte System weiterhin konsistent." Um wirklich zu garantieren, dass alle Teilnehmer die Nachricht bekommen, würde man so etwas wie brauchen 2-Phasen-Commit oder eine der schnelleren Alternativen.

Sie sprechen hier von sehr unterschiedlichen APIs, mit unterschiedlichen Vorstellungen über die Art der bereitgestellten Dienste und die Infrastruktur für jede von ihnen.Ich weiß nicht genug über MPI und Spread, um darauf antworten zu können, aber mit ZeroMQ kann ich ein wenig mehr helfen.

ZeroMQ ist eine einfache Messaging-Kommunikationsbibliothek.Es tut nichts anderes, als eine Nachricht an verschiedene Peers (einschließlich lokaler) zu senden, basierend auf einem eingeschränkten Satz allgemeiner Nachrichtenmuster (PUSH/PULL, REQUEST/REPLY, PUB/SUB usw.).Die Client-Verbindung, der Abruf und die grundlegende Überlastung werden streng nach diesen Mustern gehandhabt, den Rest müssen Sie selbst erledigen.

Obwohl es sehr eingeschränkt erscheint, ist dieses einfache Verhalten vor allem das, was Sie für die Kommunikationsschicht Ihrer Anwendung benötigen.Sie können damit sehr schnell von einem einfachen Prototyp, der sich ausschließlich im Speicher befindet, zu komplexeren verteilten Anwendungen in verschiedenen Umgebungen skalieren, indem Sie einfache Proxys und Gateways zwischen Knoten verwenden.Erwarten Sie jedoch nicht, dass es Knotenbereitstellung, Netzwerkerkennung oder Serverüberwachung durchführt.Sie müssen es selbst tun.

Kurz gesagt: Verwenden Sie Zeromq, wenn Sie eine Anwendung haben, die Sie vom einfachen Multithread-Prozess auf eine verteilte und variable Umgebung skalieren möchten oder die Sie schnell experimentieren und prototypisieren möchten und bei der keine Lösung zu Ihrem Modell zu passen scheint.Wenn Sie jedoch auf einen sehr großen Cluster skalieren möchten, müssen Sie mit einem gewissen Aufwand für die Bereitstellung und Überwachung Ihres Netzwerks rechnen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top