Middleware

Praktikum im Hauptstudium / WS 2008/2009 / CS 5850

Angaben

Dozent
Prof. Dr. Franz J. Hauck
Betreuer
Jörg Domaschka, Jan-Patrick Elsholz, Vladimir Nikolov, Holger Schmidt, Christian Spann
Termine
Vortreffen am Montag, 20.Oktober, 09:00 s.t. bis 10:00 Uhr im Raum O27/342
Vortreffen am Montag, 20.Oktober, 14:15 Uhr im Raum O27/342
Präsenztermin am Montag, 17.November, 14:15 Uhr im Raum O27/342
Zwischenpräsentation am Montag, 12.Januar, 14:15 Uhr im Raum O27/342
Abschlusspräsentation am Montag, 09.Februar, 14:15 Uhr im Raum O27/342
SWS
4
Leistungspunkte
8
Zuordnung
Dipl. Inf.: Praktikum
Ba. Inf. (PO 2001): Praktikum
Ma. Inf. (PO 2001): Praktikum
Dipl. Medieninf.: Praktikum

Themengebiete

Einzelthemen nach Gebiet

Instant-X: Multimedia Middleware

Ziel von Instant-X ist die Entwicklung einer Middleware-Plattform, die Anwendungen zur spontanten und direkten Kommunikation über das Internet durch das Bereitstellen gemeinsamer Protokollimplementierungen und Verarbeitungsmechanismen unterstützt. Dadurch wird die Flexibilität erhöht und die Interoperabilität verbessert. Generische Anwendungen können z.B. beim Instant-Messaging mit verschiedenen Protokollen arbeiten. Wichtigste Voraussetzung dafür ist die Entwicklung einer API, die abstrakte Funktionen zur Signalisierung, Verhandlung, Reservierung und Datenübertragung anbietet, ohne dass deren konkrete Implementierung bekannt sein muss. Weiterhin werden die Funktionen der Middleware und auch die Anwendungen in dynamisch nachladbare, aktualisierbare und erweiterbare Komponenten gepackt.

OSGi ist eine offene Dienstplattform und implementiert ein leichtgewichtiges Komponentenmodell. Sie ist das Basis-Komponentenframework für Instant-X. Komponenten werden in Form von in Java entwickelten Bundles definiert. Bundles können Services enthalten und zur Laufzeit installiert, gestartet, gestoppt und deinstalliert werden. OSGi ist ein de-facto Standard und wird unter anderem auch von Eclipse zur Implementierung von Plugins verwendet.

OSGi Declarative Services

Betreuer: Holger Schmidt

Im Rahmen einer abgeschlossenen Arbeit wurde OSGi um eine dynamische Ladefunktion erweitert, welche das dynamische Suchen, die automatische Selektion und Installation von einer Quelle in einem Peer-to-Peer Netzwerk unterstützt. Im Rahmen des Praktikums soll diese Ladefunktion im Sinne der OSGi Declarative Services Spezifikation erweitert werden. OSGi Declarative Services ermöglichen die Spezifikation von Service-Abhängigkeiten in OSGi. Zum Einstieg in die Ladeplattform soll zuerst die simultane Übertragung von Bundle-Code von mehreren Quellen zur Installation eines Bundles implementiert werden (vgl. File-Sharing in einem Peer-to-Peer Netzwerk). Anschließend soll die Ladeplattform Declarative Service Beschreibungen von Bundles verarbeiten können um diese in die automatische Auflösung von Bundleabhängigkeiten mit einzubeziehen.

NMM-Integration

Betreuer: Holger Schmidt, Jan-Patrick Elsholz

NMM ist eine in C geschriebene Multimedia-Middleware der Universität des Saarlands. Diese Middleware wurde in einem Hauptseminar im vergangenem Semester bereits vorgestellt und soll in diesem Praktikum als Datenübertragung für die institutseigene Entwicklung Instant-X genutzt werden. Dazu ist es notwenindig, Fremcode - in diesem Falle die Programmiersprache C - in dem Komponentenframework OSGi einzubetten und die entsprechende API zu wrappen.

Implementierung einer Sitzungskomponente

Betreuer: Holger Schmidt, Jan-Patrick Elsholz

In einer Diplomarbeit wurde im vergangenen Semester die generische API für eine Sitzungskomponente auf der Basis von SIP entwickelt. In Bezug auf die allgemeine Verwendbarkeit ist eine Wiederverwendung dieser API für andere Sitzungsprotokolle notwendig. Dieses Praktikum soll versuchen, ein anderes Sitzungprotokoll mit Hilfe dieser API in eine Komponente zu gießen und die dabei gemachten Erfahrung dokumentieren.

SAMProc: Selbstadaptive mobile Prozesse

Ziel des SAMProc Projekts ist die Entwicklung einer Middleware-Infrastruktur zur Beherrschbarkeit von mobilen verteilten Anwendungen in ubiquitären Umgebungen. Hierbei können sich die Schnittstelle einer Anwendung und deren Implementierung an den Kontext adaptieren. Damit lassen sich spezifische Arbeitsphasen repräsentieren sowie Funktion und Zustand an die Umgebung anpassen (z.B. können sicherheitskritische Daten in nicht vertrauenswürdigen Umgebungen entfernt werden).

Adaption: Konzept für Zustandsvarianten

Betreuer: Holger Schmidt

Zur Adaptierung des Zustands einer Anwendung muss dieser im Netzwerk gespeichert werden. Hierdurch kann je nach Arbeitsphase der benötigte Zustand (bestimmte Variablen) geladen und anschließend verarbeitet werden. Dieser Verarbeitungsschritt kann auf resourcenbeschränkten Geräten (z.B. PDA, Handy) jedoch wichtige Ressourcen verbrauchen (z.B. Batterie, CPU, Speicher). Im Rahmen des Praktikums soll ein Konzept für mehrere Varianten von Zustand entwickelt werden. Hierduch soll es möglich sein entweder Zustand in seiner bisherigen Weise zu laden (einzelne Zustandsvariablen), aber auch z.B. aggregierten Zustand, so dass die initiale Verarbeitung auf dem Gerät wegfallen kann. Hierbei ist sicherzustellen, dass der Zustand trotzdem konsistent verwaltet werden kann.

Dynamisches Deployment mit OSGi

Betreuer: Holger Schmidt

Im Rahmen einer abgeschlossenen Arbeit wurde OSGi um eine dynamische Ladefunktion erweitert, welche das dynamische Suchen, die automatische Selektion und Installation von einer Quelle in einem Peer-to-Peer Netzwerk unterstützt. Im Rahmen des Praktikums soll OSGi mit dieser Ladefunktion in die SAMProc Architektur integriert werden. Hierdurch soll das dynamische Laden von nicht vorhandenem Code zum Deployment eines Web Services zur Laufzeit ermöglicht werden.

Wissensplattform

In diesem Themengebiet geht es um das Intranet des Institus für Verteilte Systeme (TWiki). Dieses soll im Rahmen zur Verbesserung der Lehre für die Kooperation zwischen Studenten, Mitarbeitern und Professoren aufbereitet werden. Im Praktikum soll die Programmiersprache PERL vermittelt werden.

Lernpfad Modul

Betreuer: Jan-Patrick Elsholz

Lern- oder Wissenspfade sind lineare Pfade durch ein Wiki-System. Sie dienen zur eigenen Übersicht, zum schnelleren Wiederauffinden und zum Lernen bzw, Wiederholen von Vorlesungsinhalten. Es existiert eine minimale Basisimplementierung. Diese soll optisch angepasst werden, User logging integriert werden und das automatische Erfassen der verschiedenen Pfaden ermöglicht werden.

Inhalt

Betreuer: Jan-Patrick Elsholz

Idealerweise sollte der Praktikant im vorherigen Semester eine Vorlesung aus dem Bereich Verteilte Systeme gehört haben und diese als Knowledge Objekte in die Wissensplattform integrieren. Knowledge Objekte sind spezielle Wiki-Seiten, die sich in einen Lernpfad integrieren lassen und deren Darstellung kontextspezifisch angepasst werden kann. Dazu muss diese Vorlesung zunächst für die Wissensplattform neu strukturiert werden und anschließen als Knowledge Objekt aufbereitet werden.

Replikation und Fehlertoleranz

Allgemeines

An der Universität Ulm wird im Rahmen des XtreemOS Projekts eine Java-Software entwickelt, die sogenannte Virtuelle Knoten realisiert. Virtuelle Knoten bieten Fehlertoleranz indem sie eine als verteiltes Objekt realisierte Anwendung auf mehreren physikalischen Knoten gleichzeitig zur Ausführung bringen. Für den entfernten Nutzer einer solchen Anwendung ist diese Redundanz jedoch völlig transparent. Ein Nachteil von Replikationssysteme ist der erhöhte Aufwand, der sich auch in der Latenz wiederspiegelt. Aus diesem Grund ist es erstrebenswert, die nebenläfige Ausführung von Anfragen zuzulassen. Eine zentrale Anforderung für den erfolgreichen Einsatz von Replikation ist jedoch in der Regel Determinismus, der durch nebenläfige Ausführung mit Standardschedulern jedoch zerstört wird. Aus diesem Grund wurden einige Schedulingalgorithmen entwickelt, die ein deterministisches Scheduling garantieren und dennoch Nebenläfigkeit zulassen.

Jede in diesen Praktika programmierte Softwarekomponente muss unter einer Open Source Lizenz entwickelt werden, da sie potentiell im Rahmen vom XtreemOS zum Einsatz kommt.

Lock-prediction für deterministische Scheduler mit Sourcecode-Analyse
Betreuer: Jörg Domaschka

Bisher wird der Programmfluss der Anwendung 1:1 auf Scheduleraufrufe abgebildet. Dies hat den Nachteil, dass viel Information, die im Programmfluss steckt und Potential zur weiteren Optimierung bietet nicht genutzt wird. Zum Beispiel könnte die Nebenläfigkeit oft erhöht werden, wenn der Scheduler über zukünftige Lockanfragen frühzeitig Bescheid wüsste; oder aber bekannt ist, ab welchem Zeitpunkt ein Thread keine weiteren Locks mehr anfordern wird. Details wurden bereits veröffentlich. Im Verlauf des Praktikums sollen erste Optimierungen implementiert werden und ggf. deren Auswirkungen gemessen werden.

Lock-prediction für deterministische Scheduler ohne Sourcecode-Analyse
Betreuer: Christian Spann

Auch ohne eine Analyse des Quellcodes ist es möglich, den Scheduler zu Optimieren. Dazu zeichnet eine Monitoringkomponente den zu den verschiedenen Methodenaufrufen gehörenden Lockverlauf auf. Hat die Komponente genügend Daten gesammelt, um verlässliche Aussagen über den möglichen Lockverlauf zu treffen, kann durch einige Modifikationen im Scheduler die Performanz erhöht werden. Hierbei ist es jedoch unbedingt notwendig dass der Determinismus im Algorithmus erhalten bleibt und auch die Optimierungsentscheidungen der Monitorinkomponente deterministisch sind. Im Verlauf des Praktikums soll diese Komponente implementiert und getestet werden.

Sicherheit und Erweiterte Fehlertoleranz
Betreuer: Jörg Domaschka

Virtuelle Knoten bieten im derzeitigen Implementierungszustand lediglich Fehlertoleranz für crash-failure Verhalten. Allerdings verwendet die Software bisher keinerlei Sicherheitsmechanismen, so dass es relativ einfach ist das System durch falsche bzw. manipulierte Nachrichten zum Absturz zu bringen oder eine Fehlfunktion zu provozieren. Im Verlauf des Praktikums soll ein Konzept erstellt und implementiert werden, wie die bestehende Software gegen Angriffe von außen sicher gemacht werden kann, d.h. Integrität und Vertraulichkeit der Daten sichergestellt werden kann. In einem zweiten Schritt soll das Konzept auf Byzantinische Fehler erweitert werden. In diesem Fehlermodell können sich Replikate beliebig verhalten und so versuchen dem System zu schaden.

Byte-Code Manipulation zur Ladezeit
Betreuer: Jörg Domaschka

Für Implementierung replizierter Systeme gibt es eine Vielzahl von Einschränkungen. So ist zum Beispiel die Verwendung nicht-deterministischer Methoden (Uhrzeit, Zahlengenerator) verboten, ebenso wie die Erzeugung von Threads. Dies erschwert die Replikation von Legacy-Anwendungen und auch die VErwendung von Klassen aus den Java Libraries. Eine naheliegende Option um diese dennoch nutzen zu können ist die Verwendung von Byte-Code Rewriting. Dieses kann entweder statisch oder dynamisch erfolgen. Statisches Rewriting hat - zumindest mit Blick auf die Libraries - den Nachteil, dass die zur JVM gehörenden Klassen verändert werden müssen, was Auswirkungen auf alle Programme hat, die diese JVM benutzen. Dynamisches Rewriting zur Laufzeit hingegen beschränkt die Manipulationen auf eine Instanz der JVM. Die Java Spezifikation bietet mit der JVM-TI Erweiterung einen Mechanismus um Klassen beim Laden abzufangen und deren Code zu verändern. Im Laufe des Praktikum soll ein Prototyp entstehen, der bestimmte Methodenaufrufe erkennt (z.B. wait/notify) und diese auf den Aufruf einer anderen Methode umlenkt. Die Kosten für diese Operation sollen anschließend gemessen werden. Für die Bearbeitung dieser Aufgabe müssen evtl. C/C++-Kenntnisse eingesetzt werden!