Software-Engineering
Unicore 6 ist – ähnlich wie das Globus Toolkit oder gLite – eine Grid-Middleware und bietet “ready-to-run” Grid-Systeme, bestehend aus Client- und Server-Software, mit der verteiltes Rechnen und der Zugriff auf Ressourcen sowohl im Intranet als auch im Internet sicher und nahtlos möglich ist. Unicore steht für UNiform Interface to COmputing Ressources und ist seit Sommer 2004 als Open Source verfügbar.
Die Implementierung von Unicore baut auf vielen etablierten Standards auf (u.A. vom OGF, W3C, OASIS und IETF), wodurch die Software leicht zugänglich gemacht werden soll, Interoperabilität mit anderen Grid-Middlewares gewährleistet werden soll und Weiterentwicklungen problemlos möglich sind.
Die nachfolgende Grafik verdeutlicht die Architektur von Unicore
Eine kurze Erklärung zu den einzelnen Elementen
Zu beachten ist, dass jede Server-Komponente (Gateway, Registry und XUUDB) ein eigenes, von einer CA ausgestelltes X.509 – Public/Private-Key-Paar inkl. des Zertifikats benötigt, um sich zu authentifizieren.
In der Unicore-Beschreibung wird all das als Client definiert, womit man auf Ressourcen zugreifen und Grid-Jobs definieren kann: UCC (Commandline), URC (Rich Client, GUI), HiLA (API). Alle Clients können auf der Unicore Downloadseite heruntergeladen werden.
Ausprobieren kann man das ganze im Testgrid von Unicore. Dafür einen Testzugang anlegen und den gewünschten Client runterladen. In den beiden Video-Tutorials (1, 2) wird gezeigt, wie man den URC einrichtet und seinen ersten Job auf dem Grid laufen lassen kann.
Über den Unicore Commandline Client können alle Funktionen des Service-Layers (siehe Grafik) in einer Shell verwendet werden. Neben den üblichen Funktionen wir Job-Ausführung und Überwachung können sogar Workflows verwendet werden.
Der Unicore Rich Client basiert auf dem Eclipse-Framework und bietet alle Funktionalitäten des Service-Layers in graphischer Form, also ein UI. Neben einer sehr detaillierten und umfassenden Verwaltung der zu verwendeten Grid-Ressourcen können auch die Jobs in der graphischen Oberfläche verwaltet und bearbeitet werden. Außerdem können Workflows (siehe unten) erstellt werden, was auch bei komplexen Strukturen übersichtlich bleibt. Durch die Verwendung von Eclipse als Basis ist der URC einfach erweiterbar, die Integration neuer Grid Services oder Anwendungen ist dabei bereits berücksichtigt.
Über GridBeans kann die URC nochmals erweitert werden, z.B. über die in einer GridBean definierten GUIs für die Bearbeitung der Input- und Output-Variablen des in der GridBean abstrahierten Grid-Jobs oder mittels Visualisierungen (Text, Bilder, 3D-Engine, …) der GridBean-Variablen.
Als dritter Client-Typ wird HiLA angeboten, eine High Level API für Grid-Anwendungen. Mittels der HiLA können Clients für Grid-Anwendungen auf einfache Weise entwickelt und Unicore 6 in bestehende Anwendungen intergiert werden. So können Grid-Ressourcen direkt verwendet werden, ohne den Umweg über den UCC oder den URC gehen zu müssen. HiLA modelliert das Grid anhand eines objektorientierten Interfaces (von dem es mehrere Implementierungen gibt: Unicore 5, Unicore 6 und OGSA-BES), das eine abstrakte Repräsentation der darunterliegenden Ressourcen darstellt. Das Interface umfasst dabei die Objekte Grid, Site, Storage, Task und File, wobei all diese Objekte ein Locatable implementieren können. Ein Grid- und ein Site-Objekt können zusätzlich einSubmitable implementieren.
HiLA ist Ressourcen- statt Task-orientiert, wobei auf Ressourcen über URIs zugegriffen wird. Zum Erzeugen einer HiLA-Implementierung wird der Factory-Mechanismus verwendet. Eine ausführliche Erklärung der genannten Konzepte und Objekte ist in der Referenz zu finden!
Folgend ein Beispiel für die Verwendung der API (ebenfalls in der Referenz zu finden, Kapitel 5.3.4):
// Ein JSDL-Dokument parsen und ein Java-Objekt daraus generieren (Java-Binding) JobDefinitionDocument jsdl = JobDefinitionDocument.Factory.parse(new java.io.File(this.args[1])); // Verwendung der HiLA-Factory, um eine passende Site für die Job-Ausführung zu finden Site site = HiLAFactory.getInstance().locate(new Location(args[0])); // Das JSDL-Objekt an die gefundene Seite senden Task task = site.submit(jsdl); // Blockierendes Ausführen des Tasks task.startSync();
Über Workflows können auch komplexe Abläufe von einzelnen Jobs eingerichtet werden. Ein Workflow wird aus verschiedenen Systemaufrufen und Kontrollstrukturen zusammengestellt. Dabei werden folgende Funktionen unterstützt: parallele oder sequentielle Job-Ausführung, Schleifen (while, foreach), Kontrollstrukturen (if-then-else) und Workflow-Variablen.
Die Workflows werden im URC graphenbasiert bearbeitet, können aber auch über den UCC verwendet werden. Über gerichtete Kanten wird dabei die Abarbeitungsreihenfolge definiert. Der fertige Workflow kann dann an ein Grid-System übertragen und dort ausgeführt werden. An jeder Entität, die ausgeführt wurde, wird ein Häkchen angezeigt.
Innerhalb eines Workflows können neben “einfachen” Job-Definitionen auch verschiedene GridBeans verwendet werden.
Der Schwerpunkt bei der Entwicklung der Workflow-Unterstützung lag auf den vier Bereichen Flexibilität, Skalierbarkeit, Erweiterbarkeit und einfacher Anwendung.
Ein Beispiel für einen IDB-Eintrag zeigt folgender Node, der die Anwendung “Date” auf “/bin/date” mappt:
<idb:IDBApplication>
<idb:ApplicationName>Date</idb:ApplicationName>
<idb:ApplicationVersion>1.0</idb:ApplicationVersion>
<jsdl:POSIXApplication xmlns:jsdl="http://schemas.ggf.org/jsdl/2005/11/jsdl-posix">
<jsdl:Executable>/bin/date</jsdl:Executable>
</jsdl:POSIXApplication>
</idb:IDBApplication>
Eine Erklärung zur Syntax und den möglichen Node-Typen ist hier zu finden.
523, 524, 535
Keine Kommentare
Wenn Dir der Artikel gefallen hat, Du Anregungen ergänzen möchtest oder einen Fehler gefunden hast, freue ich mich über Deinen Kommentar!