9 Stimmen

Verteiltes Java-System

Ich beginne ein Informatikprojekt für mein Abschlussjahr und versuche, meine ersten Schritte zu planen. Für weitere Details können Sie das Projekt besuchen Seite .

Hintergrund: Da ich nur sehr wenig Erfahrung mit verteilten Systemen habe, habe ich mir grundsätzlich überlegt, wie ich eine solche Herausforderung angehen soll. Was ich mir ausgedacht habe, ist, dass das System wie folgt funktionieren sollte:

Der Client sendet eine Datei oder einen Satz von Dateien, die zu verarbeitenden Code enthalten. Dieser Code implementiert eine von mir geschriebene Schnittstelle für verteilte Algorithmen, eine bestimmte Klasse. Der Server erstellt aus dieser Klasse ein Objekt, das für den auszuführenden Algorithmus zuständig ist. Der Server gibt die Ergebnisse an den Client zurück. (Ich habe später über RMI gelesen und fand es sehr ähnlich).

Das Versenden von Dateien ist einfach - übliche Netzwerk-E/A. Das eigentliche Problem ist die Erstellung von Objekten und deren Verwendung als vordefinierte Schnittstelle zur Laufzeit.

Fragen:

  1. Die Herausforderung, die ich gestellt habe, klingt wie eine Reflexionsherausforderung, ist das richtig?
  2. Haben Sie erste Tipps, wie man das umsetzen kann?

Auf der Suche nach einigen Java-Technologien für verteilte Systeme bin ich auf RMI, TRMI, LINDA, CORBA, JINI und viele andere gestoßen. RMI klingt am verlockendsten, weil es dem, was ich als Lösung erkannt habe, sehr ähnlich ist, aber es ist auch alt.

  1. Mit welchen Bibliotheken kann ich diese Aufgabe Ihrer Meinung nach lösen? Denken Sie daran, dass ich Informatik studiere, daher werden meine Professoren nicht mit fertigen Lösungen zufrieden sein.
  2. RMI ist alt, gibt es bessere Lösungen?
  3. eine umfassende Anleitung zu TRMI?

Wenn Sie meine Logik für fehlerhaft halten, korrigieren Sie sie bitte.

Wenn Sie weitere Tipps zu diesem Thema haben, die Ihrer Meinung nach diskutiert werden sollten, können Sie mich gerne kontaktieren.

5voto

Andreas Dolk Punkte 110776

Es gibt nicht genügend Informationen für eine Empfehlung von Bibliotheken oder Technologien. Daher möchte ich mich auf den Teil "weitere Tipps" Ihrer Frage konzentrieren ;)

  • Server sendet eine Datei - Normalerweise ist es ein Kunde die eine Anfrage an eine Server und der Server wird eine Antwort erstellen. Sie sollten dieser Konvention folgen.
  • Datei muss ausgeführt werden - Wir können nicht eine Datei . Eine Datei kann ein Skript oder einen Binärcode enthalten, der von einem Interpreter oder Computer ausgeführt werden kann. Der Grund für die Wählerschaft: Sie müssen etwas mit dem Inhalt der Datei tun (parsen, kompilieren, interpretieren, verlinken, ...)
  • Dateien implementieren eine [...] Schnittstelle - siehe oben, die Dateien nichts umsetzen.
  • Der Client wird die Schnittstelle - Ein Schnittstelle kann nicht ausgeführt werden.
  • Rückgabe der Ergebnisse des Algorithmus an den Server - Wie bereits erwähnt, handelt es sich in der Regel um eine Kunde die die Datei ("request") an eine Server . Der Server würde dann die Datei nehmen, einige Berechnungen auf der Grundlage des Dateiinhalts durchführen und ein Ergebnis ("Antwort") an den Client zurückschicken.

Aufruf von Fernmethoden

Mit RMI haben wir normalerweise folgendes Szenario: A Kunde möchte eine Fernverfahren . Der Client kennt die Schnittstelle und die Serveradresse. Der Server hat eine Implementierung für diese Schnittstelle. Nun kontaktiert der Client den Server und ruft die Methode auf diesem Server auf.

Bei Ihrem Projekt sieht es etwas anders aus: Ich denke, die Kunde hat eine Implementierung eines Algorithmus (Java-Quelldatei oder kompilierte Klassendatei) und möchte diese an einen oder mehrere Server senden. Der Server soll die Datei verarbeiten, ausführen. den Algorithmus für eine Eingabe (die slice ) und geben das Ergebnis zurück.

RMI mayo ein Kandidat für die Dateiübertragung, aber nicht für den (Algorithmus-)Methodenaufruf sein. Eine Remote-Methode könnte so aussehen (vorausgesetzt, wir senden eine Java-Quelldatei):

public Result process(String javaSource, Data data);

2voto

Enno Shioji Punkte 25942

Sie könnten verwenden dieses Beispiel und senden Sie Klassendateien zur Ausführung (Sie können die Klassendateien auf der Festplatte speichern und sie dann mit dem URLClassLoader laden. Wenn Sie nicht auf die Festplatte schreiben wollen, hat McDowell eine Anregung ).

Was die Kommunikation betrifft, so gibt es eine Vielzahl von Möglichkeiten. Man könnte darüber nachdenken, ob man die Nachrichtenübermittlung synchron oder asynchron gestalten möchte. Gegen synchrone Nachrichtenübermittlung (wie RMI) ist nichts einzuwenden, aber vielleicht sollten Sie sich auch nach asynchronen Lösungen umsehen, da diese in letzter Zeit als "heiß" gelten. Oder Sie könnten einfach Ihr eigenes Protokoll auf HTTP oder etwas Ähnlichem aufbauen.

Eine lustige Übung wäre es, die Daten auf die Knoten zu verteilen und den Algorithmus gegen diese verteilten Daten auszuführen und dann die Ergebnisse zu kombinieren. In diesem Fall wird der Benutzer zwei Algorithmen angeben. Einen, der Daten generiert, und einen, der agg

1voto

Bitte schauen Sie sich auch SOAP-basierte Webdienste an. MTOM bietet eine Möglichkeit, binäre Inhalte effizienter zu übertragen.

Danke.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X