Middleware and Distributed Systems
Sommersemester 2007Dr. Martin v. Löwis, Peter Tröger
Die Prüfungen finden am 23.7., 24.7 und am 17.9. statt, jeweils im Raum A-1.2.
In der Vorlesung liegt der Fokus auf der Vermittlung grundlegender Wirkmechanismen in Middleware-basierenden verteilten Systemen. Ausgehend von der Darstellung grundlegender Ansätze (z.B. Arten der Interprozesskommunikation) sollen die Gemeinsamkeiten moderner verteilter Infrastrukturen praktisch verdeutlicht werden. Studenten sollen in die Lage versetzt werden, mit dem Wissen aus der Vorlesung eigene komplexe verteilte Anwendungen, oder auch eigene Middleware-Komponenten optimal entwerfen und entwickeln zu können.
Behandelt werden u.a. folgende Themen:
- Interprozesskommunikation (Schnittstellenbeschreibung, RPC, MOM, strombasierende Kommunikation)
- Entwurfsmuster und Algorithmen in verteilten Infrastrukturen (MDA, Ressourcenmanagement, Microkernel)
- Namensdienste (JNDI, DNS, X.500)
- Registries (UDDI, Corba)
- Architekturmuster (OMA, ESB, SOA)
- Adaptive Middleware
- Sicherheit (u.a. X.509, Kerberos)
- Koordination verteilter Aktivitäten (u.a. Gruppenkommunikation)
- Peer-to-peer-Systeme
- Uhrensynchronisation
- Transaktionen
- Weitverteilte Systeme (Cluster / Grid Computing)
Begleitet wird die Veranstaltung von einem Praktikum, in dem die Teilnehmer selber Middleware entwickeln. Diese Projekte können allein oder zu zweit bearbeitet werden; es gibt im Laufe des Semesters 4 Teilaufgaben.
Termine:
Montag, 17:00 - 18:30 Uhr, Raum A-1.1 Mittwoch, 13:30 - 15:00 Uhr,
Raum A-2.2
Literatur
- George Coulouris, Jean Dollimore, Tim Kindberg. Distributed Systems
- Andrew S. Tanenbaum. Distributed Operating Systems
Vorlesungen
- Introduction
- System Models
- Messaging and Remote Procedures
- Message-Oriented Middleware
- Inter-Prozess Communication With XML
- Naming and Directory Services
- Patterns
- Time
- Real-time Middleware
- Adaptive and Reflective Middleware
- P2P Systems
- Coordination
- Security
- Fault Tolerance
- Cluster and Grid Computing
- Transactions
Übungen
Inhalt der Übungen ist die Beschäftigung mit TWP 1.
1. Übung
Vorstellungstermin: 16. 5. 2007
- Implementieren Sie einen Klienten und einen Server, der das
Echo-Protokoll implementiert, welches wie folgt definiert wird:
protocol Echo = id 2 message Request=0 string text; message Reply=1 string text; int number_of_letters;
In diesem Protokoll sendet der Klient eine Folge von Request-Nachrichten, auf die der Server mit passenden Reply-Nachrichten antwortet. - Testen Sie Ihren Klienten gegen den Server, der auf :80 läuft.
- Extrahieren Sie aus Ihren Klienten eine Bibliothek, die zur Entwicklung von Klienten und Servern beliebiger Protokolle geeignet sind.
- Wählen Sie ein Compiler-Framework (Empfehlung: ANTLR), und formulieren Sie in diesem Framework einen Akzeptor für TDL.
2. Übung
Vorstellungstermin: 6. 6. 2007
- Vervollständigen Sie Ihren TDL-Akzeptor zu einem Compiler, mit dessen Hilfe beliebige TDL-Protokolle implementiert werden können.
- Implementieren Sie einen Klienten für die TFS-RPC-Schnittstelle
(TFS=The File System); TFS basiert auf dem TWP-Protokoll 1 (RPC) und
kann durch folgende OMG-IDL-Schnittstelle definiert werden.:
typedef sequence<string> path; typedef sequence<string> filelist; struct list_result filelist directories; filelist files; ; struct stat_result int size; int a; /* seconds since the Unix epoch */ int atime; ; typedef int filehandle; typedef int monitor_handle; typedef sequence<octet> binary; typedef sequence<octet, 4> IPAddress; interface TFS #pragma version "10.5.07" /* File reading and writing */ /* path: root directory is an empty sequence */ /* mode: 0 - read-only, 1 - truncate-and-write, 2 - append-write */ filehandle open(in path directory, in string file, in int mode); binary read(in filehandle fh, in int count); void write(in filehandle fh, in binary data); void seek(in filehandle fh, in int offset); oneway void close(in filehandle fh); /* File and directory information */ list_result listdir(in path directory); stat_result stat(in path directory, in string file); /* File and directory manipulation */ void mkdir(in path directory); void rmdir(in path directory); void remove(in path directory, in string file); /* FAM */ /* recursive: 0 - only this directory, 1 - also subdirectories */ monitor_handle monitor(in path directory, in int recursive, in IPAddress host, in int port); void stop_monitoring(in monitor_handle h); ;
Die Implementierung eines TFS-Servers steht Ihnen frei. - Implementieren Sie eine Version von du(1) für TFS. Testen Sie Ihren TFS-Klienten gegen :80
- Implementieren Sie einen Konsumenten für TFS-FAM (FAM=File
Alteration Monitor), welches wie folgt definiert ist:
protocol FAM = ID 4 sequence<string> path; /* Messages sent for file creation, deletion, and change. */ message Changed = 0 path directory; string filename; message Deleted = 1 path directory; string filename; message Created = 2 path directory; string filename; /* Messages sent when a file is being executed on the operating system */ message StartExecuting = 3 path directory; string filename; message StopExecuting = 4 path directory; string filename;
3. Übung
Vorstellungstermin: 27. 6. 2007
Die Vorstellung findet in Form eines Interoperabilitätsworkshops statt.
- Ändern Sie Ihren TFS-Klienten derart, dass die Verbindung zum
Server auf Grund des DNS-SRV-Eintrags für tfs.dcl.hpi.uni-potsdam.de
erstellt wird. Verwenden Sie dazu eine geeignete DNS-Bibliothek oder
entwickeln Sie einen eigenen DNS-Klienten.
Change your TFS client implementation to use the DNS SRV record entry of tfs.dcl.hpi.uni-potsdam.de for the server connection setup. Use an appropriate DNS library, or develop your own DNS client.
- Definieren und registrieren Sie eine TWP-Erweiterung zur
Kommunikation logischer Thread-Kennungen. Diese Thread-Kennungen
sollen zur Verfolgung von RPC-Aufrufen im verteilten System,
insbesondere zur Erkennung von Rekursionen geeignet sein.
Define and register your TWP extension for the communication of logical thread IDs. These thread IDs should be used to trace RPC calls in a distributed application setup, especially to detect recursive calls between the components.
- Implementieren Sie Server und Client für das Calculator-Protokoll, und berechnen Sie
mit Hilfe Ihrer Implementierung (6!+3)*4. Beachten Sie insbesondere
die Unterstützung extern implementierter Operationen.
Implement server and client for the calculator protocol, and compute the expression (6!+3)*4 with your implementation. Take care to support the computation of externally implemented operations.
- Erweitern Sie Ihre Server-Implementierung um logische
Thread-Kennungen, und um eine Trace-Funktionalität, die einen
gegebenen Logging-Dienst
mit Daten beliefert. Wahlweise können Sie Ihren eigenen
Logging-Dienst realisieren, oder den auf :80 vorhandenen verwenden. Jeder Logging-Dienst
stellt den Zusammenhang multipler Datensätze anhand logischer
Thread-Kennungen dar.
Integrate logical thread IDs in your server implementation, and use them for a trace functionality that relies on a given TWP logging protocol server. You can implement your own logging server, or use the existing one on :80. Every logging service should vizualize the relation of multiple log records by the common thread ID.
4. Übung
Vorstellungstermin: 16. 7. 2007
- Erweitern Sie ihre TWP-Protokollimplementierung derart, dass die
Signierung ganzer TWP-Nachrichten unterstützt wird. Ein Client
sendet dafür vor der eigentlichen Nachricht das Zertifikat als
eigene
Extension-Nachricht. Es können mehrere Zertifkate gesendet
werden, in diesem Fall wird das letzte Zertifikat verwendet. Die
Signatur
wird aus den kodierten TWP-Daten der Nachrichtenfelder ermittelt.
Berücksichtigen Sie die möglichen Authentifizierungsfehler.
Die Implementierung eines entsprechenden Servers steht Ihnen
frei.
Um die Kompatibilität der verwendeten PKI-Bibliothek zu prüfen, stehen Ihnen Testdaten zur Verfügung: Zertifikat im .p12-Format und .der-Format, Klartext-Daten, Korrekte Signatur
Extend your TWP protocol implementation to support the signing of complete messages. The certificate is send before the signed message as dedicated extension message. It is possible to send multiple certificates, in this case the last one is used. The signature is computed from the encoded TWP message fields data. Consider the possibility of authentication error messages as response. You are free to also implement an according server.
To check the compatibility of your PKI library, you can use the following test data: certificate, signed data, correct signature
- Testen sie Ihre Implementierung mit dem Echo-Server auf :80.
Momentan wird keine Überprüfung der Zertifizierungskette
vorgenommen.
Test your implementation with the existing TWP-Echo server at :80. Currently, the certificate chain is not checked by the server.