34
Institut für Telematik Technische Universität Hamburg Verteilte Systeme Theoretische und Praktische Übung © Prof. Dr. Volker Turau, Institut für Telematik

Verteilte Systeme Theoretische und Praktische Übung · Institut für Telematik . Dieses Dokument enthält die Aufgaben der Übung zur Bachelor Vorlesung r-Ve teilte Systeme. Ein

  • Upload
    lyxuyen

  • View
    214

  • Download
    0

Embed Size (px)

Citation preview

Institut für Telematik Technische Universität Hamburg

Verteilte Systeme Theoretische und Praktische

Übung

© Prof. Dr. Volker Turau, Institut für Telematik

Institut für Telematik

Dieses Dokument enthält die Aufgaben der Übung zur Bachelor Vorlesung Ver-teilte Systeme. Ein System heißt Verteiltes System, falls sich Software-Komponenten auf vernetzten Computern befinden und die Komponenten nur über den Austausch von Nachrichten kommunizieren. Sie verfügen somit nicht über einen gemeinsamen Speicher. Verteilte Systeme ermöglichen echte Neben-läufigkeit, da mehrere Prozesse auf unterschiedlichen Rechnern gleichzeitig ausgeführt werden. Sie zeichnen sich durch eine sehr gute horizontale Skalier-barkeit aus. Weiterhin ermöglichen sie eine geographische und administrative Trennung von Nutzung und Bereitstellung von Hardware und bieten Möglich-keiten zur Steigerung der Verfügbarkeit und Verlässlichkeit. Allerdings bringen sie auch Nachteile mit sich, beispielsweise neue Sicherheitsrisiken und eine er-höhte Komplexität in der Programmierung. Die Vorlesung behandelt Grund-prinzipien von Verteilten Systemen. Es werden Kenntnisse über Konzepte und die praktische Vorgehensweise beim Entwurf skalierbarer Verteilter Systeme vermittelt. Die Übungen teilen sich in praktische und theoretische Übungen auf. Für die praktischen Übungen werden die Programmiersprachen Java und C/C++ verwendet.

Mein besonderer Dank geht an meine Doktoranden Dietrich Fahrenholtz, Matthias Witt, Arne Bosien, Bernd Hauck, Helge Klimek, Björn Greßmann, Sven Köhler, Holger Machens, Julian Ohrt, Christian Renner, Gerry Siegemund, Andreas Weigel, Florian Kauer, Tobias Lübkert, und Florian Meyer mit denen ich die Übungen im Laufe mehrerer Jahre gemeinsam entwickelt habe.

Copyright 2019 Prof. Dr. Volker Turau, Institut für Telematik

Technische Universität Hamburg

[email protected]

Institut für Telematik

Inhalt

Praktikum

1. Java Sockets 2. C++ Sockets 3. Mashup 4. RMI – Vokabeltrainer 5. Verteiltes Dateisystem

Theorie

1. IP-Netzwerke und Architekturen 2. Einführung in Verteilte Systeme 3. Architekturen und HTTP 4. RPC 5. Entfernte Aufrufe & RMI 6. Zeitsynchronisation

Praktikum Verteilte SystemePraktikum Verteilte SystemeWintersemester 2018/2019Wintersemester 2018/2019

Prof. Dr. V. Turau | Institut für Telematik (E–17)Prof. Dr. V. Turau | Institut für Telematik (E–17) TUH

HTU

HH

Auf

gabe

nbla

tt

Aufgabenblatt

1 1

1111

Java SocketsIn diesem Teil der Übung Verteilte Systeme lernt ihr verschiedene Techniken kennen ein verteiltesSystem praktisch aufzubauen. Wir beginnen damit ein einfaches Tic-Tac-Toe Spiel als socketbasiertesClient-Server System in der Programmiersprache Java zu implementieren.

Aufgabe 1.1 : Einrichten und Testen der EntwicklungsumgebungBenutzt hierfür die Entwicklungsumgebung Eclipse, die auf den Pool Rechnern bereits installiert ist (nurdie Java-Umgebung muss über “My Apps” noch initialisiert werden). Alternativ kann Eclipse für eineneigenen Computer unter https://www.eclipse.org/downloads/ heruntergeladen werden.

Erstellt ein neues Projekt mit dem Namen EchoServer, sowie eine Klasse Server mit einem simplenTest Programm:

public class Server {public static void main(String[] args) {

System.out.println("Hello World");}

}

Startet das Programm und prüft die Ausgabe.

Aufgabe 1.2 : Hello World via SocketsDiese Nachricht wurde natürlich noch nicht über eine Netzwerkverbindung gesendet. Dazu ist etwasmehr Code notwendig:

import java.io.IOException;import java.io.PrintStream;import java.net.ServerSocket;import java.net.Socket;

public class Server {public static void main(String args[]) {

ServerSocket helloServer = null;try {

helloServer = new ServerSocket(9999);

System.out.println("Waiting for connection");Socket clientSocket = helloServer.accept();

PrintStream printer = new PrintStream(clientSocket.getOutputStream());

printer.println("Hello World");}catch (IOException e) {

System.out.println(e);}System.out.println("Closing");

}}

Praktikum Verteilte SystemePraktikum Verteilte SystemeWintersemester 2018/2019Wintersemester 2018/2019Prof. Dr. V. Turau | Institut für Telematik (E–17)Prof. Dr. V. Turau | Institut für Telematik (E–17)

TUH

HTU

HH

Auf

gabe

nbla

tt

Aufgabenblatt

1 1

2222

Sobald dieses Programm gestartet wird, wird es den Socket initialisieren und warten bis eine Verbindungaufgebaut wird. Um sich direkt mit dem Server zu verbinden, kann das Telnet Programm verwendet wer-den. Startet dazu die Kommandozeile (Start → Suche → “cmd”) und verwendet den Befehl “telnet127.0.0.1 9999” um eine Verbindung zu dem lokal laufenden Serverprogramm herzustellen.1 Un-tersucht welche Ausgaben in welchem Fenster woher kommen. Telnet generiert selbst einige Ausgaben,leitet aber auch die Nachrichten des Servers an die Ausgabe weiter.

Aufgabe 1.3 : Echo ServerIhr könnt per Telnet auch Nachrichten generieren, die an den Socket des Servers geschickt werden sollen.Erweitert das obige Programm zu einem simplen Echo Server. Das heißt alle vom Client gesendetenNachrichten sollen wieder zurück gesendet werden. Sobald quit eingetippt wird, soll der Server sichbeenden. Die folgende Zeile wird euch helfen.

BufferedReader reader = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));

Aufgabe 1.4 : Tic-Tac-ToeAls nächstes soll ein einfacher Tic-Tac-Toe Server entsprechend der folgenden Spezifikation implemen-tiert werden. Die eigentliche Spiellogik ist schon vollständig durch die Klasse TicTacToe implemen-tiert, die zusammen mit der abstakten Klasse Player bei StudIP zur Verfügung steht.

� Es können sich beliebig viele Clients zum Port 9999 verbinden. Für dieses Aufgabenblatt werdenwir uns nur händisch per Telnet verbinden.

� Beim Start jeder Runde werden unter allen verbundenen Clients der Spieler X und der Spieler Ozufällig ausgewählt.

� Eine neue Runde startet sobald der zweite Spieler sich verbindet, wenn eine Runde beendet ist,einer der aktiven Spieler die Verbindung trennt oder einer der Spieler die Nachricht reset sendet.

� Sobald eine neue Runde gestartet wird und bei jeder Veränderung des Spielfelds wird eineNachricht mit folgendem Aufbau an alle Clients gesendet:

<Rolle des Clients (PLAYER_X,PLAYER_O,VISITOR)><Spielfeld (dreizeilig)><Zustand (PLAYER_X_TURN,PLAYER_O_TURN,TIE,PLAYER_X_WINS,PLAYER_O_WINS)><Leerzeile>

also zum Beispiel

PLAYER_OOX.XXO...PLAYER_O_TURN

� Der Spieler der an der Reihe ist, sendet eine Koordinate mit Spalte (A-C) und Zeile (1-3), z.B. A2.

� Ein Client beendet die Verbindung durch das Senden der Nachricht quit.

1Um Telnet zuhause zu nutzen, muss es ggf. noch aktiviert werden, siehe https://support.microsoft.com/de-de/kb/978779

Praktikum Verteilte SystemePraktikum Verteilte SystemeWintersemester 2018/2019Wintersemester 2018/2019

Prof. Dr. V. Turau | Institut für Telematik (E–17)Prof. Dr. V. Turau | Institut für Telematik (E–17) TUH

HTU

HH

Auf

gabe

nbla

tt

Aufgabenblatt

1 1

3333

Die folgenden Schritte sind noch notwendig:

� Erstellen eines neuen Projekts mit dem Namen TicTacToe und Herunterladen der Klassen ausStudIP.

� Erstellen einer Klasse PlayerConnection welche die Verbindung zu einem Client darstellt.Innerhalb der run Methode sollen eingehende Nachrichten an die execute Methode übergebenwerden bis die Verbindung geschlossen wird. Über den PrintStream hat die Spiellogik dieMöglichkeit Nachrichten über die Verbindung zu senden.

public class PlayerConnection extends Player implements Runnable {public PlayerConnection(Socket clientSocket) {...}public void run() {...}public void close() {...}public PrintStream getPrintStream() {...}

}

� Erstellen einer Klasse Server welche eingehende Verbindungen annimmt, ein Objekt vom TypPlayerConnection erstellt, als Thread startet und der TicTacToe Klasse übergibt.

Nun könnt ihr euch mithilfe von mehreren Telnet Instanzen lokal zu dem Server verbinden und Tic-Tac-Toe spielen. Verbindungen von anderen Rechnern sind leider im Pool nicht möglich.

Aufgabe 1.5 : AusblickBeim nächsten Mal werden wir ein Programm in der Programmiersprache C++ schreiben, der sich alsClient mit dem Tic-Tac-Toe Server verbindet und automatisch spielt.

Überlegt euch dafür schon einmal eine Strategie wie ein Computer bei Tic-Tac-Toe gewinnen kann undwie dies umgesetzt werden könnte.

Praktikum Verteilte SystemePraktikum Verteilte SystemeWintersemester 2018/2019Wintersemester 2018/2019

Prof. Dr. V. Turau | Institut für Telematik (E–17)Prof. Dr. V. Turau | Institut für Telematik (E–17) TUH

HTU

HH

Auf

gabe

nbla

tt

Aufgabenblatt

2 2

1111

C++ SocketsNachdem wir im letzten Teil der Übung einen Server in Java geschrieben haben, lernen wir heute wieman einen Client in C++ erstellt. Ein wichtiger Aspekt von verteilten System ist eine allgemeine Daten-repräsentation so dass es möglich ist auf das System mit verschiedenen Tools und Programmiersprachenzugreifen. Diese ist durch das im letzten Aufgabenblatt beschriebene Protokoll gegeben.

Aufgabe 2.1 : Einrichten und Testen der EntwicklungsumgebungBenutzt hierfür wiederum die Entwicklungsumgebung Eclipse, die über die Softwareverwaltung der PoolRechner installiert werden kann. Ihr braucht insbesondere die CDT Umgebung um C++ zu program-mieren. Diese kann über Help → Install New Software... → Work With: "http://download.eclipse.org/tools/cdt/releases/8.8.1"→ Add installiert werden. WähltCDT Main Features und auf den Pool-Rechnern außerdem CDT Optional Features →C/C++ Visual C++ Support aus. Die Installation kann bis zu zehn Minuten in Anspruch nehmenund erfordert einen Neustart von Eclipse. Die C++-Perspektive von Eclipse kann danach über Window→ Perspective→ Open Perspective→ Other...→ C/C++ geöffnet werden.

Erstellt ein neues Projekt mit dem Namen EchoClient, sowie eine Datei EchoClient.cpp miteinem simplen Test-Programm:

#include <iostream>using namespace std;int main() {

cout << "Hello World" << endl;return 0;

}

Startet das Programm und prüft die Ausgabe.

Aufgabe 2.2 : Sockets in C++In C oder C++ ist noch etwas Vorarbeit nötig um eine Socketverbindung aufzubauen. Im StudIP findet ihrden Beispielcode für einen Client der sich zu dem in der letzten Übung erstellten in Java geschriebenenEchoServer verbinden kann. Kopiert diesen in euer C++ Projektverzeichnis und kompiliert ihn.

Auf den Pool-Rechnern mit der Visual C++-Toolchain sind vorher noch weitere Einstellungennotwendig. Öffnet die Projekteigenschaften über Project→ Properties und navigiert zu C/C++Build → Settings und wählt oben den Tab Tool Settings. Unter C++ Compiler (cl)→ Preprocessor fügt die folgenden Pfade als Include Path (/I) hinzu:

� "C:/Program Files (x86)/Windows Kits/8.0/Include/um"

� "C:/Program Files (x86)/Windows Kits/8.0/Include/shared"

Zusätzlich müsst ihr im gleichen Fenster unter Linker (/link)→ Libraries→ AdditionalLibpath (/libpath) diesen Eintrag einfügen:

� "C:/Program Files (x86)/Windows Kits/8.0/Lib/win8/um/x86"

Um den EchoClient zu testen, muss zuerst der Java Server und danach der C++ Client gestartetwerden.

Praktikum Verteilte SystemePraktikum Verteilte SystemeWintersemester 2018/2019Wintersemester 2018/2019Prof. Dr. V. Turau | Institut für Telematik (E–17)Prof. Dr. V. Turau | Institut für Telematik (E–17)

TUH

HTU

HH

Auf

gabe

nbla

tt

Aufgabenblatt

2 2

2222

Aufgabe 2.3 : Tic-Tac-ToeNachdem ihr in der letzten Übung schon einen Tic-Tac-Toe Server geschrieben habt, soll in dieser Übungder Client folgen. Um euch später zu verbinden, könnt ihr entweder euren eigenen Server starten odereinen von uns bereitgestellten Server nutzen1.

Im StudIP ist eine Klasse TicTacToeMessage zu finden, die das Parsen der vom Server gesendetenNachrichten übernimmt und auch eine simple Spielstrategie implementiert mit dem folgenden Interface:

static void setup();void parse(const std::vector<std::string>& receivedText);bool isMyTurn();char getPad(int x, int y);std::string suggestMove();

Sie kann beispielsweise wie folgt getestet werden:

std::vector<std::string> receivedText;receivedText.push_back("PLAYER_O");receivedText.push_back("OX.");receivedText.push_back("XXO");receivedText.push_back("...");receivedText.push_back("PLAYER_O_TURN");

TicTacToeMessage::setup();

TicTacToeMessage message;message.parse(receivedText);if(!message.isMyTurn()) {

std::cout << "Not your turn, please wait!" << std::endl;}else {

std::cout << "Suggested move: " << message.suggestMove() << std::endl;}

Legt ein neues Projekt TicTacToeClient an, kopiert die Klasse TicTacToeMessage hineinund entwickelt daraus ein Programm das ähnlich wie der C++ EchoClient Nachrichten vom Serverentgegennimmt und angemessen reagiert. Sobald die simple Strategie funktioniert, schreibt eine eigeneMethode welche möglichst geschickte Züge vorschlägt.

1IPs und Ports werden euch in der Übung mitgeteilt

Praktikum Verteilte SystemePraktikum Verteilte SystemeWintersemester 2018/2019Wintersemester 2018/2019

Prof. Dr. V. Turau | Institut für Telematik (E–17)Prof. Dr. V. Turau | Institut für Telematik (E–17) TUH

HTU

HH

Auf

gabe

nbla

tt

Aufgabenblatt

3 3

1111

MashupIn dieser Übung wollen wir Daten aus mehreren HTTP-Anfragen kombinieren. Es soll ein HTTP-Cliententwickelt werden, der von einem ersten Server mehrere Datensätze im JSON-Format abfragt, diesezusammenführt und an einen zweiten Server schickt.

Ziel der Anwendung ist es für eine gegebene traceroute Liste von IP-Adressen die GPS-Coordinatenabzufragen, die gesamte Länge des Pfads zu bestimmen und diese Informationen an unseren Contest-Server zu schicken. Die übermittelten Pfade werden dann im Browser unter http://edu.ti5.tu-harburg.de:12010 auf einer Weltkarte dargestellt.

Aufgabe 3.1 : HTTP ClientSchreiben Sie einen einfachen HTTP-Client in Java, der die Antwort (ohne Header) auf eine HTTP-Anfrage von einem Webserver in einem String bereitstellt. Wenn der Status der Antwort nicht 200 (OK)entspricht, soll eine Exception geworfen werden. Ob Sie dem Client eine kombinierte URL oder Hostund Pfad getrennt übergeben, ist Ihnen überlassen.

Für eine einfache HTTP-Anfrage reichen in der Regel zwei Zeilen. Um die URL http://example.com/index.html abzurufen, erstellen Sie zunächst eine Socket-Verbindung zum Server example.comund senden folgende Header gefolgt von einer Leerzeile

GET /index.html HTTP/1.1Host: example.com

Schauen Sie sich die Antwort des Servers an. Verwenden Sie dazu entweder direkt Java oder telnet.

Hinweis: Java bietet auch eine Abstraktion für HTTP-Verbindungen an, welche die Anfrage für einegegebene URL ausführt.

(HttpURLConnection) (new URL("http://example.com/index.html")).openConnection()

Aufgabe 3.2 : GeoIP – JSON deserialisierenUm die Koordinaten zu einer IP-Adresse zu erhalten gibt es diverse Dienste. Wir verwenden ip-api.com, da dieser eine einfache öffentliche Schnittstelle mit JSON-Unterstützung bietet. SchauenSie sich zunächst eine Beispielanfrage http://ip-api.com/json/134.28.77.18 im Browseroder über Ihren Client aus Aufgabe 3.1 an.Hinweis: Der Dienst ist limitiert auf 150 Anfragen pro Minute/IP

Die empfangenen Werte sollen in ein Java-Objekt übernommen werden. Dazu bietet es sich an, eineLibrary wie z.B. GSON, zu verwenden. Diese erlaubt es die Parameter eines JSON-Objekts direkt denMember-Variablen des Java-Objekts zuzuweisen und umgekehrt. Die Library kann als jar-Datei un-ter http://repo1.maven.org/maven2/com/google/code/gson/gson/2.7/gson-2.7.jar heruntergeladen werden und muss dann dem Build-Pfad des Projekts hinzugefügt werden (inEclipse: rechte Maustaste auf jar-Datei → Add to Build Path).

Das folgende Beispiel zeigt wie ein beliebiges Objekt in ein Json-String und wieder zurück konvertiertwird.

Praktikum Verteilte SystemePraktikum Verteilte SystemeWintersemester 2018/2019Wintersemester 2018/2019Prof. Dr. V. Turau | Institut für Telematik (E–17)Prof. Dr. V. Turau | Institut für Telematik (E–17)

TUH

HTU

HH

Auf

gabe

nbla

tt

Aufgabenblatt

3 3

2222

import com.google.gson.Gson;Gson gson = new Gson();String jsonString = gson.toJson(myObject);MyClass mc = (MyClass) gson.fromJson(jsonString, MyClass.class);

Erstellen Sie eine Klasse, um GeoIP-Objekt zu repräsentieren. Die Objekte sollen die Attribute ip,longitude, latitude, city und country_name besitzen. Erstellen Sie eine Methode, um dieDaten zu einer IP-Adresse über die HTTP-Schnittstelle abzufragen und in einem GeoIP-Objekt zuspeichern. Testen Sie Ihre Implementierung, indem Sie das Objekt anschließend wieder in JSON kodierenund in der Konsole ausgeben.

Aufgabe 3.3 : Trace an Contest-Server sendenErstellen Sie ein Hauptprogramm, welches die Geo-Informationen für eine dem Programm übergebenenListe von IP-Adressen abruft und in einer ArrayList speichert. Bestimmen Sie die gesamte Entfernungzwischen den Koordinaten zweier aufeinanerfolgender IP-Adressen mit Hilfe des Haversine:

public double haversineDistance(GeoIP c1, GeoIP c2) {double R = 6371e3;double dLat = Math.toRadians(c2.getLatitude()-c1.getLatitude());double dLng = Math.toRadians(c2.getLongitude()-c1.getLongitude());double a = Math.pow(Math.sin(dLat/2), 2)

+ Math.cos(Math.toRadians(c1.getLatitude()))

* Math.cos(Math.toRadians(c2.getLatitude()))

* Math.pow(Math.sin(dLng/2), 2);return R * 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));

}

Die Gesamtentfernung und die komplette Liste der GeoIP-Objekte soll in einem JSON-Objekt anden Contest-Server geschickt werden. Das String-Resultat sollte, wie im folgenden Beispiel gezeigt,aussehen:

{"geoIps": [{"ip": "127.0.0.1", "latitude":50.0, "longitude": 10.0, "city

": "Hamburg", "country_name": "Germany"}, ...],"distance": 0.0

}

Senden Sie das JSON-Objekt per POST im Request-Body an den Contest-Server unter http://edu.ti5.tu-harburg.de:12010/mytrace. Hierzu muss der Inhaltstyp und die Länge in Bytesangegeben werden. Erweitern Sie ihren HTTP-Client um eine entsprechende Methode.

Content-Type: application/jsonContent-Length: 1234

Bei korrekter Kodierung und erfolgreicher Übertragung erscheint jetzt eine neue Strecke auf der Weltkarteim Browser.

HINWEIS: vergessen Sie nicht die Antwort vom Server zu lesen, ansonsten wird Ihre Eingabe verworfen.

Unter Windows können Sie mit tracert Ziel-Host die Liste von IPs auf dem Pfad zum Ziel ermitteln.Die Ausgabe von tracert (Windows) kann über http://edu.ti5.tu-harburg.de:12010/

Praktikum Verteilte SystemePraktikum Verteilte SystemeWintersemester 2018/2019Wintersemester 2018/2019

Prof. Dr. V. Turau | Institut für Telematik (E–17)Prof. Dr. V. Turau | Institut für Telematik (E–17) TUH

HTU

HH

Auf

gabe

nbla

tt

Aufgabenblatt

3 3

3333

trace2ip.html einfach in eine reine IP-Liste umgewandelt werden. Fügen Sie dazu die kopierteAusgabe in das Textfeld ein.

Praktikum Verteilte SystemePraktikum Verteilte SystemeWintersemester 2018/2019Wintersemester 2018/2019

Prof. Dr. V. Turau | Institut für Telematik (E–17)Prof. Dr. V. Turau | Institut für Telematik (E–17) TUH

HTU

HH

Auf

gabe

nbla

tt

Aufgabenblatt

4 4

1111

RMI – VokabeltrainerIn dieser Aufgabe wollen wir einen entfernten Vokabeltrainer unter Verwendung von RMI implemen-tieren. Die Vokabeln werden in einer Datenbank auf dem Server verwaltet. Anstatt die Daten vomServer im Ganzen abzurufen, bietet der Server direkte Methoden zum Lernen im Trainerprogramm (demRMI-Client) an.

Aufgabe 4.1 : Hello RMI-WorldUm die Methoden eines entfernten Objekts aufzurufen, wird ein Interface benötigt, welches vom Serverimplementiert und vom Client verwendet wird. Beachten Sie, dass das Interface eine Erweiterung vonRemote sein muss und außerdem jede Methode eine RemoteException werfen kann. Außerdemmüssen alle ausgetauschten Objekte entweder entfernte Objekte oder serialisierbar sein. Letzteres ist inJava einfach durch das Implementieren des Interfaces Serializable erreichbar.

Machen Sie sich mit der Funktionsweise von RMI anhand des folgenden Beispiels vertraut. Wo wirdder RMI-Server gestartet und auf welchem Port wird der Socket geöffnet? Welche Anweisungen sindentfernte Aufrufe? Was ist der Zweck des Feldes REFERENCE_KEY? Ist dieses zwingend notwendig?

public interface IHelloWorld extends Remote {public final static String REFERENCE_KEY = "HelloServer";String sayHello() throws RemoteException;

}

Serverpublic class HelloSayer extends UnicastRemoteObject implements IHelloWorld

{private static final long serialVersionUID = 1L;

public HelloSayer() throws RemoteException {}

@Overridepublic String sayHello() throws RemoteException {

System.out.println("Saying hello now");return new String("Hello RMI-World");

}

}

public class Server {public static void main(String args[]) {

try {HelloSayer srv = new HelloSayer();Registry reg = LocateRegistry.createRegistry(1099);reg.bind(IHelloWorld.REFERENCE_KEY, srv);System.out.println("Hello Server running");

} catch (Exception e) {e.printStackTrace();

}}

}

Praktikum Verteilte SystemePraktikum Verteilte SystemeWintersemester 2018/2019Wintersemester 2018/2019Prof. Dr. V. Turau | Institut für Telematik (E–17)Prof. Dr. V. Turau | Institut für Telematik (E–17)

TUH

HTU

HH

Auf

gabe

nbla

tt

Aufgabenblatt

4 4

2222

Clientpublic class HelloClient {

public static void main(String[] args) {try {

IHelloWorld helloWorld = (IHelloWorld) Naming.lookup("//" +"127.0.0.1" + "/" + IHelloWorld.REFERENCE_KEY);System.out.println("Server says: " + helloWorld.sayHello());

} catch (Exception e) {e.printStackTrace();

}}

}

Aufgabe 4.2 : Entfernter Vokabeltrainer mit DatenbankNun sollen Sie eine komplexere Anwendung mit Hilfe von RMI implementieren. Der zu implementieren-de Vokabeltrainer verwaltet Vokabeln in fünf Karteikästen. Eine Vokabel kann entweder von der eigenenSprache in die Fremdsprache oder andersherum übersetzt werden. Antwortet man mit der richtigenÜbersetzung, wird die Karte einen Kasten mit einem Index verschoben, der um eins kleiner ist als deraktuelle Index. Bei einer falschen Antwort bleibt sie in ihrem Kasten. Vokabeln im Kasten 0 bleiben dort.

Als Datenbank auf Serverseite können Sie eine JSON-Datei verwenden, welche Sie zu Programmstarteinlesen und mittels GSON in Java-Objekte konvertieren. Alternativ verwenden Sie eine Datenbank IhrerWahl oder Sie halten die Vokabeln erstmal nur im Arbeitsspeicher.

Der Vokabeltrainer liefert auf Anfrage des Clients eine entfernte Referenz auf eine zufällige Vokabelaus dem Kasten mit dem höchsten Index, der noch Vokabeln enthält. Die entfernten Vokabel-Objekteentsprechen dem Interface:

public interface IVoc extends Remote {/*** Returns the foreign or the base word, depending on the parameter.

*/public String question(boolean fromForeignToBase) throws

RemoteException;

/*** Submits an answer to a previous question. If the answer was

* correct, the Voc gets placed in a register with a lower index,

* otherwise it stays in its current register.

*/public boolean answer(String answer, boolean fromForeignToBase) throws

RemoteException;}

Ein Vokabeleintrag hat mindestens folgende Attribute, wobei registerBox den Karteikasten bezeich-net, der aktuell die Vokabel enthält:

public class Voc implements IVoc {private String baseLanguageWord;private String foreignLanguageWord;private int registerBox;

}

Verwenden Sie folgendes Interface für den Vokabeltrainer und implementieren Sie passende RMI-Client- und Server-Programme. Sie können die Funktionalität und das Interface beliebig erweitern. Neue

Praktikum Verteilte SystemePraktikum Verteilte SystemeWintersemester 2018/2019Wintersemester 2018/2019

Prof. Dr. V. Turau | Institut für Telematik (E–17)Prof. Dr. V. Turau | Institut für Telematik (E–17) TUH

HTU

HH

Auf

gabe

nbla

tt

Aufgabenblatt

4 4

3333

Vokabeln verden im Kasten mit dem höchsten Index (4) abgelegt. Wenn mindestens einer der beidenBegriffe einer neuen Vokabel schon in der jeweiligen Sprache vorhanden ist, soll die Vokabel nichteingefügt und stattdessen eine InvalidParameterException geworfen werden.

public interface IVocTrainer extends Remote {public static final String REFERENCE_KEY = "VocTrainer";

/*** Adds a new vocabulary as a tuple of two words in register 4

*/public void createNewVoc(String baseLanguageWord, String

foreignLanguageWord) throws RemoteException,InvalidParameterException;

/*** Out of the register with the largest index which is not empty, get

* a random vocabulary for training

*/public IVoc getNextVoc() throws RemoteException;

/*** Get the number of vocabularies in all registers

*/public List<Integer> getRegisterCounts() throws RemoteException;

}

Praktikum Verteilte SystemePraktikum Verteilte SystemeWintersemester 2018/2019Wintersemester 2018/2019

Prof. Dr. V. Turau | Institut für Telematik (E–17)Prof. Dr. V. Turau | Institut für Telematik (E–17) TUH

HTU

HH

Auf

gabe

nbla

tt

Aufgabenblatt

5 5

1111

Verteiltes DateisystemDieses Aufgabenblatt deckt die Termine 5 und 6 ab.

. Dies ist das letzte Aufgabenblatt. Es deckt einen Bearbeitungszeitraum von insgesamt 4 Wochen ab.

In diesem Blatt soll ein verteiltes Dateisystem mit Hilfe von Java und RMI realisiert werden. DieAnwendung besteht aus einem Server- und einem Clientprogram. Dabei ist es möglich mehrere Instanzendes Clients gleichzeitig mit einem einzigen Server zu betreiben.

Das Ziel des Systems ist es, ein einzelnes Verzeichnis (ohne Unterverzeichnisse) mit ausschließlichTextdateien zwischen allen Clients und dem Server synchron zu halten.

E Gleichzeitige Änderungen derselben Datei durch mehrere Clients (Konflikte!) sollen hier zur Vereinfa-chung ignoriert werden.

Aufgabe 5.1 : Server und Client� Die Anwendung soll dem Upload/Download-Modell aus der Vorlesung (Kapitel Verteilte Datei-

systeme) entsprechen. Jeder Client besitzt also eine Kopie aller Dateien auf dem Server, auf denener arbeitet.

� Bei jeder lokalen Änderung (die in Aufgabe 5.3 verarbeitet wird), schreibt der Client die Datei aufdem Server sofort neu (Write-Through).

� Ein Client lädt eine Datei genau dann vom Server herunter, wenn der Server ihm eine Änderungmitteilt (Server-initiierte Validierung).

Teilprobleme

1. Zunächst soll ein Server entworfen werden, der Implementierungen der ersten beiden untenstehen-den RMI Schnittstellen besitzt. Beim Start wird dem Server ein Verzeichnispfad übergeben, wel-chen er zur Sychronisierung mit den Clients verwendet. Das Verzeichnis soll durch ein Objekt einerKlasse, welche IFileSystem implementiert, dargestellt werden. Die Dateien innerhalb diesesVerzeichnisses sollen durch Objekte repräsentiert werden, deren Klasse die IFile-Schnittstelleimplementiert.

2. Jeder Client synchronisiert ein einzelnes lokales Verzeichnis mit dem Server. Für die Clientseitesoll eine Klasse entworfen werden, welche die IFileChangeListener-Schnittstelle imple-mentiert, über die der Server dem Client Änderungen in seinem Verzeichnis mitteilt. Beim Starteines Clients soll dieser seinen IFileChangeListener beim Server über IFileSystem::registerChangeListener registrieren. Änderungen, die dem Server von einem Clientmitgeteilt werden, können über die Listener an alle anderen Clients weitergereicht werden.Um einen neu hinzukommenden Client auf den aktuellsten Stand zu bringen, soll der Ser-ver für jede existierende Datei die change-Methode des Listeners aufrufen, wenn ein neuerIFileChangeListener registriert wird

. Beachten Sie, dass im Gegensatz zum letzten Übungsblatt hier nicht nur der Client Referenzen aufObjekte des Servers besitzt! Um den Clients Änderungen per Push mitzuteilen, besitzt der Server mitIFileChangeListener auch entfernte Referenzen auf ein Objekt auf jedem seiner Clients.

Praktikum Verteilte SystemePraktikum Verteilte SystemeWintersemester 2018/2019Wintersemester 2018/2019Prof. Dr. V. Turau | Institut für Telematik (E–17)Prof. Dr. V. Turau | Institut für Telematik (E–17)

TUH

HTU

HH

Auf

gabe

nbla

tt

Aufgabenblatt

5 5

2222

RMI Schnittstellen

. Die hier beschriebenen Schnittstellen stehen separat im Stud.IP zum Download zur Verfügung.

/** Represents a file on the server. */public interface IFile extends Remote {

/*** Delete the file from the server and notify the connected clients.

** @throws IOException is thrown by the server if it

* was not possible to delete the file.

* @throws RemoteException if something went wrong during the RMI.

*/void delete() throws IOException, RemoteException;

/*** Download the content of the file from the server.

** @return The content of the file as string.

* @throws IOException is thrown by the server if it

* was not possible to read the file.

* @throws RemoteException if something went wrong during the RMI.

*/String getContent() throws IOException, RemoteException;

/*** Get the path of the file.

** @return The path of the file relative to the main directory.

* @throws RemoteException if something went wrong during the RMI.

*/String getRelativePath() throws RemoteException;

/*** Update the file on the server.

** @param content The new content of the file.

* @throws IOException is thrown by the server if it

* was not possible to write the file.

* @throws RemoteException if something went wrong during the RMI.

*/void setContent(String content) throws IOException, RemoteException;

}

/** Represents a file system on the server. */public interface IFileSystem extends Remote {

/*** Create a new file at the server.

** @param relativePath Name of the file to create.

* @return An object representing the new file on the server.

* @throws IOException is thrown by the server if it was

* not possible to create the file.

* @throws RemoteException if something went wrong during the RMI.

*/IFile createFile(String relativePath) throws IOException, RemoteException;

/*** Get a IRemoteFile object representing a file on the server.

*

Praktikum Verteilte SystemePraktikum Verteilte SystemeWintersemester 2018/2019Wintersemester 2018/2019

Prof. Dr. V. Turau | Institut für Telematik (E–17)Prof. Dr. V. Turau | Institut für Telematik (E–17) TUH

HTU

HH

Auf

gabe

nbla

tt

Aufgabenblatt

5 5

3333

* @param relativePath Name of the file.

* @return An object representing the new file on the server.

* @throws RemoteException if something went wrong during the RMI.

*/IFile getFile(String relativePath) throws RemoteException;

/*** Check if a file exists on the server.

** @param relativePath Name of the file.

* @return true if the file exists, false otherwise

* @throws RemoteException if something went wrong during the RMI.

*/boolean hasFile(String relativePath) throws RemoteException;

/*** Register a change listener at the server.

* Also calls the changed method of the listener for every file on the

* server assuming it might have changed since the client has connected

* previously, so the client can update the files.

** @param listener Listener to register at the server

* @throws IOException is thrown by the server if it was not possible

* to walk through the existing files.

* @throws RemoteException if something went wrong during the RMI.

*/void registerChangeListener(IFileChangeListener listener) throws IOException,

RemoteException;}

/** A listener that notifies about file system changes at the server. */public interface IFileChangeListener extends Remote {

/*** Informs a Client that a file was added on the Server. The Client can then

* download the file to its directory.

** @param file

* A IRemoteFile object representing a file on the server.

* @throws IOException

* is thrown by the client if it was not possible to add the

* file.

* @throws RemoteException

* if something went wrong during the RMI.

*/void added(IFile file) throws IOException, RemoteException;

/*** Informs a Client that a file was modified on the Server. The Client can

* then download the changes to its directory.

** @param file

* A IRemoteFile object representing a file on the server.

* @throws IOException

* is thrown by the client if it was not possible to modify the

* file.

* @throws RemoteException

* if something went wrong during the RMI.

*/void changed(IFile file) throws IOException, RemoteException;

Praktikum Verteilte SystemePraktikum Verteilte SystemeWintersemester 2018/2019Wintersemester 2018/2019Prof. Dr. V. Turau | Institut für Telematik (E–17)Prof. Dr. V. Turau | Institut für Telematik (E–17)

TUH

HTU

HH

Auf

gabe

nbla

tt

Aufgabenblatt

5 5

4444

/*** Informs a Client that a file was deleted on the Server. The Client can

* then remove the file locally.

** @param file

* A IRemoteFile object representing a (former) file on the

* server.

* @throws IOException

* is thrown by the client if it was not possible to delete the

* file.

* @throws RemoteException

* if something went wrong during the RMI.

*/void deleted(String relativePath) throws IOException, RemoteException;

}

Aufgabe 5.2 : Testen. Wie auf den bisherigen Aufgabenblättern handelt es sich hier um ein funktionsfähiges verteiltes System.

Zum Testen können Sie wieder Server und Client(s) auf dem selben Host laufen lassen.

Um die Implementierungen zu testen, sollen (vor dem Start der Anwendungen) beide Verzeichnissegeleert werden und dann eine neue Textdatei im Server-Verzeichnis angelegt werden. Wenn nun zuerstServer und danach Client gestartet werden, sollte die Datei auch im Client Verzeichnis erscheinen.

Aufgabe 5.3 : Mit Java einen Ordner auf Änderungen überwachenDamit Änderungen im Client-Verzeichnis an den Server übertragen werden, sollte dieser solche detektie-ren und die entsprechenden Methoden aufrufen. Der Server informiert dann wiederum alle verbundenenClients über die Änderungen, damit alle überwachten Ordner immer auf den selben Stand gebrachtwerden können.

Einen Ordner auf Änderungen zu überwachen, die an seinem Inhalt vorgenommen werden, kann an sichschon eine komplexe Aufgabe darstellen. Glücklicherweise bringt Java mit der Klasse WatchServiceaus dem Paket java.nio.file schon eine Lösung für dieses Problem mit.

Die abstrakte Klasse LocalFileChangeListener im Stud.IP verwendet diesen Dienst bereits, umein Verzeichnis zu überwachen. Leiten Sie eine eigene Klasse von LocalFileChangeListenerab, in der Sie die Änderungen verarbeiten und an den Server weitergeben.

E Der WatchService kann nicht zwischen Änderungen durch externe Programme (z.B. durch einen Tex-teditor) und Änderungen durch den Client selbst unterscheiden. Daher kommt es zu schweren Problemen,wenn der Client Änderungen vom Server lokal abspeichert, diese Änderung detektiert und dann wieder-um an den Server schickt (Endlosschleife!). Deshalb implementiert LocalFileChangeListenerfolgendes Interface, mit dem Sie die Überwachung pausieren können. Dies soll verwendet werden,um vom Server vorgenommene Änderungen lokal umzusetzen, ohne das eine Endlosschleife zwischenClients und Server entsteht.

E Durch das Abschalten des gesamten WatchService können jedoch auch Änderungen an anderenDateien, die zeitgleich von externen Anwendungen vorgenommen werden, übersehen werden undverloren gehen. Dieses Problem brauchen Sie hier nicht zu lösen.

/** An interface for starting and stopping a listener */public interface IServiceController {

Praktikum Verteilte SystemePraktikum Verteilte SystemeWintersemester 2018/2019Wintersemester 2018/2019

Prof. Dr. V. Turau | Institut für Telematik (E–17)Prof. Dr. V. Turau | Institut für Telematik (E–17) TUH

HTU

HH

Auf

gabe

nbla

tt

Aufgabenblatt

5 5

5555

/*** Start the listener. From now on Changes to local files will be reported.

** @throws IOException

* if starting the listener is not possible.

*/void startListening() throws IOException;

/*** Stop the listener. Changes to local files will not be reported anymore.

** @throws IOException

* if stopping the listener is not possible.

*/void stopListening() throws IOException;

}

Aufgabe 5.4 : Einschränkungen der ImplementierungDiskutieren Sie die Einschränkungen der Funktionalität dieser Implementierung eines verteilten Datei-systems. Wie hoch schätzen Sie den Implementierungsaufwand für die fehlende Funktionalität ein?

Verteilte SystemeVerteilte SystemeWintersemester 2018/2019Wintersemester 2018/2019

Prof. Dr. V. Turau | Institut für Telematik (E–17)Prof. Dr. V. Turau | Institut für Telematik (E–17) TUH

HTU

HH

Auf

gabe

nbla

tt

Aufgabenblatt

1 1

1111

Theorie 1: IP-Netzwerke undArchitekturen

Aufgabe 1.1 : WiederholungsfragenWelche der folgenden Aussagen sind wahr? Begründen Sie Ihre Entscheidung!

1. Bei TCP-Verbindungen werden alle Pakete über die selbe Route übertragen. Bei UDP können dieverschiedenen Pakete über unterschiedliche Routen übertragen werden.

2. TCP-Pakete sind stets größer als UDP-Pakete.

3. Im TCP/IP-Referenzmodell gehören HTTP und TCP zur Transportschicht.

4. Im OSI-Modell verdeckt die Transportschicht die Unzulänglichkeiten der Sitzungsschicht.

5. Ein Client kann über UDP mit einem Server kommunizieren, der nur TCP-Ports geöffnet hat.

6. Sofern nicht anders angegeben, wird TCP verwendet.

7. UDP-Pakete erreichen ihr Ziel schneller als TCP-Pakete.

8. UDP-Pakete können über IPv6 übermittelt werden.

9. Gemäß dem TCP-Protokoll werden empfangene IP-Pakete in der Reihenfolge an die Anwendungübergeben, in der sie von der IP-Schicht entgegengenommen wurden.

10. Bei der Verwendung von TCP ist zwar garantiert, dass kein Paket verloren geht, die Anwendungmuss aber dennoch prüfen, ob eventuell ein Paket doppelt empfangen wird

11. Bevor ein Datenpaket einer Anwendung mittels TCP an einen Zielrechner übertragen werdenkann, muss zunächst eine TCP-Verbindung aufgebaut werden

12. Auf UDP aufbauend lassen sich keine zuverlässigen Netzwerkdienste implementieren

13. Mehrere Client-Rechner können gleichzeitig je eine Socket-basierte Verbindung zu einem Serverhaben, wobei alle die gleichen Port-Nummern für Server und Client verwenden

Aufgabe 1.2 : UDP vs TCPVergleichen Sie die verbindungslose (UDP) und die verbindungsorientierte (TCP) Kommunikation fürdie Implementierung der folgenden Protokolle auf Applikationsebene bzw. auf der Darstellungsschicht.Welche Form der Kommunikation ist zu bevorzugen? Überlegen Sie dazu wie lange die Kommunikationdauert, bzw. wie häufig Anfragen gesendet werden und wie groß diese sind! Ist Performanz wichtigeroder die zuverlässige Datenübertragung? Sind Verzögerungen eher verkraftbar oder verlorene Pakete?

1. Virtueller Terminalzugriff (z.B. Telnet) 5. Entfernte Prozeduraufrufe (RPC)2. Dateiübertragung (z.B. FTP) 6. Namensauflösung (z.B. DNS)3. IP-Telefonie (z.B. über RTP) 7. Medien-Streaming (z.B. HTTP, RTP)4. Informationsbrowsing (z.B. HTTP)

Aufgabe 1.3 : Java SocketsLesen Sie die Dokumentation der Java-Klasse java.net.Socket und beantworten Sie folgende Fragen!

1. Wofür benötigt man die Methode setSoTimeout(int timeout)?

Verteilte SystemeVerteilte SystemeWintersemester 2018/2019Wintersemester 2018/2019Prof. Dr. V. Turau | Institut für Telematik (E–17)Prof. Dr. V. Turau | Institut für Telematik (E–17)

TUH

HTU

HH

Auf

gabe

nbla

tt

Aufgabenblatt

1 1

2222

2. Wofür dienen die Methoden setSendBufferSize(int size) und setReceiveBufferSize(intsize)? Müssen die Werte stets übereinstimmen?

3. Die API bietet bereits die Methode isBound() an. Ist eine Methode isConnected() dann nochnotwendig? Was sind die Unterschiede?

4. Bei TCP-Verbindungen müssen Acknowledgements versendet werden, warum gibt es keineentsprechende Methode in der API?

5. Wie kann man mit Hilfe der Methoden der Klasse java.net.Socket herausfinden, welche Portsbei einem gegebenen (entfernten) Server für die Kommunikation mit TCP geöffnet sind?

Aufgabe 1.4 : Serverimplementierung1. Ist es sinnvoll, die Anzahl der Threads in einem Server-Prozess zu begrenzen?

2. Server können als Multithreaded- oder Singlethreaded-Server implementiert werden. Gibt esSituationen, für die ein Singlethreaded-Server besser geeignet ist? Nennen Sie ein Beispiel.

Aufgabe 1.5 : Geschichtete ArchitekturenBetrachten Sie wie im folgenden dargestellt eine Prozesskette P1, . . . , Pn, die eine mehrschichtige Client-Server-Architektur implementiert. Prozess Pi ist ein Client von Prozess Pi+1, und Pi gibt dann eineAntwort an Pi−1 zurück, nachdem er eine Antwort von Pi+1 erhalten hat. Welche Probleme können beidieser Anordnung auftreten, wenn man als Anforderung kurze Antwortzeiten von Prozess P1 betrachtet?

Verteilte SystemeVerteilte SystemeWintersemester 2018/2019Wintersemester 2018/2019

Prof. Dr. V. Turau | Institut für Telematik (E–17)Prof. Dr. V. Turau | Institut für Telematik (E–17) TUH

HTU

HH

Auf

gabe

nbla

tt

Aufgabenblatt

2 2

1111

Theorie 2: Einführung Verteilte Systeme

Aufgabe 2.1 : Wiederholungsfragen1. Was ist ein Verteiltes System?

2. Nennen Sie prinzipielle Unterschiede zwischen einem Mehrprozessorsystem und einem VerteiltenSystem, welche die Erstellung von Anwendungen erschweren! Nennen Sie auch konkrete Problemedie sich hieraus ergeben können!

3. Erklären Sie die Begriffe speicherbasierte und nachrichtenbasierte Kommunikation!

4. Erklären Sie die Begriffe Skalierbarkeit und Transparenz!

5. Was ist der Unterschied zwischen synchroner und asynchroner Kommunikation?

Aufgabe 2.2 : SkalierbarkeitEin Dateiserver kann pro Sekunde 100 Dateizugriffe von Klienten bedienen. Um die Anzahl der Klientenzu erhöhen, werden weitere Server eingerichtet, diese bekommen Kopien der Dateien (d. h. der Serverwird repliziert). Leider benötigt ein Server jedoch zur Synchronisation eine Verbindung zu jedem anderenDateiserver. Auf Grund des damit verbundenen Aufwands kann ein Server pro Verbindung zu einemanderen Server 10 Dateizugriffe von Klienten pro Sekunde weniger bedienen.

1. Wie viele Server müssen mindestens laufen, um Klienten 250 Zugriffe pro Sekunde zuzusichern?

2. Bestimmen Sie die Funktion f (n), die die maximale Anzahl von Dateizugriffen pro Sekunde fürein System mit n replizierten Dateiservern angibt! Erläutern Sie Ihre Lösung!

3. Wie beurteilen Sie die Skalierbarkeit des Systems?

Aufgabe 2.3 : htonl()1. Zwei Computer A und B bekommen die gleiche Nachricht m zu gesendet. Sie besteht aus drei

unsigned integer-Werten, die jeweils aus vier Bytes bestehen. Auf Rechner A werden alle Datenim Big-Endian-Format interpretiert, Rechner B hingegen nutzt Little-Endian.

w1 = 0x0 0x24 0x1E 0x14 w2 = 0x01 0x02 0x03 0x04 w3 = 0x05 0x06 0x06 0x05

Welche Zahlen ergeben sich daraus auf den Rechnern A und B?

2. Schauen Sie sich die C-Funktion htonl an (z.B. über die Linux man-pages oder http://www.die.net/)!Was macht die Funktion? Diskutieren Sie eine Implementierung!

Aufgabe 2.4 : Zwei-Phasen-Commit ProtokollAls Transaktion wird eine Gruppe von logisch zusammenhängenden Datenoperationen, wie beispiels-weise Änderungen von Variablenwerten, bezeichnet. Eine Transaktion muss entweder vollständig odergar nicht ausgeführt werden. Alle zu einem Zeitpunkt durchgeführten Aktionen werden rückgängiggemacht (abort oder rollback), wenn während der Transaktion ein beliebiger Fehler auftritt. Tritt keinFehler auf, so werden am Ende die Änderungen dauerhaft gültig gemacht (commit). Die Durchführungvon Transaktionen in verteilten Systemen, d. h. die durchgeführten Aktionen finden auf unterschiedli-chen Rechnern statt, erfordert besondere Maßnahmen. Eine Möglichkeit ist das Zwei-Phasen-Commit

Verteilte SystemeVerteilte SystemeWintersemester 2018/2019Wintersemester 2018/2019Prof. Dr. V. Turau | Institut für Telematik (E–17)Prof. Dr. V. Turau | Institut für Telematik (E–17)

TUH

HTU

HH

Auf

gabe

nbla

tt

Aufgabenblatt

2 2

2222

Protokoll (2PC). Es beschreibt die Aktionen zur Beendigung einer verteilten Transaktion, d. h. es stelltden korrekten Abschluss der globalen Transaktion nach Abschluss der lokalen Transaktionen durch dieeinzelnen Rechner sicher.

Eine verteilte Transaktion wird dabei von einem Rechner, dem Koordinator durchgeführt. In der erstenPhase des Protokolls holt dieser die Zustimmung oder Ablehnung der Transaktion aller beteiligtenRechner ein. Nur dann, wenn alle Teilnehmer zustimmen, entscheidet der Koordinator auf commit,ansonsten lautet die Entscheidung abort. Ist die Entscheidung gefallen, so übermittelt der Koordinator inder zweiten Phase des Protokolls den Teilnehmer das Ergebnis. Gemäß diesem gemeinsamen Ergeb-nis führen entweder alle Teilnehmer ein commit oder ein abort durch. Danach wird der Koordinatorinformiert, dass die Aktion beendet wurde.

1. Geben Sie ein Beispiel für eine real existierende verteilte Transaktion an!

2. Wie können die Effekte einer Transaktion, d. h. schon durchgeführte Änderungen von Variablen,nach einem abort wieder rückgängig gemacht werden?

3. Beschreiben Sie eine Umsetzung des Zwei-Phasen-Commit Protokolls. Geben Sie dazu an, welcheNachrichten wann ausgetauscht werden. Nebenläufige Transaktionen müssen Sie dabei nichtbeachten. Verwenden Sie folgende Arten von Nachrichten: prepare, ready und failed für dieerste Phase und commit, abort und acknowledgment für die zweite. Zeichnen Sie hierzu auchein Ablaufdiagramm!

4. Gehen Sie davon aus, dass kein Rechner abstürzt und keine Kommunikationfehler auftreten.

a) Erklären Sie, warum die verteilte Transaktion korrekt durchgeführt wird!

b) Wieviele Nachrichten werden bei n Teilnehmern verschickt?

5. Analysieren Sie das Verhalten des Zwei-Phasen-Commit Protokolls für folgende Fehlersituationen

a) Absturz des Koordinators

b) Absturz eines Teilnehmers

c) verlorengegangene Nachrichten

Verteilte SystemeVerteilte SystemeWintersemester 2018/2019Wintersemester 2018/2019

Prof. Dr. V. Turau | Institut für Telematik (E–17)Prof. Dr. V. Turau | Institut für Telematik (E–17) TUH

HTU

HH

Auf

gabe

nbla

tt

Aufgabenblatt

3 3

1111

Theorie 3: Architekturen und HTTP

Aufgabe 3.1 : Wiederholungsfragen1. Erklären Sie den Unterschied zwischen Push und Pull Kommunikation!

2. Erläutern Sie den Begriff Cloud-Computing!

3. Was versteht man unter Ein-Weg-Kommunikation?

4. Was ist der Unterschied zwischen einem Framework und einer Bibliothek?

5. Warum wird HTTP als text-basiertes Protokoll bezeichnet, obwohl damit auch binäre kodierteDokumente wie Bilder im GIF Format übertragen werden können?

6. Was ist ein Cookie und welche Verwendung haben Cookies?

7. Nennen Sie mindestens vier Technologien zur Steigerung der Skalierbarkeit von HTTP!

8. Erläutern Sie das Prinzip Separation of Concerns!

Aufgabe 3.2 : Push- vs. Pull-KommunikationUm die Eigenschaften von Push- und Pull-Kommunikation zu vergleichen, betrachten Sie als Anwendungeinen Temperatursensor, der jede Sekunde eine Messung vornimmt. Folgende Fälle sollen jeweils mitPush- und mit Pull-Kommunikation implementiert werden.

1. Eine Anzeigetafel soll immer den aktuellen Wert anzeigen.

2. Eine externe Datenbank will jede Stunde den aktuellen Wert protokollieren.

3. Der aktuelle Wert soll bei Bedarf in einer App angezeigt werden.

4. Eine externe Einheit soll bei Überschreitung eine Grenzwerts einen Alarm auslösen.

� Bestimmen Sie jeweils die Netzwerklast, also wie viele Nachrichten pro Zeit gesendet werdenbei Push- und bei Pull-Kommunikation. Entscheiden Sie in welchem Fall Push- und wann Pull-Kommunikation im Vorteil ist.

� Untersuchen Sie im 4. Fall die Latenz, die Zeit vom Feststellen der Überschreitung der Temperaturbis zur Anzeige der Grenzüberschreitung. Die Verzögerung auf dem Netzwerk dürfen Sie dabeivernachlässigen. Wie hoch muss das Abfrageintervall der Alarmeinheit bei Pull-Kommunikationsein, damit der Alarm im Mittel 1 Sekunde später ausgelöst wird? Wann wird er spätestensausgelöst?

� Was lässt sich allgemein über das Verhältnis von Latenz und Netzwerklast bei Pull-Kommunikationaussagen?

Aufgabe 3.3 : Implementierung von Push-KommunikationWährend die Addresse des Servers den Clients im Allgemeinen bekannt ist und so eine Pull-Kommunikationeinfach durchgeführt werden kann, gilt dies meistens nicht andersherum, gerade bei mobilen oder heimi-schen Endgeräten.

� Welche prinzipiellen Möglichkeiten gibt es dennoch eine Push-Kommunikation durchzuführen?

Verteilte SystemeVerteilte SystemeWintersemester 2018/2019Wintersemester 2018/2019Prof. Dr. V. Turau | Institut für Telematik (E–17)Prof. Dr. V. Turau | Institut für Telematik (E–17)

TUH

HTU

HH

Auf

gabe

nbla

tt

Aufgabenblatt

3 3

2222

� Welchen Einfluss hat eine Firewall oder ein NAT (Network Address Translator) auf die Durchführ-barkeit?

� Nehmen Sie an, dass die Menge der Clients sehr groß ist. Welche Probleme ergeben sich hieraus?

Aufgabe 3.4 : HTTP1. Eine in ISO-Latin-1 kodierte Webseite enthält folgendes Formular:

<form action="/register.php" method="post">Name:<input type="text" name="name" size="40" /><br/>

E-Mail:<input type="text" name="e-mail" size="40" /><br/>

Geschlecht:<input type="radio" name="geschlecht" value="m" /> männlich<input type="radio" name="geschlecht" value="w" /> weiblich <br/>

Newsletter erhalten:<input type="checkbox" name="newsletter" value="yes" /><br/><input type="submit" value="Registrieren" />

</form>

Ein Benutzer gibt seinen Namen Bartholomäus Müller sowie seine Email-Adresse [email protected], setzt sein Geschlecht auf männlich und wählt Newsletter erhalten. Anschließend klickt er aufden Registrieren-Knopf. Welche Zeichenkette wird bei der Kodierung der Parameter erzeugt?

2. In welchem Teil der HTTP-Nachricht werden die Daten zurück an den Server gesendet?

3. Skizzieren Sie die komplette HTTP-Nachricht, die an den Server zurückgeschickt wird!

Aufgabe 3.5 : JSONNachfolgendes Beispiel demonstriert, wie mit Hilfe des Simple Java Toolkit for JSON ein Objekt imJSON-Datenformat kodiert werden kann:

JSONObject book = new JSONObject();book.put("Titel", "Algorithmische Graphentheorie");book.put("Auflage", new Integer(3000));book.put("Preis", new Double(39.80));book.put("Bestseller", new Boolean(true));book.put("Inhaltsangabe", null);

JSONObject author = new JSONObject();author.put("Vorname", "Volker");author.put("Nachname", "Turau");

book.put("Autor", author);

Wie sieht die resultierende JSON-Repräsentation aus, die mit book.toString() erzeugt wird?

Verteilte SystemeVerteilte SystemeWintersemester 2018/2019Wintersemester 2018/2019

Prof. Dr. V. Turau | Institut für Telematik (E–17)Prof. Dr. V. Turau | Institut für Telematik (E–17) TUH

HTU

HH

Auf

gabe

nbla

tt

Aufgabenblatt

3 3

3333

Aufgabe 3.6 : SessionsSession-IDs dienen dazu zu erkennen, dass verschiedene Anfragen vom selben Benutzer stammen.Normalerweise wird zu diesem Zweck bei der ersten Anfrage eines Benutzers eine Zufallszahl aus einemsehr großen Wertebereich erzeugt, die ihm vom Server zugewiesen wird, und die der Client bei jederAnfrage mitsendet.

Ein Software-Entwickler will die Erzeugung einer Zufallszahl für jede neue Session vermeiden. Um Zeitzu sparen, legt er bei Systemstart einen Pool von Zufallszahlen (d.h. von Session-IDs) an. Session-IDswerden bei Bedarf aus dem Pool entnommen und nach Beenden der Session dem Pool wieder hinzugefügtund sind damit wieder verfügbar.

Diskutieren Sie die Nachteile dieser Lösung!

Aufgabe 3.7 : Web-CachingDa Websites immer stärker an persönliche Vorlieben angepasst werden können (dynamische Erstellungnach Client-Vorgabe) ließe sich behaupten, dass Webcaches bald schon komplett veraltet sein werden.Trotzdem sieht es in absehbarer Zukunft nicht danach aus. Erläutern Sie die Gründe dafür!

Verteilte SystemeVerteilte SystemeWintersemester 2018/2019Wintersemester 2018/2019

Prof. Dr. V. Turau | Institut für Telematik (E–17)Prof. Dr. V. Turau | Institut für Telematik (E–17) TUH

HTU

HH

Auf

gabe

nbla

tt

Aufgabenblatt

4 4

1111

Theorie 4: RPC

Aufgabe 4.1 : Wiederholungsfragen1. Chain of Responsibility ist ein Softwaremuster, welches die Entkopplung des Auslösers einer

Anfrage mit seinem Empfänger realisiert. Erläutern Sie die Vorteile!

2. Worin liegt der wesentliche Unterschied bei Web-Anwendungen mit und ohne AJAX?

3. Nennen Sie Verfahren, mit denen Verteilserver eine Lastverteilung vornehmen. Was sind die Vor-und Nachteile der Verfahren?

4. Nennen Sie Vor- und Nachteile von Netzwerkcomputern!

Aufgabe 4.2 : RPCVerdeutlichen Sie sich, was bei Verwendung von RPC in Client-Stub und Server-Stub geleistet wird.Nehmen Sie dabei an, dass zwischen Server und Client eine Punkt-zu-Punkt-Verbindung über TCP/IPexistiert und nur synchrone Aufrufe erfolgen.

� Welche Informationen muss der Client mit einem entfernten Funktionsaufruf mindestens an denServer senden, damit dieser die gewünschte Funktion ausführen kann?

� Was passiert, wenn der entfernte Funktionsaufruf im Stub auf Serverseite empfangen wird?

� Warum ergibt es keinen Sinn, einen Zeiger (call-by-reference) an eine entfernte Funktion zusenden?

� Welche Informationen werden anschließend vom Server zurück an den Client geschickt? Ist esimmer notwendig, eine Bestätigung zu schicken?

Aufgabe 4.3 : Semantik von RPCSkizzieren Sie ein einfaches Protokoll, das eine Höchstens-einmal Semantik für einen Remote ProcedureCall implementiert. Erfüllt Ihr Protokoll auch die Genau-einmal Semantik? Wenn nicht, erläutern Sieweshalb!

Aufgabe 4.4 : Basic Encoding Rules (BER)Die Basic Encoding Rules (BER) stellen einen Standard für die Kodierung von Daten- und Typstrukturendar. Dabei wird jedes Element durch 3 Felder dargestellt: Typ (Type), Länge (Length) und Wert (Value).

Type Length Value

Verteilte SystemeVerteilte SystemeWintersemester 2018/2019Wintersemester 2018/2019Prof. Dr. V. Turau | Institut für Telematik (E–17)Prof. Dr. V. Turau | Institut für Telematik (E–17)

TUH

HTU

HH

Auf

gabe

nbla

tt

Aufgabenblatt

4 4

2222

Type Length

Value

Type Length Value

Type Length Value

Type Length Value

� Das Typ-Feld besteht aus 8 Bits, die in Leserichtung wie folgt interpretiert werden:

� Die ersten beiden Bits ordnen den Datentyp einer Sichtbarkeits-Klasse zu. In dieser Aufgabewird nur die Klasse Universal (Wert 00), der global definierten Datentypen verwendet.

� Das folgende Bit unterscheidet:I Primitive Datentypen: Wert 0, Value-Feld enthält Wert des Datums.I Komplexe Datentypen: Wert 1, Value-Feld enthält Unterelemente (z.B. Member-

Variablen oder Array-Felder).

� Die verbleibenden 5 Bits spezifizieren die Art des Datentypen. Wir beschränken uns hier auf:Nummer Bezeichner Bedeutung1 BOOLEAN Boolscher Datentyp2 INTEGER Vorzeichenbehafteter, ganzzahliger Datentyp4 OCTET-STRING Oktett-String, bzw. Folge von Bytes16 SEQUENCE Folge von Elementen unterschiedlichen Typs

� Um die Länge der folgenden Daten zu kodieren, gibt es drei Formen, die im Length-Feld auftretenkönnen. Wir beschränken uns hier auf:

� Kurzform: besteht aus einem Byte, dessen höchstes Bit auf 0 gesetzt ist. Die übrigen Bitsgeben die Anzahl der Bytes im Value-Feld an.

� Langform: das erste Bit hat den Wert 1, gefolgt von einem 7-Bit Integer-Wert, der die Längedes folgenden Integer-Wertes in Bytes ergibt. Letzterer enthält die Länge des Value-Feldes.

� Im Value-Feld steht der eigentliche Wert des Elements. Dabei werden Integer-Werte im Zweier-komplement dargestellt, true entspricht FFh und false 00h.

Beispiel:

T L V02h 01h 2Ah

00000010b 00000001b 00101010bInteger 1 Byte 42d

Übersetzen Sie nun die folgenden vier BER-kodierten Elemente:

� 02h 01h E6h

� 01h 01h FFh

� 02h 01h 00h

� 30h 82h 00h 0Ch 02h 01h 0Fh 04h 04h A0h 0Fh 02h 01h 01h 01h 00h

Kodieren Sie die folgenden Daten mittels BER:

� 20 (Integer)

� -80 (Integer)

� true (Boolean)

Verteilte SystemeVerteilte SystemeWintersemester 2018/2019Wintersemester 2018/2019

Prof. Dr. V. Turau | Institut für Telematik (E–17)Prof. Dr. V. Turau | Institut für Telematik (E–17) TUH

HTU

HH

Auf

gabe

nbla

tt

Aufgabenblatt

4 4

3333

� ’0x01 0x23 0x45’ (Oktett-String)

� Diese Sequenz: 23 (Integer), true (Boolean), ’0xE1 0x0A’ (Oktett-String)

Aufgabe 4.5 : Aufruf-SemantikGeben Sie an, für welche der folgenden Applikationen die Höchstens-einmal-Semantik oder dieMindestens-einmal-Semantik am besten geeignet ist. Begründen Sie Ihre Antwort.

1. Lesen und Schreiben von Dateien von einem Dateiserver

2. Programm kompilieren

3. Operationen beim Online-Banking

4. Veränderung einer Geräteeinstellung um 10%

5. Waren-Scanner an Kaufhauskassen

Aufgabe 4.6 : ProxyProxys können die Replikationstransparenz unterstützen, indem sie wie in der Vorlesung beschrieben,Methodenaufrufe an ein Objekt an jedes einzelne Replikat weiterleiten. Kann es in diesem Fall zuder Situation kommmen, dass ein Objekt das Ziel mehrerer replizierter Aufrufe wird und dadurch dieSemantik des Programmes geändert wird?

Verteilte SystemeVerteilte SystemeWintersemester 2018/2019Wintersemester 2018/2019

Prof. Dr. V. Turau | Institut für Telematik (E–17)Prof. Dr. V. Turau | Institut für Telematik (E–17) TUH

HTU

HH

Auf

gabe

nbla

tt

Aufgabenblatt

5 5

1111

Theorie 5: Entfernte Aufrufe & RMI

Aufgabe 5.1 : Wiederholungsfragen1. Welche Datentypen unterstützt JSON? Was bedeutet das für die Generierung einer Java Klasse für

ein JSON-Objekt?

2. Was ist eine Interface Definition Language?

Aufgabe 5.2 : Client-Server KommunikationEin Client schickt einen Druckauftrag an einen Server. Der Server sendet eine Bestätigung, dass derAuftrag eingetroffen ist. Stürzt der Server ab, schickt er nach erfolgreichem Neustart eine Nachrichtwieder da an alle Clients; somit erfahren die Clients vom Absturz und Neustart. Außerdem verschicktder Server eine Fertig Nachricht. Zur Vereinfachung wird angenommen, dass ein einmal angestoßenerAuftrag stets erfolgreich durchgeführt wird. Es werden zwei Alternativen für den Zeitpunkt, zu dem derServer eine Fertig-Nachricht schicken kann, betrachtet:

1. bevor der Druckauftrag angestoßen wird, oder

2. nachdem der Druckauftrag angestoßen worden ist.

Nach einem Absturz des Servers kann der Client eine der folgenden vier Strategien wählen, ob er eineWiederholung des letzten Druckauftrags schickt:

1. immer,

2. nie,

3. nur, wenn Fertig empfangen wurde,

4. nur, wenn Fertig noch nicht empfangen wurde.

Nehmen Sie an, dass die eine Wiederholung stets erfolgreich ist! Betrachten Sie alle möglichen Reihen-folgen, in denen beim Server die Ereignisse “Druckauftrag anstoßen”, “Fertig senden” und “Absturz”eintreten können! Unterscheiden Sie dabei zwischen: Erst drucken, dann fertig senden und erst fertigsenden, dann drucken!

Wenden Sie für jede der 6 Reihenfolgen die 4 oben genannten Wiederholungs-Strategien an und überlegenSie, wie viele Ausdrucke jeweils erzeugt werden! Mit welcher Strategie kann eine Exactly-once-Semantikerreicht werden?

Aufgabe 5.3 : AusnahmebehandlungJava und andere Sprachen unterstützen Exceptions, die geworfen werden, wenn ein Fehler auftritt. Wiewürden Sie Exceptions für entfernte Aufrufe implementieren?

Aufgabe 5.4 : RPC vs. RMIIn der Vorlesung wurden Java RMI als ein Vertreter für Remote Method Invocation vorgestellt.

1. Was ist der entscheidende Unterschied zwischen RPC und RMI?

2. Wie äußert sich dieser Unterschied in den Informationen, die vom Client bei einem entferntenMethodenaufruf an den Server gesendet werden?

Verteilte SystemeVerteilte SystemeWintersemester 2018/2019Wintersemester 2018/2019Prof. Dr. V. Turau | Institut für Telematik (E–17)Prof. Dr. V. Turau | Institut für Telematik (E–17)

TUH

HTU

HH

Auf

gabe

nbla

tt

Aufgabenblatt

5 5

2222

3. Wie wird die Übergabe von Objekten als Referenz bei entfernten Methodenaufrufen umgesetzt?

4. Es sei A eine Java Klasse, welche Serializable aber nicht Remote implementiert. Eine Methodem einer entfernten Schnittstelle hat den Rückgabetyp A. Welches Objekt bekommt ein Client beiAufruf von m zurückgegeben? Was passiert, wenn der Client ein solches Objekt ändert?

Aufgabe 5.5 : RMI RegistryJava RMI verwendet eine Registry zur Registrierung von Objekten. Verdeutlichen Sie sich die Syste-marchitektur einer verteilten RMI-Anwendung unter Einbeziehung der Registry. Skizzieren Sie dazuein Sequenz-Diagramm in dem Sie die Startphase von Server und Client sowie den ersten entferntenMethodenaufruf als Interaktionen zwischen Server, Client und Registry darstellen. Gehen sie davon aus,dass alle drei Komponenten jeweils auf einem separaten Host laufen.

1. Müssen alle RMI-Objekte des Servers in der Registry registriert werden?

2. Inwiefern trägt die Registry zur Ortstransparenz der entfernten Objekte bei?

Aufgabe 5.6 : ReplikationNehmen Sie an, dass ein nicht repliziertes Dokument mit der Größe von s Bytes r mal pro Sekunde vonunabhängigen Rechnern angefordert wird. Angenommen, das Dokument wird auf k unterschiedlichenServern repliziert und w mal pro Sekunde aktualisiert. Es wird vorausgesetzt, dass Aktualisierungen zujedem Replikat einzeln weitergeleitet werden. Weiterhin befindet sich in der Nähe jedes Abfragers einServer mit einem Replikat, so dass in diesem Fall keine Kosten für die Abfrage mehr anfallen. Ab wannsind die Kosten (gemessen an der genutzten Bandbreite) für das Verfahren mit der Replikation kleinerals die Kosten für das nicht replizierte Verfahren?

Verteilte SystemeVerteilte SystemeWintersemester 2018/2019Wintersemester 2018/2019

Prof. Dr. V. Turau | Institut für Telematik (E–17)Prof. Dr. V. Turau | Institut für Telematik (E–17) TUH

HTU

HH

Auf

gabe

nbla

tt

Aufgabenblatt

6 6

1111

Theorie 6: Zeitsynchronisation

Aufgabe 6.1 : Wiederholungsfragen1. Welche Strategien für das Zurückschreiben von modifizierten Daten aus einem Cache in einem

verteilten Dateisystem kennen Sie? Erläutern Sie die Strategien!

2. Erklären Sie die Begriffe DAS (Direct Attached Storage ), NAS (Network Attached Storage ) undSAN (Storage Area Network )!

3. Was versteht man unter Cache-Revalidierung und wie wird diese in HTTP umgesetzt?

4. Nennen Sie mindestens drei mögliche Verzögerungsquellen zwischen einem zeitaussendendenDCF77 Sender und den Prozessoren in einem verteilten System, die ihre internen Uhren nacheinem DCF77 Empfänger stellen, welcher die aktuelle Uhrzeit periodisch im LAN verschickt.

5. Einige Zeitalgorithmen bilden aus den Uhrzeiten einzelner Rechner das arithmetische Mittel undnehmen diesen Wert als neue Uhrzeit. Nennen Sie eine Schwachstelle dieser Vorgehensweise!

6. Betrachten Sie das Verhalten zweier Rechner in einem verteilten System. Beide haben Uhren, die1000-mal pro Millisekunde ticken sollen. Eine davon hält sich daran, aber die andere tickt nur 999Mal pro Millisekunde. Wie hoch ist der maximal eintretende Drift, wenn einmal pro Minute eineUTC-Aktualisierung eingeht?

Aufgabe 6.2 : Effizienz von CachesIn der unten gezeigten Kommunikationsinfrastruktur greifen die Teilnehmer des LANs (10MB/s) übereinen Link mit einer Kapazität von 2MB/s auf Web-Server im Internet zu. In der rechts dargestelltenVariante wird ein Web Cache (Cache Proxy) verwendet, d.h. alle Anfragen an einen Web-Serverwerden über den Web Cache bedient. Untersuchungen haben gezeigt, dass die Durchschnittsgröße einesangefragten Dokumentes 10KB ist. Ferner wurde bei der Variante ohne Web Cache eine Auslastung desLinks von 80% gemessen. Dabei wird angenommen, dass alle Übertragungen außer der Nutzlast derDatei (Anfragen, HTTP Overhead usw.) vernachlässigt werden können.

2 MB/sAccess Link

2 MB/sAccess Link

LAN Workstation

LAN Workstation10 MB/s 10 MB/s

PublicInternet

PublicInternet

1. Berechnen Sie die durchschnittliche Anfragerate und die Auslastung des LANs ohne Web Cache!

Verteilte SystemeVerteilte SystemeWintersemester 2018/2019Wintersemester 2018/2019Prof. Dr. V. Turau | Institut für Telematik (E–17)Prof. Dr. V. Turau | Institut für Telematik (E–17)

TUH

HTU

HH

Auf

gabe

nbla

tt

Aufgabenblatt

6 6

2222

2. Wie viele Anfragen müssen prozentual vom Web Cache bedient werden, damit die Auslastung desLinks auf 50% absinkt? Steigt oder sinkt der Datenfluss innerhalb des LANs? Beachten Sie dabei,dass der Cache regelmäßig aktualisiert werden muss.

Aufgabe 6.3 : Vergleich der Algorithmen: Cristian vs. BerkeleyVergleichen Sie den Algorithmus von Cristian mit dem Berkeley-Algorithmus. Erläutern Sie insbesonderedie folgenden Aspekte:

1. Ziel des Algorithmus

2. Vorgehen / Funktionsweise

3. Schwachstellen

Aufgabe 6.4 : Berkeley AlgorithmusDie Uhren in einem Verteilten System mit 5 Rechnern (Ri, iε{0..4}) werden durch Anwendung desBerkeley Algorithmus synchronisiert. Die Rechneruhren Ci haben zur Zeit T den Stand:

� C0(T): 1:01:07

� C1(T): 1:01:03

� C2(T): 1:01:09

� C3(T): 1:01:04

� C4(T): 1:01:07

Master sei Rechner R0. Die Round Trip Time (RTT) ist 2 Sekunden, d.h. ein Weg benötigt genau RTT2 .

1. Wenn die Synchronisation zum Zeitpunkt T vom Master initiiert wird, welche Antworten Ai erhälter dann von den Slaves und welche Korrekturen Di verteilt er anschließend? Hinweis: Die RoundTrip Time muss berücksichtigt werden.

2. Angenommen R2 verfügt zum Zeitpunkt T über die korrekte Uhrzeit (also C2(T) = T). Waswurde durch die Synchronisation dann bewirkt?

Aufgabe 6.5 : Quarzuhren und BerkeleyRechneruhren sind typischerweise quarzgesteuert. Recherchieren Sie die Nachteile von Quarzuhren undbetrachten Sie die Auswirkungen auf die Uhrensynchronisation mit dem Berkeley Algorithmus. Waswäre, wenn der Skew aller Rechneruhren gleichmäßig über einen begrenzten Wertebereich um Nullverteilt wäre und die Zahl der beteiligten Rechner sehr groß ist? Ist die Annahme über die Streuung derSkews zulässig und was sind die Konsequenzen?

Aufgabe 6.6 : Logische UhrenIn einem verteilten System mit vier Teilnehmern C0 bis C3 treten Sende- und Empfangsereignisse infolgender realer Reihenfolge auf:

Verteilte SystemeVerteilte SystemeWintersemester 2018/2019Wintersemester 2018/2019

Prof. Dr. V. Turau | Institut für Telematik (E–17)Prof. Dr. V. Turau | Institut für Telematik (E–17) TUH

HTU

HH

Auf

gabe

nbla

tt

Aufgabenblatt

6 6

3333

1. C0 sendet Nachricht an C2

2. C3 sendet Nachricht an C2

3. C0 sendet Nachricht an C1

4. C2 empfängt Nachricht von C0

5. C1 empfängt Nachricht von C0

6. Internes Ereignis bei C2

7. C2 sendet Nachricht an C3

8. C3 empfängt Nachricht von C2

9. C2 empfängt Nachricht von C3

10. Internes Ereignis bei C3

11. C1 sendet Nachricht an C0

12. C3 sendet Nachricht an C2

13. C0 empfängt Nachricht von C1

14. C2 empfängt Nachricht von C3

Bestimmen Sie die dazugehörigen Zeitstempel bezüglich Lamport-Uhren und bezüglich Vektor-Uhren!