Sie sind hier : sebastian1012.bplaced.net/ homepage-neu / informationen / Verteilte_Programmierung_mit_RMI.php

12 Verteilte Programmierung mit RMIZur nächsten Überschrift

12 Verteilte Programmierung mit RMIZur nächsten Überschrift

»Ich denke, dass es einen Weltmarkt für vielleicht fünf Computer gibt.«
– Thomas Watson (1874–1956), zu seiner Zeit Vorsitzender von IBM


Rheinwerk Computing - Zum Seitenanfang

12.1 Entfernte Objekte und MethodenZur nächsten ÜberschriftZur vorigen Überschrift

Bei Unterprogrammaufrufen nutzen wir die Intelligenz der Methode, die zu gegebenen Eingabeparametern Ausgangswerte liefert oder einen Systemzustand verändert. Die Methode ist in diesem Fall Anbieter einer ganz speziellen Dienstleistung. Wenn wir zu einer Eingabeanfrage eine Antwort bekommen wollen, die Implementierung dieser Intelligenz aber auf einer anderen Maschine liegt, handelt es sich um entfernte Methodenaufrufe.

Wie lässt sich so etwas elegant implementieren? Der klassische Weg führt über Client-Server-Systeme. Der Client formuliert eine Anfrage, die vom Server verstanden und interpretiert wird. So sieht dies etwa in einfacher Form mit einem Datenbank-Server aus. Der Client möchte zum Beispiel den Umsatz einer Disko herausfinden. Er schickt dann eine Anfrage, und das Ergebnis wird zurückgeschickt und ausgewertet. Diese Kommunikation zwischen verteilten Prozessen muss aber aufwändig bei Client-Server-Systemen implementiert werden. Wir müssen also Parameter und Rückgabewerte verpacken, einen horchenden Server einrichten, vielleicht noch HTTP-Tunnel anlegen und so weiter.

Wünschenswert ist eine Sicht auf entfernte Dienste wie auf Methoden innerhalb einer Laufzeitumgebung. Ideal wäre es, wenn ein Methodenaufruf auf einen Server so aussähe, als ob er eine lokale Methode wäre.


Rheinwerk Computing - Zum Seitenanfang

12.1.1 Stellvertreter helfen bei entfernten MethodenaufrufenZur nächsten ÜberschriftZur vorigen Überschrift

Birrel und Nelson haben schon 1984 ein Modell vorgestellt, das entfernte Server-Methoden wie lokale Methoden aussehen lässt. Die Verbindung von Client und Server realisieren sogenannte Stellvertreterobjekte (engl. proxies). Diese existieren auf der Client- und auf der Serverseite. Die Stellvertretermethoden verdecken den tatsächlichen Übertragungsvorgang, sodass der Client demnach nicht mit einem eigenen Protokoll mit dem Server kommuniziert, sondern eine Methode aufruft, die so aussieht wie eine Servermethode. In Wirklichkeit nimmt die Stellvertretermethode nur die Parameter, verpackt sie in eine Serveranfrage und schickt sie weg.

Wir wollen uns dies anhand eines Beispiels klarmachen. Nehmen wir an, der Client möchte die Entschlüsselungsmethode String decrypt(String) nutzen, die in Wirklichkeit auf einem ganz anderen Rechner angeboten wird, einem, der richtig Power hat, um die hochkomplizierte mathematische Operation auszuführen. Da wir aber die Vorgabe haben, eine entfernte Methode so aussehen zu lassen wie eine lokale, wird nun decrypt() wie gewohnt aufgerufen:

System.out.println( decrypt( "/&sa#jkshf=0&safhq34" ) );

Der Stellvertreter auf der Clientseite übernimmt nun das Protokoll, kümmert sich also um das Verpacken der zu transportierenden Werte, die Verschlüsselung, Authentifizierung, Kompression und um alles, was noch so gewünscht sein kann. Kurz skizziert:

String decrypt( String s )
{
// Verbindung aufbauen (etwa über Sockets)
// String s zum Server schicken (write(s))
// Auf das Ergebnis vom Server warten (result = read())
// return result;
}

Intern steckt das klassische Client-Server-Konzept dahinter, das wir schon von Sockets her kennen. Der Client mit dem Methodenaufruf initiiert die Anfrage, und der Server wartet, bis ein williger Kunde eintrifft. Der Server nimmt die Anfragen des Clients entgegen, entnimmt dem Anforderungspaket die Daten und ruft die lokale Methode auf, die auf dem Server implementiert sein kann:

String decrypt( String s )
{
return entschlüsselter String;
}

Zusätzlich kann es auf der Serverseite auch einen Stellvertreter geben, doch reicht auch ein Server aus, der zunächst auf eingehende Anfragen wartet und dann die entsprechenden Methoden ohne eigenen Stellvertreter aufruft.

Abbildung

An der Aufrufsyntax ist nicht abzulesen, ob der Client an einen Stellvertreter geht, der die Daten weiterleitet, und der Server merkt nicht, dass er in Wirklichkeit nicht mit lokalen Daten gefüttert wird.


Rheinwerk Computing - Zum Seitenanfang

12.1.2 Standards für entfernte ObjekteZur vorigen Überschrift

Rund um diese Thematik haben sich in den letzten zwanzig Jahren diverse Standards gebildet, um mitunter auch über Betriebssystemgrenzen hinweg entfernte Dienste nutzen zu können:



Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.

>> Zum Feedback-Formular