[ TU Braunschweig | Informatik | IBR ]
News
Kontakt
 · Anreise
Gruppe HM
 · Lehrveranstaltungen
 · Arbeiten
 · Projekte
 · Veröffentlichungen
Gruppe VS
 · Lehrveranstaltungen
 · Arbeiten
 · Projekte
 · Veröffentlichungen
Studium
 · WS-2002/2003
 · SS-2002
Dienste
 · IBR-Bibliothek
 · Mailinglisten
 · Netguests
 · SSH Applet
Jobs
Events
Site Suche
© IBR, TU Braunschweig,
letzte Änderung:
Thu Sep 19 15:20:21 CEST 2002
F. Strauss
Aufgaben im Praktikum Verteilte Systeme

Das Praktikum besteht aus zwei Teilen: Ziel des ersten Teils ist es, anhand einer einfachen Anwendung, die nach dem Client/Server-Modell in Java implementiert werden soll, praktische Erfahrungen mit drei verschiedenen Ansätzen zur Kommunikation in verteilten Systemen zu sammeln. Im zweiten Teil wird ein replizierendes Filesystem entwickelt. Hierbei sollen die Probleme der Synchronisation, Datenkonsistenz und Fehlertoleranz im Vordergrund stehen und zugleich ein Einblick in Dateisysteme und die "betriebssystemnahe" Programmierung in C gewonnen werden.

Es sind alle Aufgaben in der angegebenen Reihenfolge und bis zu den angegebenen Terminen zu bearbeiten (d.h. es darf nicht etwa Aufgabe 1.1 ausgelassen oder verschoben werden, weil man der Ansicht sein könnte, man könne sie sich sparen, da Aufgabe 1.2 darauf aufbaut).

Wenn Sie weitere Herausforderungen über das Geforderte hinaus suchen :-), können Sie sich einige "Optionen" anschauen und versuchen, Ihre Implementierung entsprechend zu ändern oder im Gespräch mit Ihrem Hiwi oder Assistenten diese oder andere Aspekte diskutieren. Legen Sie aber stets zunächst das Hauptaugenmerk auf die grundlegenden Anforderungen. Unwichtig sind im Rahmen dieses Praktikums dagegen Dinge wie z.B. ein besonders hübsches User-Interface mit viel Plüsch.

Die Abnahme der Aufgaben findet in kleinen Kolloquiumsgesprächen mit Ihrem Hiwi im Rechner-Pool statt. Dabei müssen alle Teilnehmer Ihrer Gruppe anwesend sein, da auch alle zum Aufbau und zur Funktion Ihrer Lösungen und zu den verwendeten Mechanismen befragt und letztenendes einzeln bewertet werden. Sollte es einmal ausnahmsweise zu einer Verzögerung bei der Bearbeitung einer Aufgabe kommen, teilen Sie dies Ihrem Hiwi frühzeitig (mindestens 3 Tage vor Ablauf der Aufgabe) mündlich oder per EMail mit.

Wenn Sie grundlegende Probleme bei der Bearbeitung haben, sprechen Sie ebenfalls frühzeitig mit Ihrem Hiwi oder fragen Sie ihn per EMail. Benutzen Sie auch die Mailingliste aller Teilnehmer und Betreuer pvs@cip.ibr.cs.tu-bs.de zum Austausch von Informationen oder zum Stellen und Beantworten von Fragen.

Teil 1: Verteilte Fraktalberechnung

Im ersten Teil des Praktikums sollen Sie ein Programm zur Berechnung von Fraktalen in Java implementieren. Nach einer einführenden Single-Process Variante sollen Sie aus ihrem System verschiedene Formen verteilter Systeme ableiten, indem Sie verschiedene Mechanismen zur Kommunikation einsetzen. Machen Sie sich Gedanken zu den Aspekten Skalierbarkeit, Fehlertoleranz, DoS-Sicherheit. Diese sollen nicht im Detail umgesetzt werden, können aber diskutiert werden.

Aufgabe 1.1: Single-Process Variante

Zunächst sollen Sie ein einfaches Java-Programm zur Berechnung und Anzeige von Fraktalen (vorzugsweise nach der Mandelbrotmenge, Dokumentation, Kapitel 5.3.1) erstellen. Das Programm soll die Eingaben der notwendigen Parameter (nmax, Koordinaten von G) erlauben und die errechnete Zugehörigkeit der Punkte in G zur Mandelbrotmenge grafisch anzeigen. Durch Anklicken von zwei Punkten bzw. Aufspannen eines Ausschnittes soll die Neuberchnung für ein Teilgebiet möglich sein.

Es ist ratsam, beim Entwurf dieses Programms bereits an die folgenden Aufgaben zu denken und die Berechnung für ein gegebenes Gebiet in eine separate Klasse zu kapseln.

Aufgabe 1.2: Sockets Variante

Ausgehend von Ihrem Programm aus Aufgabe 1.1 soll nun die Berechnung der Punkte in ein separates Server-Programm ausgelagert werden. Dieser Compute-Server soll mehrfach im LAN gestartet werden. Das aus Aufgabe 1.1 entwickelte Client-Programm soll in der Lage sein, meherere dieser Compute-Server zur Berechnung von Teilgebieten zu benutzen und diese Teillösung zur Gesamtlösung zusammenzusetzen.

Zur Kommunikation zwischen Client und Servern sollen TCP-Sockets oder UDP-Sockets (ggf. mit Multicast) benutzt werden. Wie die Daten eines Berechnungs-Requests und einer Response in Nachrichten oder Datagrammen kodiert werden, sollen Sie selbst entscheiden.

Aufgabe 1.3: Java RMI Variante

Wie Aufgabe 1.2. Jedoch soll zur Kommunikation der entfernte Methodenaufruf einer Service-Klasse per RMI benutzt werden.

Aufgabe 1.4: CORBA Variante

Wie Aufgabe 1.2. Jedoch soll die Dienstschnittstelle mittels CORBA-IDL spezifiziert werden und das System als CORBA Dienst und Client implementiert werden.

Optionen

  • Die Benutzerfreundlichkeit des Programms kann erhöht werden, indem das Auffinden der verfügbaren Server zur Laufzeit dynamisch passiert und nicht konfiguriert werden muss. Dazu ist eine Multicast Kommunikation geeignet. Für Java Dienste könnte Jini zur Dienstevermittlung benutzt werden. (Davon habe ich aber selbst keine Ahnung. :-)
  • Sofern UDP verwendet wird, sollte man damit rechnen, dass einzelne Datagramme verloren gehen können. Dadurch darf es nicht zu einer Verklemmung kommen. Timeout-Mechanismen sollten für die Wiederholung von Nachrichten sorgen.
  • Neben der Möglichkeit, das Gesamtproblem in gleichgroße Teilprobleme zu zerlegen und entsprechend auf die Server zu verteilen, ist es auch möglich, kleinere Teilprobleme zu bilden und diese jeweils an einen unbeschäftigten Server zu delegieren. Sobald ein Server einen Teil bearbeitet hat, bekommt er die nächste Teilaufgabe. Somit ist eine bessere Lastverteilung möglich, die weniger abhängig ist von der Leistung und der Auslastung der einzelnen Server.
  • CORBA Dienste können in verschiedenen Sprachen implementiert werden. Es ist denkbar, neben einer Java-Implementierung auch einmal eine Implementierung in C oder C++ vorzunehmen und diese Server ebenfalls mit dem in Java implementierten Client zu verwenden.

Teil 2: Ein Replizierendes Filesystem

Dieser Teil des Praktikums beinhaltet die Entwicklung eines replizierten, verteilten Dateisystems basierend auf dem NFS-Protokoll. Dazu ist eine einfache Implementierung eines NFS-Servers vorgegeben (pvsnserver), der die NFS Remote Procedure Calls (RPCs) entsprechend beantwortet. Zur Synchronisation der Replikation soll das Majority-Consens-Verfahren benutzt werden.

Aufgabe 2.1: Persistenter NFS-Server

Im ersten Schritt soll das vorgegebene Skelett eines NFS-Servers erweitert werden. Um nicht direkt mit den NFS-RPCs arbeiten zu müssen, wird die pvsmount-Bibliothek benutzt. Diese leistet bereits alle Vorarbeiten (Anmelden, Übersetzen der RPCs, usw.), so dass nur eine Reihe von C-Funktionen mit der Funktionalität des gewünschten Dateisystems implementiert werden müssen. Der Beispielserver hält Daten nur im Speicher, stellt also eine RAM-Disk dar. Dieser soll so verändert werden, dass die Daten auf Festplatte persistent gesichert werden, und nach einem Neustart des NFS-Servers wieder zur Verfügung stehen.

Das korrekte Arbeiten aller Funktionen (Löschen, Umbenennen, Attribute ändern, etc.) wird getestet. Ein guter umfangreicher Test ist das Kompilieren des eigenen Quelltextes im simulierten Verzeichnis.

Aufgabe 2.2: Konzept für einen replizierenden NFS-Server

Im zweiten Schritt soll ein Konzept ausgearbeitet werden, wie der einfache NFS-Server zu einem replizierenden NFS-Server ausgebaut werden kann. Da nun mehrere Versionen einer Datei auf verschiedenen NFS-Servern existieren können, ist zunächst eine Versionskontrolle zu definieren.

Beim Zugriff auf eine Datei muss jeweils sichergestellt werden, dass mit der aktuellen Version gearbeitet wird. Dazu soll das Majority-Consens-Verfahren eingesetzt werden, bei dem die NFS-Server über Lese- und Schreibzugriffe abstimmen. Sie können davon ausgehen, dass die Anzahl der NFS-Server während eines Laufs konstant ist. Allerdings soll die Anzahl der NFS-Server und die Lese- und Schreibquoren zwischen den Testläufen variiert werden können. Sehen Sie eine einfache Konfigurationsdatei oder Aufrufoptionen für die Parameter vor.

Machen Sie sich an einigen Beispielen den Ablauf des Abstimmungsverfahrens deutlich. Beachten Sie insbesondere, dass eine Kommunikation mit UDP nicht zuverlässig ist. Außerdem ist zu berücksichtigen, dass es mehrere Abstimmungen quasi gleichzeitig geben kann.

Das Konzept wird in Form einer EMail (bitte nur ASCII-Text, PostScript oder PDF) an pvsadm@cip.ibr.cs.tu-bs.de bei den betreuenden Hiwis abgegeben. Nach der Durchsicht werden interessante Aspekte aller Entwürfe in einem gemeinsamen Kolloquium mit allen Praktikumsteilnehmern besprochen. Eventuell sind Nachbesserungen notwendig, falls das Konzept Lücken hat oder inkonsistent ist.

Aufgabe 2.3: Implementation des replizierten NFS-Server

Schließlich soll als dritte Teilaufgabe das Konzept implementiert werden.

Zu den Abnahmekriterien gehören zum einen der Test der Konsistenz aller Dateioperationen (Sehen alle Server wirklich zu einem Zeitpunkt denselben Inhalt des Verzeichnisses?), zum anderen die gleichzeitige Beschäftigung mehrerer Server (z.B. Compilerlauf auf einem Server, ls -ali auf einem anderen). Auch Serverabstürze werden simuliert.

Optionen

  • Directory-Operationen sind zur erfolgreichen Bearbeitung dieser Aufgaben nicht erforderlich. Es wäre dennoch interessant, auch diese zu implementieren. Entsprechende Stubs sind in der pvsmount-Bibliothek ebenfalls bereits enthalten.
  • Für das Voting und die Verteilung von Versionsinformationen und Updates sowie für die abschließende Freigabe nach Operationen kann man anstelle mehrfacher Unicast-Nachrichten auch Multicast-Nachrichten verwenden. Achtung: Die Berücksichtigung eines möglichen Verlustes von Nachrichten wird dabei komplizierter.