Gliederung - Uni Kassel

Werbung
Studiengang Informatik, Universität Kassel
Ibis
Jan Frederik Naujoks
Gliederung:
1. Einleitung
2. Funktionalitäten und Features
3. Ibis-Architektur, -Einbindung und -Portability Layer
3.1 Architektur
3.2 Ibis Implementierungen und Applikationen
3.3 Kommunikation über den Ibis Portability Layer
4. Anwendungsentwicklung mit Ibis
4.1 Satin
4.2 Ibis RMI und GMI
5. Ibis und Middleware
6. Portabilität
7. Nutzung und Weiterentwicklung
8. Fazit
Quellen
1
1. Einleitung
Eines der Hauptprobleme bei der Erstellung von Anwendungen, die auf Grids ausgeführt
werden sollen, ist, dass Grids aus einer Vielzahl von Architekturen und Netzwerken bestehen
können. Es ist also notwendig, dass die Applikation, die man ausführen möchte, alle diese
Architekturen unterstützt und auf die unterschiedlichen Anbindungen im Netzwerk reagiert,
bzw. mit diesen umgehen kann.
Hinzu kommt, dass die Kommunikation zwischen den einzelnen Teilen bzw. Instanzen der
Anwendung möglichst schnell und effizient ablaufen muss.
Eine Möglichkeit, auf die Heterogenität der Grids und den damit verbundenen Aufwand
beim Erstellen von Anwendungen zu reagieren, ist die Verwendung von Java und der Java
Virtual Machine. Durch die Verfügbarkeit der Java Virtual Machine für eine große Anzahl
unterschiedlicher Architekturen und Betriebssysteme sind in Java geschriebene Programme
von sich aus portabler als z.B. in C oder FORTRAN geschriebene.
Ein Nachteil von Java, die niedrigere Performance im Vergleich zu C/C++, verschwindet durch
moderne Just In Time Compiler. Diese erreichen Ausführungszeiten, die mit denen von CProgrammen vergleichbar sind.
Weiter spricht für Java, dass Möglichkeiten zum parallelen und verteilten Rechnen bereits
integriert sind.
Eine Lösung für das Problem der schnellen Kommunikation bietet Java jedoch nicht. Java
bietet zwar mit Remote Method Invocation (RMI) eine Technologie zur Kommunikation
zwischen verschiedenen Virtual Machines an, RMI erzeugt jedoch einen massiven Overhead
und ist viel weniger effizient als MPI oder RPC.
Um die Vorteile von Java zu nutzen und die Schwächen auszugleichen, wurde das Projekt Ibis
begonnen.
Bei Ibis handelt es sich um ein Open Source Java-Grid-Software-Projekt welches von der
Computer Systems group (Teil des Computer Science department), an der Vrije Universiteit
in Amsterdam (Niederlande), entwickelt wurde.
Ziel von Ibis ist es, eine Java Programmierumgebung für Grids zur Verfügung zu stellen, die
die Flexibilität von Java erhält und hocheffiziente Kommunikation bietet.
Im Abschnitt 2 dieses Dokuments soll ein kurzer Überblick über die verschiedenen, von Ibis
bereitgestellten, Funktionalitäten und Features gegeben werden. In Abschnitt 3 wird kurz
auf die Ibis zugrunde liegende Architektur eingegangen. Abschnitt 4 stellt kurz einige der
Programmiermodelle vor, Abschnitt 5 behandelt die Verwendung von Middleware, Abschnitt
6 geht auf die Portabilität von Ibis-Anwendungen ein und Abschnitt 7 gibt einen kurzen
Überblick wie Ibis bereits verwendet wird und inwiefern das Projekt aktiv ist.
2
2. Funktionalitäten und Features
Quellen: [1][2][4]
Das Herausstellungsmerkmal von Ibis ist, dass es die Flexibilität beziehungsweise
Plattformunabhängigkeit von Java bietet und diese noch erweitert. Ibis läuft auf jeder
Standard-Java Virtual Machine, kann jedoch auch systemnative, optimierte Compiler
verwenden. Für die Kommunikation gilt das Gleiche: Ibis kann sowohl auf TCP/IP und UDP
zurückgreifen oder systemnahe Techniken wie MPI oder Myrinet GM verwenden.
Ein weiteres Merkmal von Ibis ist die Flexibilität der Kommunikation durch den Ibis
Portability Layer. Dieser bietet verschiedene Interfaces an, die die Kommunikationsebene
abstrahieren. Durch diese Abstraktion ist es möglich, Anwendungen unabhängig von später
verwendeten, eventuell nativen, Kommunikationsprotokollen zu erstellen.
Über verschiedene, zur Laufzeit austauschbare Ibis Portability Layer-Implementierungen ist
es möglich, die für die jeweilige Umgebung und Anwendungsanforderung beste
Kommunikationsmethode zu verwenden.
Ibis kann sowohl in ausfallsicheren Netzen eingesetzt werden als auch in Netzen, in denen
nicht sichergestellt ist, dass versendete Nachrichten den Empfänger erreichen, bzw. eine
erwartete Nachricht eintrifft.
Dies beinhaltet auch, dass Ibis sich dynamisch an die Anzahl der Knoten im Grid anpassen
kann.
Weiter wurde im Rahmen von Ibis ein zero-copy Protokoll für Java implementiert um den,
bei der Kommunikation entstehenden, Overhead zu reduzieren. Zero-copy Protokolle
nehmen sich dem Problem an, dass bei der Kommunikation mit vielen Clients identische
Nachrichten oft mehrfach im Speicher vorliegen. Durch das nichtvorhandensein dieser
Kopien werden Rechen- und Speicherkapazitäten frei. [6]
Weitere Bestandteile des Ibis Projektes:
•
Verschiedene Programmiermodelle, die alle in ein System integriert sind und
gleichzeitig verwendbar sind:
o RMI – Java-Equivalent zu RPC
o GMI – RMI mit Gruppenkommunikationserweiterung
o RepMI – Java-Erweiterung für effiziente, replizierbare Objekte
o Satin – stellt devide-and-conquer und replicated-worker-Programmiermodelle
zur Verfügung, speziell für Grid-Systeme gedacht.
•
Das Java Grid Application Toolkit (JavaGAT) bietet verschiedene Schnittstellen zur
Überwachung und Wartung von Grid-Applikationen. JavaGAT wird zwischen
3
Applikation und Grid-Middleware geschaltet. Eine Unterstützung verschiedener
Middleware-Systeme (unter anderem Globus, GridLab, SSH und Zorilla) ist bereits
vorhanden. Durch Verwendung/Entwicklung von Plugins (sog. adaptors) ist es
möglich, weitere Systeme anzubinden.
•
Zorilla, eine Peer-To-Peer-Grid-Middleware. Zorilla implementiert zum Beispiel
Scheduling, Dateiübertragung und Sicherheit. Es konfiguriert sich weitestgehend
selbst, die Peers werden selbständig zu einem Grid organisiert.
3. Ibis-Architektur, -Einbindung und -Portability Layer
In diesem Abschnitt soll die Flexibilität von Ibis weiter aufgezeigt werden. Hierzu wird kurz
auf die Architektur von Ibis eingegangen. Weiter wird kurz die Einbindung von Ibis in eine
Anwendung gezeigt. Abschließend soll dieser Abschnitt noch einen kurzen Einblick in den Ibis
Portability Layer geben.
3.1 Architektur
Quellen: [4]
Zentraler Bestandteil von Ibis ist der Ibis Portability Layer. Dieser stellt die Schnittstellen
zwischen der Anwendung und ihrer Laufzeitumgebung und Kommunikationsprotokollen
bereit (siehe Abbildung 1). Dadurch wird es möglich Anwendungen auf unterschiedlichen,
auf spezielle Architekturen optimierte, Ibis-Implementierungen einzusetzen. Ziel ist, dass
der Eisatz von Ibis beziehungsweise Java keinesfalls die Nutzung schneller und optimierter
Techniken unterbindet, sondern diese bereits vorhandenen Ressourcen nutzt.
Anwendungen, die Ibis verwenden, können zwar direkt an den Ibis Portability Layer
angebunden werden, die üblichere Vorgehensweise ist jedoch die bereitgestellten Modelle
(RMI, GMI, Satin, MPJ, RepMI (noch in Entwicklung)) zu verwenden.
Abbildung 1
Original Quelle: http://www.cs.vu.nl/ibis/images/ibis-design.png (Stand 15.01.2007)
4
3.2 Ibis Implementierungen und Applikationen
Quellen: [4][2]
Wie bereits klargestellt, kann es für unterschiedliche Architekturen unterschiedliche
Implementierungen von Ibis geben. Genauso kann es auch mehrere Implementierungen für
eine Architektur geben. Welche Implementierung von Ibis für die Anwendung genutzt wird,
entscheidet sich während der Laufzeit der Anwendung.
Eine von der Anwendung geladene Ibis-Implementierung wird im Weiteren als Ibis-Instanz
bezeichnet.
Ibis bietet die Möglichkeit, mehrere Ibis-Instanzen innerhalb einer Anwendung zu betreiben.
Jede Instanz der Anwendung, die mit Ibis kommunizieren soll, muss eine Ibis-Instanz
erstellen.
Beim Erstellen einer Ibis-Instanz oder beim Start einer Ibis-Anwendung werden
Anforderungen festgelegt, die die Kommunikation erfüllen muss. Anhand dieser
Anforderungen wählt Ibis während der Laufzeit die Ibis-Instanz, die diese Anforderungen am
besten erfüllt.
Die bereitgestellten Programmiermodelle definieren ihre Anforderungen üblicherweise
selbst.
Codebeispiel: Erstellen einer Ibis-Instanz
(Code aus [2])
Ibis ibis = null;
try {
ibis = Ibis.createIbis(props, null);
} catch(NoMatchingIbisException e) {
System.err.println("Could not find a matching Ibis");
...
}
Dieser Code erstellt eine neue Ibis-Instanz. Über den Parameter „props“ (vom Typ
StaticProperties [3]) wird festgelegt, welche Eigenschaften die Instanz haben soll.
3.3 Der Ibis Portability Layer
Quellen: [4][2]
Der Ibis Portability Layer (IPL) ist die Schnittstelle zwischen den unterschiedlichen IbisInstanzen und der Anwendung. Der IPL abstrahiert die Kommunikationsebene und
ermöglicht es, dass Anwendungen die für die jeweilige Architektur beste Ibis-Instanz
verwenden können, ohne dabei den Quellcode anpassen zu müssen.
Der IPL trennt eingehende und ausgehende Verbindungen strikt voneinander. Dies
ermöglicht es, verschiedene Anforderungen für eingehende bzw. ausgehende Verbindungen
zu definieren.
Zur Kommunikation stehen sowohl blockierende Methoden zur Verfügung, als auch
Methoden die auf Timeouts reagieren. Streaming von Daten ist ebenfalls möglich.
5
Zu beachten ist, dass der IPL Ausfälle oder Fehler nicht eigenständig behandeln kann. Es
werden jedoch Methoden gestellt, die es ermöglichen auf derartige Ereignisse zu reagieren.
4. Anwendungsentwicklung mit Ibis
Quellen: [1] [2] [4]
Auch wenn es Möglich ist eine Anwendung nur unter Verwendung des Ibis Portability Layers
zu entwickeln, so ist die empfohlene Vorgehensweise die Verwendung der bereitgestellten
Programmiermodelle. Jedes dieser Modelle bevorzugt zwar einen oder mehrere
Anwendungstypen, da jedoch unterschiedliche Modelle integriert sind, ist Ibis für ein breites
Spektrum an Anwendungen einsetzbar.
Dieser Abschnitt stellt kurz drei dieser Programmiermodelle vor.
4.1 Satin
Quellen: [4][2]
Satin bietet, auf Ibis aufsetzend, devide-and-conquer-Funktionalitäten für Java. Ziel von Satin
ist, devide-and-conquer-Anwendungen innerhalb weitverteilter Rechnernetze einsetzen zu
können. Dabei soll die Satin-Runtime die Optimierungen für derartige Netze enthalten und
somit ein optimieren der Anwendung unnötig machen.
Satin bietet eine Reihe von Mechanismen an um mit den Problemen, die in dieser Art von
Netzen entstehen, umzugehen.
Satin ist fehlertolerant und kann auf hinzukommen oder wegfallen von Prozessoren
reagieren. Hierzu restrukturiert Satin den Berechnungsbaum. Durch diese Vorgehensweise
können redundante Berechnungen verhindert werden. Weiter können Teilberechnungen
von ausgefallenen Prozessoren ohne den Verlust von Rechenzeit gerettet werden.
Durch diese Fehlertoleranz und durch verschiedene load-balancing-Mechanismen macht es
Satin zusammen mit Ibis möglich, devide-and-conquer-Anwendungen in Grids zu nutzen.
4.2 Ibis RMI und GMI
Quellen: [4]
Ibis bietet eine eigene Implementierung der Java Remote Method Invocation [7]. Durch
unterschiedliche Optimierungen steigert Ibis die Leistungsfähigkeit von RMI stark.
Ibis Group Method Invocation (GMI) erlaubt es Methoden auf einem einzelnen Objekt
auszuführen oder auf Objektgruppen. Werden Gruppen aufgerufen so ist es möglich
individuelle Parameter zu übergeben. Ergebnisse können (wie mit RMI) zurückgegeben,
verworfen, oder zu einem einzigen Ergebnis zusammengefasst werden. Hierdurch erleichtert
GMI die parallele Programmierung.
6
5. Ibis und Middleware
Quellen: [4]
Ibis unterstützt durch das Java Grid Application Toolkit (JavaGAT) unter anderem Globus,
GridLab, SSH und Zorilla. JavaGAT ist modular erweiterbar, eine Unterstützung weiterer
Systeme ist also möglich und kann bei Bedarf unter Verwendung der JavaGAT APIs
nachträglich hinzugefügt werden. Zur Zeit ist unter anderem ein Adapter zu ProActive in
Entwicklung.
6. Portabilität
Da Ibis nur die Standard-Java Virtual Machine benötigt, sind Ibis-Anwendungen auf fast allen
Systemen lauffähig (sofern Java installiert ist). Eine Liste der von Sun unterstützten
Plattformen ist im Internet unter http://java.sun.com/j2se/1.5.0/system-configurations.html
verfügbar.
7. Nutzung und Weiterentwicklung
Quellen: [4]
Ibis wird zurzeit unter anderem zur Auswertung von Elektroenzephalogramm-Daten
verwendet, sowie bei der Berechnung und Simulation von Boden-Struktur-Interaktionen.
Ibis dient weiter als Basis für verschiedene Projekte die sich mit Java in Grids beschäftigen,
so wurde unter anderem ProActive auf Ibis portiert.
Die neuste Version von Ibis (Version 1.4) wurde im September 2006 freigegeben. Das Projekt
scheint nach wie vor aktiv weiterentwickelt zu werden, zurzeit wird an der Integration von
RepMI gearbeitet, einem weiteren Programmiermodell das replizierbare Objekte bieten soll.
7
8. Fazit
Ibis erleichtert die Entwicklung von Grid-Anwendungen auf unterschiedliche Arten. Das
Problem der Heterogenität wird durch die Verwendung von Java gelöst.
Die Probleme die Java verursacht, vor allem die im Vergleich zu C/FORTRAN niedrigere
Performance, werden durch eigene Konzepte verringert oder gelöst. Bestehende,
systemoptimierte Treiber und Techniken können von Ibis genutzt werden, ohne dass
Anwendungen angepasst oder neu kompiliert werden müssen. Durch die modulare
Erweiterbarkeit von JavaGAT ist eine Anbindung an fast jede Grid-Middleware möglich,
wodurch die Überwachung und Steuerung der Ibis-Anwendungen zusätzlich vereinfacht
wird. Programmiermodelle wie Satin vereinfachen die Entwicklung von parallelen
Programmen.
Zusätzlich kann Ibis mit dem wegfallen oder hinzukommen von Knoten im Grid umgehen.
Durch diese Eigenschaften und die aktive Weiterentwicklung ist Ibis eine hervorragende
Plattform zur Entwicklung von Grid-Anwendungen.
Quellen
[1] Ibis: a Flexible and Efficient Java-based Grid Programming Environment Rob V. van
Nieuwpoort, Jason Maassen, Gosia Wrzesi´nska, Rutger Hofman, Ceriel Jacobs, Thilo
Kielmann, Henri E. Bal Faculty of Sciences, Department of Computer Science, Vrije
Universiteit De Boelelaan 1081a, 1081 HV Amsterdam, The Netherlands
http://www.cs.vu.nl/ibis/papers/nieuwpoort_cpe_05.pdf (Stand 15.01.2007)
[2] Ibis Programmer's Manual by The Ibis Group, Ceriel JH Jacobs 2006-09-15
http://www.cs.vu.nl/ibis/progman/progman.html (Stand 15.01.2007)
[3] Ibis JavaDoc http://www.cs.vu.nl/ibis/api/index.html (Stand 15.01.2007)
[4]Ibis Homepage: http://www.cs.vu.nl/ibis/index.html (Stand 15.01.2007)
[5] Liste von Sun Microsystems unterstützter Plattformen:
http://java.sun.com/j2se/1.5.0/system-configurations.html (Stand 15.01.2007)
[6] Evaluation of a Zero-Copy Protocol Implementation (2001), K. Skevik and T. Plagemann
and V. Groebel, http://citeseer.ist.psu.edu/skevik01evaluation.html (Stand 21.01.2007)
[7] http://java.sun.com/j2se/1.4.2/docs/guide/rmi/index.html Copyright © 2003 Sun
Microsystems, Inc. (Stand 21.01.2007)
8
Herunterladen