Oliver BRAUN
Rene BROTHUHN
Ronny SCHLEICHER
(Hrsg.)
Fakultat Informatik
Fachhochschule Schmalkalden
Wintersemester 2010/2011
Vorwort
Die Entwicklung groerer Softwaresysteme ber uhrt in der heutigen Zeit sehr haug
das Gebiet der verteilten Systeme. Dabei ist es ganz unerheblich ob die Systeme
tatsachlich auf unterschiedlichen Ressourcen verteilt sind oder nur entsprechende
Technologien genutzt werden. Eine sehr vielversprechende Abstraktion beispiels-
weise bieten die Actors. Das sind Softwarekomponenten, die eigenstandig arbei-
ten und ausschlielich uber asynchrone Kommunikation miteinander interagieren
konnen. Aber auch viele andere Ansatze sind sehr interessant und wert etwas
genauer betrachtet zu werden. Ein gutes theoretisches Fundament ist ein we-
sentlicher Aspekt einer Vielzahl solcher Ansatze. Dar uber hinaus entscheidet die
Nutzbarkeit eines bestimmten Frameworks in der Regel dar uber, ob es in einem
Projekt genutzt werden soll.
Verteilte Systeme ist einer der Schwerpunkte im Masterstudiengang ,,Media Pro-
cessing and Interactive Services an der Fakultat Informatik der Fachhochschule
Schmalkalden. Im ersten Durchlauf des 4-semestrigen Studienganges vom Winter-
semester 2009/2010 bis Sommersemester 2011 war die weiterf uhrende Vertiefung
eine Pichtveranstaltung f ur alle Studierende und wurde im Seminarstil durch-
gef uhrt. Jeder Studierende konnte selbst ein Thema vorschlagen oder aus einer Lis-
te wahlen und musste dazu einen 35-min utigen Vortrag halten. Zusatzlich musste
jeder eine etwa zehn DIN A5-Seiten umfassende Ausarbeitung erstellen. Um die
zum groten Teil sehr guten Arbeiten einem groeren Personenkreis verf ugbar zu
machen, werden sie in diesem Buch veroentlicht.
Da die einzelnen Kapitel weit uber das gesamte Feld der verteilten Systeme ver-
streut sind, haben wir versucht sie einigermaen sinnvoll in 5 Teile aufzuteilen.
Den Beginn machen Beispiele f ur die Nutzung von Agenten und Aktoren in Teil I.
Anschlieend wird ein Teil der zugrundeliegenden Prozesstheorie und die unmit-
telbare Umsetzung in der Programmierung vorgestellt. Teil III beschaftigt sich
mit Technologien zur Interaktion von Prozessen, wie sie auf vollig verschiedenen
Plattformen genutzt werden. Eine aktuelle Technologie, die Web Services, sind
Gegenstand von Teil IV. Schlielich gibt es noch einen kurzen Einblick in Grid-,
Cluster- und Monitoringtechnologien in Teil V.
Oliver Braun
Rene Brothuhn
Ronny Schleicher
Schmalkalden, August 2011
IV
Inhaltsverzeichnis
I Aktoren und Agenten 1
1 Akka Grundlagen . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Florian Schuhmann
2 Akka Hands on . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
Toralf Mende
3 Java Agent DEvelopment Framework . . . . . . . . . . . . . . . 25
Tobias Gartner
4 Janus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
Rene Kassel
5 FIPA Standards . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
Marco Kretzschmar
II Prozesstheorie und unmittelbare Umsetzung 61
6 Communicating Sequential Processes . . . . . . . . . . . . . . . 63
Wenqi Yan (Rene Brothuhn)
7 -Kalk ul . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
Rene Brothuhn
8 Concurrency in Go . . . . . . . . . . . . . . . . . . . . . . . . . . 91
Benjamin L udicke
9 Communicating Sequential Processes f ur Java . . . . . . . . . . 101
Martin Engel
VI Inhaltsverzeichnis
III Interprozesstechnologien 111
10 Interprozesskommunikation mit COM . . . . . . . . . . . . . . . 113
Ronny Schleicher
11 HawtDispatch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
Tobias Gieler
12 Distributed Programming in Mozart . . . . . . . . . . . . . . . . 139
Sebastian Stallenberger
13 ZeroMQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
Christopher Ezell
14 Remote Function Call in SAP-Systemen . . . . . . . . . . . . . . 165
Sebastian Reidemeister
IV Web Services 175
15 Web-Services-Architektur . . . . . . . . . . . . . . . . . . . . . . 177
Sebastian Leisen
16 Apache CXF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
Martin Herrmann
V Grid, Cluster und Monitoring 203
17 Globus Toolkit . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205
Martin Baumbach
18 Apache Hadoop . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
Thomas Hohn
19 Monitoring Distributed Real-Time Systems . . . . . . . . . . . . 227
Maik Heller
Teil I
Aktoren und Agenten
1 Akka Grundlagen
Florian Schuhmann
Inhaltsverzeichnis
1.1 Akka Das Framework . . . . . . . . . . . . . . . . . . . 3
1.2 Features und Methodiken . . . . . . . . . . . . . . . . . . 4
1.2.1 Actors . . . . . . . . . . . . . . . . . . . . . . . 4
1.2.2 Software Transactional Memory . . . . . . . . . . 9
1.2.3 Fault-tolerance . . . . . . . . . . . . . . . . . . . 10
1.3 Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.1 Akka Das Framework
Akka ist ein Open-Source-Projekt von Jonas Boner. Die Firma Scalable Solutions
bietet Consulting zu Akka und kostenpichtige Erweiterungen wie
Akka Cloud,
A Universal Modu-
lar Actor Formalism for Articial Intelligence beschrieben. Das Modell gewann
durch die Sprache Erlang an Popularitat. Erlang gehort zu den funktionalen Pro-
grammiersprachen und folgt im Bereich der Nebenlaugkeit den Prinzipien des
Actor-Modells.
In diesem Modell gilt das Grundprinzip:
newerstellen [1]
Die dabei erhaltene Instanz der ActorRef muss genutzt werden, um mit dem
eigentlichen Actor zu interagieren (Listing 1.4).
Durch dieses Vorgehen wird eine Actor-Referenz erzeugt, welche serialisierbar,
unveranderlich und network-aware ist. Das heit, diese Referenz kann ohne Pro-
bleme uber das Netzwerk verteilt werden. Dabei merkt sie sich ihre Herkunft und
kann wie gewohnt und ohne zusatzlichen Aufwand genutzt werden.
val a = actorOf[MyActor]
a ! msg
Listing 1.4: ActorRef erstellen [1]
8 1 Akka Grundlagen
Die Nachrichten ubermittlung ist die Interaktionsmoglichkeit zwischen den Actors.
Diese sammeln ihre Nachrichten in einer sogenannten
re-and-forget
Hierbei handelt es sich um die einfachste
Ubermittlungsart. Eine Nachricht
wird an einen Actor gesendet und der Sender wartet nicht auf eine Antwort,
sondern er arbeitet direkt weiter.
myActor !"test"
Send-And-Receive-Eventually
Bei dieser Art der Nachrichten ubermittlung wird eine Nachricht gesendet und
es wird eine bestimmte Zeit auf eine Antwort gewartet. Diese Methode gibt
ein Option[Any] zur uck, welches beim Erhalt einer Antwort Some(result)
ist oder beim Erreichen des Timeouts None enthalt.
val resultOption = actor !!("Hello", 1000)
Send-And-Receive-Future
Dieses Vorgehen liefert ein Future zur uck, wobei hier beachtet werden muss,
dass kein Timeout angegeben wird. Falls also keine Antwort eintrit, konnten
weitere Bearbeitungsschritte, die auf das Future angewiesen sind, nicht durch-
gef uhrt.
val future = actor !!!"Hello"
Der letzte, aber dennoch entscheidende Punkt, der hier angesprochen werden
soll, ist die Wahl des Dispatchers. Dieser entscheidet uber die Art des Actors. So
konnen entweder event-basierte oder thread-basierte Actors erstellt werden. Hier
eine kleine Aufzahlung der moglichen Dispatcher.
Thread-based
Event-based
Work-stealing
HawtDispatch-based event-driven
Die Actors sind damit ein Kernbestandteil von Akka und das zurecht, wie folgen-
des Beispiel der Entwickler zeigt:
Ein event-basierter Actor ist ca 600 Byte gro. Dies bedeutet, dass auf einem PC
mit 4 GB Arbeitsspeicher circa 6.5 Millionen Actors erstellt werden konnten.
1.2 Features und Methodiken 9
1.2.2 Software Transactional Memory
Das Konzept des Software Transactional Memory ist ein Kontrollmechanismus f ur
gemeinsam genutzten Speicher. Der Hauptspeicher eines Rechners wird zu einer
Art Datenbank oder zu einem
begin,
commit,
abort und
look at errors as something natural and something that will happen and
instead of trying to prevent it; embrace it [1]
Es geht darum, bei der Entwicklung von Anwendungen Fehler mit einzubeziehen,
sie sollen sogar bereitwillig angenommen werden. Denn es wird sie so oder so
geben.
Die daraus resultierende Mentalitat und das
OneForOne
Falls diese Strategie genutzt wird und ein Fehler bei einem Actor auftritt, wird
nur dieser Actor neu gestartet. Durch diesen Neustart wird das System wieder
in einen stabilen Zustand gebracht.
AllForOne
Bei dieser Strategie wird nicht nur der fehlerhafte Actor neu gestartet, sondern
alle Actors, die dem Supervisor unterstellt sind. In diesem Fall w urde auch
ein unterstellter Supervisor neu gestartet werden. Der Ausgangszustand ist
in Abbildung 1.2 zu sehen, das beschriebene Verhalten von
AllForOne in
Abbildung 1.3. Durch eine derartige Schachtelung konnen komplexe Netze
von Actors verwaltet werden.
Abbildung 1.3:
Plattform genannt.
Abbildung 3.1: Container und Plattformen in JADE (Quelle: [2])
Diese Plattform bildet eine homogene Schicht ab, die jegliche Komplexitat und
Verschiedenheit der darunterliegenden Hardware, Betriebssystem, Netzwerk und
Virtual Machine vor den Agenten verbirgt. Mindestens ein Container ist in jeder
Plattform prasent: der
Colony Pheromon.
Er kehrt zur Kolonie zur uck, wenn er abschatzt, dass seine Pheromone auf die
Halfte des Ursprungswertes gesunken sind.
48 4 Janus
Forager:
Dieser sucht zufallig nach Futterquellen. Wahrend der Suche wirft er das
Colony
Pheromones und die pinken des
[.
(x P [ y Q) beschreibt ein Objekt, f ur welches entweder das Ereignis x oder
y greift. Wenn zuerst das Ereignisse x auftritt, dann folgt darauf das Verhalten des
Objekts wie in P beschrieben. Umgekehrt, wenn zuerst Ereignis y auftritt, dann
folgt das Verhalten des Objekts wie in Q beschrieben. Da x und y verschiedene
Ereignisse sind, wird die Wahl zwischen P und Q durch das zuerst auftretende
Ereignis bestimmt. Es gilt:
(x P [ y Q) = P, wenn x, y P und P = Q.
Gesetze
L 1 (x : A P(x) = (y : B Q(y)) (A = B x : A P(x) = Q(x))
Gibt an, dass zwei durch Auswahl denierte Prozesse identisch sind, falls das nach-
folgende Verhalten jeweils gleich ist. Ist das Verhalten nach dem ersten Schritt
jedoch unterschiedlich, so sind auch die Prozesse unterschiedlich.
66 6 Communicating Sequential Processes
L 2 (Y = F(Y ) (Y = X F(X))
Gilt, wenn F(X) ein uberwachter Ausdruck ist.
L 3 falls (i : S (X
i
= F(i, X) Y
i
= F(i, Y ))) dann X = Y
6.1.2 Spuren und Operationen auf Spuren
Eine Spur gibt das Verhalten eines Prozesses als eine endliche Folge von Ereig-
nissen bis zu einem bestimmten Zeitpunkt wieder. Sie wird in spitzen Klammern
und als eine Folge von durch Komma getrennten Symbolen notiert:
< x, y > besteht aus zwei Ereignissen, x gefolgt von y
< x > enthalt nur Ereignis x
<> ist leere Abfolge, enthalt kein Ereignis
Spuren spielen eine zentrale Rolle bei der Aufzeichnung, Beschreibung und dem
Verstandnis des Verhaltens von Prozessen. Es gilt folgendes:
s, t, v werden als Spuren bezeichnet
S, T, U werden als Mengen von Spuren bezeichnet
f, g, h werden als Funktionen bezeichnet
Verkettung
Die wichtigste Operation auf Spuren ist die Verkettung. Aus einem Paar von
Operanden s und t wird durch Zusammensetzung eine neue Spur konstruiert.
Die mit s
<>=<>
s = s
L 5 s
(t
u) = (s
t)
u
L 6 s
t = s
u t = u
L 7 s
t = u
t s = u
Beschrankung
Der Ausdruck (t A) bezeichnet die Symbole von Spur t mit der Beschrankung
auf die Symbole der Menge A. Alle Symbole, die nicht in der Menge A enthalten
sind werden weggelassen. Beispiel:
< a, b, a, c, e > b, e =< b, e >
6.1 Prozesse 67
Weiterhin gelten folgende Gesetze:
L 8 <> A =<>
L 9 (s
t) A = (s A)
(t A)
L 10 < x > A =< x > falls x A
L 11 < y > A =<> falls y / A
L 12 s =<>
L 13 (s A) B = s (A B)
Stern
Die Menge A
ist die Menge aller endlichen Spuren, die mit den Symbolen in der
Menge A gebildet werden konnen. A
= s [ s A = s
Es gelten folgende Gesetze:
L 14 <> A
L 15 < x > A
x A
L 16 (s
t) A
s A
t A
Lange
Die Lange einer Spur t wird mit #t bezeichnet, z.B. # < a, b, c >= 3.
L 17 # <>= 0
L 18 < x >= 1
L 19 (s
t) = (#s) + (#t)
6.1.3 Spuren eines Prozesses
Die Spur eines Prozesses ist die sequentielle Aufzeichnung seines Verhaltens bis
zu einem bestimmten Zeitpunkt. Wie die Spur eines Prozesses aussieht, ist beim
Start des Prozesses unbekannt. Die komplette Menge aller moglichen Spuren eines
Prozesses P kann jedoch im Voraus bekannt sein. Die Funktion traces(P) ist so
deniert, dass sie alle Mengen von Spuren eines Prozesses liefert, z.B.
traces(STOP) = <>.
68 6 Communicating Sequential Processes
Gesetze
L 20 traces(STOP) = t [ t =<> = <>
Das Verhalten des Prozess STOP ist nur die leere Spur.
L 21 traces(c P) = <> < c >
t [ t traces(P)
Jede nichtleere Spur beginnt mit c, gefolgt von einer moglichen Spur von P.
Nach-Operator
Falls s traces(P) dann ist P/s
2
ein Prozess, der sich wie P verhalt, nachdem
alle Ereignisse von Spur s aufgetreten sind. Folgende Gesetze gelten f ur den /
Operator:
L 22 P/ <>= P
Nach einer leeren Spur bleibt der Prozess unverandert.
L 23 P/(s
t) = (P/s)/t)
Das Verhalten nach s
Sei t eine Spur von (P [ [ Q), dann ist jedes Ereignis in t, welches zum Alphabet von
P gehort, auch ein Ereignis im Leben von P gewesen. Jedes Ereignis in t, welches
nicht zu P gehort, ist dann ohne die Beteiligung von P aufgetreten. Deswegen
ist (t P) eine Spur von all jenen Ereignissen, bei denen P teilgenommen hat
und ist daher auch eine Spur von P.
6.2.3
Anderung des Symbols
Im Folgenden wird eine einfache Methode vorgestellt, um eine Menge von Prozes-
sen mit ahnlichem Verhalten zu denieren. Sei f eine injektive Funktion, welche
das Alphabet von P auf eine Menge von Symbolen in A abbildet:
f : P A
Nun wird f(P) als ein Prozess deniert, welcher immer f(c) ausf uhrt, wenn c in
P auftritt:
f(P) = f(P)
traces(f(P)) = f
(s) [ s traces(P)
Gesetze
L 36 f(STOP
A
) = STOP
f(A)
Nach
Anderung des Symbols, f uhrt STOP kein Ereignis im geanderten Alphabet
aus.
L 37 f(P [ [ Q) = f(P) [ [ f(Q)
SKIP
A
ist dabei ein Prozess der nichts tut, auer erfolgreich zu terminieren.
Wenn ein Prozess eine komplexe Aufgabe erledigen soll, so ist es meist sinnvoll,
die Aufgabe in zwei Teilaufgaben aufzuteilen. Dabei muss die eine Teilaufgabe erst
erfolgreich abgeschlossen werden, bevor mit der anderen Teilaufgabe begonnen
werden kann.
Seien P und Q zwei sequentielle Prozesse mit gleichem Alphabet, dann wird die
sequenzielle Komposition der Prozesse durch P; Q ausgedr uckt. Dies beschreibt
ein Prozess, der sich zunachst wie P verhalt und sich nach erfolgreichem Abschluss
von P wie Q verhalt. Wenn P nicht erfolgreich endet, dann wird auch P; Q
niemals erfolgreich enden.
6.5.1 Gesetze und Mathematische Betrachtung
Die Gesetze zur sequentiellen Komposition von Prozessen sind ahnlich der Ver-
kettung im Abschnitt 6.1.2.
76 6 Communicating Sequential Processes
Gesetze
L 67 SKIP; P = P; SKIP = P
L 68 (P; Q); R = P; (Q; R)
L 69 (x : B P(x)); Q = (x : B (P(x); Q))
L 70 (a P); Q = a (P; Q)
L 71 STOP; Q = STOP
L 72 SKIP
A
[ [ SKIP
B
= SKIP
AB
Wenn sequenzielle Operatoren zusammengesetzt sind, kann die Kombination nur
dann erfolgreich terminieren, wenn auch die einzelnen Komponenten erfolgreich
terminieren.
Mathematische Betrachtungen
Operationen auf deterministische Prozesse sind deniert durch die Spuren ihrer
Ergebnisse:
L 73 traces(SKIP) = <>, <
>
Der Prozess SKIP enthalt nur diese zwei Spuren, da er nur erfolgreich terminie-
ren kann.
L 74 traces(P; Q) = s; t [ s traces(P) t traces(Q))
Die Spur von (P; Q) besteht aus der Spur von P und wenn P mit
endet wird
<
> traces(P)
Die sequentielle Komposition von nichtdeterministischen Prozessen bringt eine
Reihe von Problemen mit sich. Ein nichtdeterministischer Prozesse wie SKIP
(c SKIP) erf ullt z.B. nicht das Gesetzt 75. Eine Losung daf ur bietet:
L 76 s
<
> traces(P) (P/s) SKIP
P kann immer terminieren, auch ohne ein alternatives Ereignis f ur die Umgebung
anzubieten.
L 77 CHAOS ; P = CHAOS
Ein divergenter Prozess bleibt divergent, unabhangig von seiner erfolgreichen Ter-
minierung.
L 78 (P Q); R = (P; R) (Q; R)
Eine sequentielle Komposition kann auf eine nichtdeterministische Auswahl auf-
geteilt werden.
6.5 Sequentielle Prozesse 77
6.5.2 Unterbrechungen
Im Folgenden wird eine andere Art der sequentiellen Komposition deniert
(PQ), welche nicht von einer erfolgreichen Beendigung von P abhangt. Statt-
dessen kann der Ablauf von Prozess P durch ein erstes Auftreten eines Ereignisses
von Prozess Q unterbrochen werden. Ist P einmal unterbrochen, kann P nicht
wieder anlaufen.
Daraus folgt, dass die Spur von (PQ) eine Spur von P bis zu einem bestimmten
Punkt ist, an dem eine Unterbrechung auftrat, und darauf dann eine beliebigen
Spur von Q folgt.
(PQ) = P Q
traces(PQ) = s
t [ s traces(P) t traces(Q)
Es wird vereinbart, dass
nicht in P enthalten sein darf.
Gesetze
L 79 (x : B P(x))Q = Q2(x : B (P(x)Q))
Beschreibt, dass der Start von Q durch ein Ereignis aus der Umgebung bestimmt
ist und nicht durch ein Ereignis von P.
L 80 (PQ)R = P(QR)
Beschreibt, dass wenn (PQ) von R unterbrochen werden kann, dann auch P
von (QR) unterbrochen werden kann.
L 81 PSTOP = P = STOPP
Da STOP kein Anfangsereignis anbietet, kann es auch nicht von der Umgebung
ausgelost werden.
L 82 P(Q R) = (PQ) (PR)
Der Unterbrechungs-Operator f uhrt seinen beiden Operanden maximal einmal aus,
daher kann es auf die nichtdeterministische Auswahl aufgeteilt werden.
L 83 CHAOS P = CHAOS = P CHAOS
6.5.3 Zuweisung
Sei x eine Programmvariable, e ein Ausdruck und P ein Prozess, dann ist (x :=
e; P) ein Prozess der sich wie P verhalt, wobei der Anfangswert von x durch den
Anfangswert vom Ausdruck e bestimmt ist. Die Bedeutung der Zuweisung kann
so deniert werden:
(x := e) = (X := e; SKIP).
78 6 Communicating Sequential Processes
Gesetzte
In den folgenden Gesetzen stehen x und y f ur Listen von eigenstandigen Varia-
blen, e, f(x) und f(e) stehen f ur Listen von Ausdr ucken, die moglicherweise die
Variablen x oder y enthalten.
L 84 (x := x) = SKIP
L 85 (x := e; x := f(x)) = (x := f(e))
L 86 Falls x, y eine Liste von verschiedenen Variablen ist, dann
(x := e) = (x, y := e, y)
L 87 Falls x, y, z von gleicher Lange wie e, f, g ist, dann
(x, y, z := e, f, g) = (x, y, z := e, g, f)
Literaturverzeichnis
[1] C.A.R. Hoare, Communicating Sequential Processes. Prentice Hall, 2004.
7 -Kalk
ul
Rene Brothuhn
Inhaltsverzeichnis
7.1 Einleitung . . . . . . . . . . . . . . . . . . . . . . . . . . 79
7.2 Prozesskalk ule . . . . . . . . . . . . . . . . . . . . . . . . 80
7.2.1 Entwicklungsgeschichte . . . . . . . . . . . . . . 80
7.3 CCS - Calculus of Communicating Systems . . . . . . . . 81
7.3.1 Beispiel CCS . . . . . . . . . . . . . . . . . . . . 81
7.3.2 Mobile Prozesse . . . . . . . . . . . . . . . . . . 84
7.4 Der -Kalk ul . . . . . . . . . . . . . . . . . . . . . . . . 84
7.4.1 Strukturelle Kongruenz . . . . . . . . . . . . . . 85
7.4.2 Reduktionsregeln . . . . . . . . . . . . . . . . . . 86
7.4.3 Beispiel Reduktion . . . . . . . . . . . . . . . . . 87
7.4.4 Forschungsergebnisse . . . . . . . . . . . . . . . 87
7.4.5 Anwendung . . . . . . . . . . . . . . . . . . . . . 88
7.1 Einleitung
Schon seit einigen Jahren ist zu beobachten, dass sich die Informatik mit sei-
nen Anwendungen zunehmend von der sequentiellen Abarbeitung hin zu ne-
benlaugen bzw. verteilten und damit auch konkurrierenden Systemen entwickelt.
Dieser Trend ist nicht zuletzt durch die zunehmende Vernetzung und die Entwick-
lung von Mehrkern-Prozessorarchitekturen gekennzeichnet. Viele Eigenschaften
nebenlauger und konkurrierender Systeme sind jedoch noch nicht ausreichend
erforscht. Insbesondere die Programmierung solcher Systeme wirft noch viele Fra-
gen auf. Hierbei spielt immer die Kommunikation und Synchronisation der kon-
kurrierenden Systeme eine groe Rolle.
Zur Erforschung solcher Systeme bieten sich stark abstrahierte, theoretische Kon-
strukte an, welche es erlauben, die entscheidenden Fragestellungen auf ein theo-
retisches, mathematisches Fundament zu stellen. Ein solches Fundament bietet
der -Kalk ul. Das Hauptaugenmerk liegt beim -Kalk ul auf mobile, konkurrieren-
de Systeme, bei denen sich die Kommunikationsstruktur andern kann. Was dies
genau bedeutet, soll in den nachsten Abschnitten beleuchtet werden.
80 7 -Kalk ul
7.2 Prozesskalk ule
Prozesskalk ule beschaftigen sich mit der formalen Beschreibung konkurrierender
und kommunizierender Systeme. Dieses Systeme unterscheiden sich grundlegend
von sequentiellen Systemen. Sie erlauben Interaktion, Kommunikation und Syn-
chronisation zwischen den beteiligten Komponenten. Die zur Verf ugung stehenden
Modellierungswerkzeuge f ur sequentielle Systeme (z.B. Turing-Maschine oder -
Kalk ul) sind gut erforscht, jedoch unzureichend f ur konkurrierende Systeme. Die-
se Unzulanglichkeit f uhrte zur Idee der Prozessalgebren, welche die Modellierung
konkurrierender Systeme erlaubt. Beispiele f ur Prozessalgebren sind:
CSP Communicating Sequential Processes, C.A.R. Hoare
CCS Calculus of Communicating Systems, R. Milner
ACP Algebra of Communicating Processes, J. Bergstra
-Kalk ul, R. Milner
7.2.1 Entwicklungsgeschichte
Um die Einordnung des -Kalk uls besser zu verstehen, soll nun ein kurzer
Uber die strukturelle Kongruenz hinaus lassen sich manche Prozesse reduzieren.
Eine Reduktion wird ausgedr uckt durch P Q. Dies bedeutet, dass P in einem
einzelnen Berechnungsschritt in Q umgewandelt werden kann.
Die wichtigste Reduktionsregel ist folgende:
xz.P[x(y).Q P[Q[z/y] (7.6)
Sie besagt, dass paarweise Kommunikation (Senden und Empfangen) reduziert
und in einem Schritt ausgef uhrt werden kann. [z/x] bezeichnet eine -Konversion,
jedes Vorkommen von y in Q wird durch den Namen z ersetzt.
Die weiteren Reduktionsregeln sind wieder mehr oder weniger selbsterklarend:
wenn P Q dann ist auch P[R Q[R (7.7)
wenn P Q dann ist auch (x)P (x)Q (7.8)
P P
und P
und Q
Communicating
Sequential Processes (CSP), siehe auch Kapitel 8.1.1. Damit man sich vorstel-
len kann, was CSP genau ist, wird im nachsten Unterkapitel kurz die Verwen-
dung von CSP vorgestellt. Danach wird gezeigt wie einfach Nebenlaugkeit in Go
umgesetzt werden kann und wie Threads untereinander kommunizieren konnen.
92 8 Concurrency in Go
Anschlieend wird auf die Feinheiten bei der Kommunikation eingegangen und
an kleinen Beispielen verdeutlicht. Somit ist dieser Artikel auch gleich ein kleines
Tutorial, welches die wichtigsten Eigenschaften zum Thema
Nebenlaugkeit in
Go vorstellt.
8.1.1 Communicating Sequential Processes (CSP)
Zunachst sei gesagt, dass dieser kurze Abschnitt bei weitem nicht ausreichen
w urde, um CSP umfassend zu erlautern. F ur eine ausf uhrliche Beschreibung von
CSP wird das Standardwerk von Tony Hoare empfohlen [1]. In diesem Abschnitt
werden ausschlielich kleine Ausschnitte dargestellt, um zu zeigen welcher Teil,
laut dem Autor, von CSP als Inspiration f ur die Programmiersprache Go diente.
CSP ist ein mathematisches Konzept, um Interaktionen zwischen Prozessen dar-
zustellen [1, S. v]. In CSP wird davon ausgegangen, dass alle nebenlaugen Syste-
me Prozesse sind und diese durch sogenannte Events charakterisiert werden. Ein
Prozess P mit den Events a, b und c ist in Listing 8.1 dargestellt.
1 P = {a, b, c}
Listing 8.1: Ein Prozess in CSP
In CSP ist es moglich, dass parallel laufende Prozesse untereinander kommu-
nizieren konnen. Dies geschieht uber Kanale, welche ein Event ubertragen. Im
folgenden Beispiel (siehe Listing 8.2) wird davon ausgegangen dass v ein Event, c
ein Kanal und P ein Prozess ist. Das Ausrufezeichen ist ein Symbol und bedeutet,
das ein Prozess in einen Kanal schreibt.
1 (c!v -> P)
Listing 8.2: Ein Prozess P schreibt v in einen Kanal c
In diesem Beispiel wird beschrieben, wie ein Prozess ein Event v in den Kanal
c schreibt und sich anschlieend wie der Prozess P verhalt. In Listing 8.3 ist
dargestellt, wie ein Prozess einen Wert aus einem Kanal liest.
1 (c?x -> P(x))
Listing 8.3: Ein Prozess P liest x aus einem Kanal c
In diesem Beispiel wurde verdeutlicht, wie ein Prozess, ein Event x aus dem Kanal
c liest und sich anschlieend wie der Prozess P(x) verhalt.
Das waren nat urlich nur sehr kleine Beispiele uber CSP, aus dem Buch von Tony
Hoare [1]. Wenn man CSP verstanden hat, kann man damit die komplette Prozess-
8.2 CSP in Go 93
kommunikation abbilden und somit mogliche Deadlocks, Livelocks usw. erkennen
und dadurch versuchen vermeiden. Somit wird CSP zum Beispiel oft genutzt,
um sicherheitskritische Anwendungen in Luft- und Raumfahrt zu verizieren. Die
eben gezeigten Beispiele, enthalten auch den wesentlichen Bestandteil dessen,
was in Go umgesetzt wurde. Gemeint ist damit das Kommunizieren zwischen
nebenlaugen Prozessen uber Kanale, welches in den nachsten Kapiteln naher
betrachtet wird.
8.2 CSP in Go
Im Kapitel 8.1.1 wurde kurz dargestellt wie Prozesse untereinander kommunizie-
ren. Das Konzept zur Kommunikation zwischen nebenlaugen Prozessen wurde
von den Go-Entwicklern umgesetzt und somit ist es moglich, in Go Kanale zur
Kommunikation einzusetzen. Damit jedoch Kanale genutzt werden konnen, ist es
notwendig Prozesse oder Threads zu erzeugen. In dem nachfolgenden Abschnitt
wird das Erzeugen von Threads beschrieben und danach genauer auf die Umset-
zung von Kanalen in Go eingegangen.
8.2.1 Go Routine
Das Erzeugen von Threads in Go ist sehr einfach. Es ist nicht notwendig, dass
eine Klasse ein Interface oder bestimmte Methoden implementieren muss. In Go
kann jede Funktion ein Thread sein. Das Starten eines Threads wird durch das
Schl usselwort go erreicht.
1 package main
2 import ("fmt"
3 "time")
4
5 func printDelay(v string){
6 time.Sleep(1*1e9)
7 fmt.Println(v)
8 }
9
10 func main(){
11 go printDelay("Hallo Welt!")
12 time.Sleep(2*1e9)
13 }
Listing 8.4: Thread starten mit dem Schl usselwort go
94 8 Concurrency in Go
Das Beispiel im Listing 8.4 zeigt ein vollstandiges Programm in dem zwei Me-
thoden implementiert sind. Die Methode printDelay(v string) in Zeile 5 gibt
eine Zeichenkette, um eine Sekunde verzogert, auf der Konsole aus. Die Me-
thode main() in Zeile 10 muss in jedem Go-Programm vorhanden sein und
wird automatisch beim Programmstart ausgef uhrt. In Zeile 11 wird die Methode
printDelay(v string) durch Angabe des Schl usselwortes go als Thread ge-
startet. Weil in Go alle Threads spatestens terminieren, wenn die Hauptfunktion
beendet wird, ist es notwendig zu warten bis alle Threads beendet wurden [2].
In Zeile 12 wird deshalb etwas langer gewartet, als der zuletzt gestartete Thread
zum Abarbeiten benotigt. Das ist nat urlich nicht sehr elegant, aber funktioniert
auch. Im folgenden Abschnitt wird gezeigt, wie man das besser umsetzen kann.
8.2.2 Kommunikation zwischen Threads
Dieser Abschnitt macht den Hauptteil des Kapitels aus. Hier wird verdeut-
licht, wie Threads und Prozesse mittels Kanale untereinander kommunizieren
konnen. In den folgenden Abschnitten wird dabei auf die verschiedenen Anwen-
dungsmoglichkeiten und Besonderheiten von Kanalen in Go eingegangen.
Grundlagen zu Kanalen
Ein Kanal wie er in CSP verwendet wird, ist in Go ein Datentyp namens
Channel.
Ein Kanal ist ein Objekt welches zur Kommunikation und Synchronisation genutzt
werden kann. In Listing 8.5 ist beschrieben, wie in Go ein Kanal mit oder ohne
Initialisierung deklariert werden kann.
1 c := make(chan string) //Deklaration und Initialisierung
2 var c chan string //nur Deklaration
Listing 8.5: Erzeugen eines Kanals
Hierbei wird ein Kanal erstellt, welcher in der Lage ist Werte vom Typ String zu
transportieren. Um einen Wert in einen Kanal zu schreiben oder aus einem Kanal
zu lesen, gibt es in Go spezielle Operatoren. Der Ausdruck MeinChannel<- wird
genutzt um in einen Kanal zu schreiben und der Ausdruck <-MeinChannel um
aus einen Kanal zu lesen. In Listing 8.6 wird der vorher gezeigte Beispielcode so
modiziert, dass ein Kanal zur Kommunikation eingesetzt wird und somit das
Warten auf den Thread mit Hilfe der Funktion time.Sleep() ersetzt werden
kann.
1 ...
2 func printDelay(c chan string){
3 time.Sleep(1*1e9)
8.2 CSP in Go 95
4 c<-"Hallo Welt!"
5 }
6
7 func main(){
8 c := make(chan String)
9 go printDelay(c)
10 fmt.Println(<-c)
11 }
Listing 8.6: Kommunikation uber Channel
Wie in dem Beispiel zu erkennen ist, wird in der Hauptfunktion zuerst ein Kanal
initialisiert, um Daten vom Typ String transportieren zu konnen. Dieser Kanal
wird der Methode printDelay(c chan string) ubergeben, welche durch das
Schl usselwort go in einem Thread gestartet wird. Die Fortf uhrung der Hauptfunk-
tion wird in Zeile 11 blockiert, da noch kein Wert aus dem Kanal gelesen werden
kann. Das Schreiben in den Kanal erfolgt in Zeile 5, worauf die Hauptfunktion
einen Wert aus dem Kanal lesen kann und diesen auf der Konsole ausgibt. Ein
Kanal verhalt sich demnach ahnlich wie eine
Komma, Ok Syntax,
die ein Blockieren des Threads vermeidet [2]. Somit ist es nicht von Relevanz ob
ein Kanal gepuert/nicht gepuert oder der Puer voll/leer ist. Beim lesenden
Zugri auf einen Kanal sieht das folgendermaen aus (siehe Listing 8.8).
96 8 Concurrency in Go
1 element, ok = <-c
Listing 8.8:
Komma,
Ok Syntax ahnlich aus, wie in Listing 8.9 zu erkennen ist.
1 ok := c<-"Hallo Welt!"
Listing 8.9:
Komma, Ok Syntax
einsetzen w urde. Aus diesem Grund ist es in Go moglich eine select-Anweisung
auf Kanale anzuwenden. Die select-Anweisung ahnelt der switch-Anweisung in
Go, ist allerdings auf Kanale beschrankt.
1 select {
2 case v := <-c1: //mach was mit v
3 case v := <-c2: //mach was mit v
4 case v := <-c3: //mach was mit v
5 }
Listing 8.10: Select-Anweisung auf Kanale
In dem eben gezeigten Beispiel 8.10 existieren in einem Thread die drei Kanale c1,
c2 und c3 aus denen ein Wert gelesen und in der Variable v abgespeichert werden
8.2 CSP in Go 97
soll. Durch die select-Anweisung ist es moglich auf alle drei Kanale gleichzeitig zu
warten. Sobald einer der Kanale einen Wert liefert, wird dieser in der Variablen
v abgespeichert. Dabei wird v implizit der passenden Typ zugewiesen. Nach dem
: ist es moglich weiteren Code auszuf uhren. Dies kann zum Beispiel das Starten
eines weiteren Threads sein, dem v als Parameter ubergeben wird. Wie auch bei
der
netchan konnen
typsichere Netzwerkkanale erstellt werden. Netzwerkkanale sind nicht synchroni-
siert und verhalten sich wie gepuerte Kanale [4]. Das Erstellen ist jedoch etwas
komplizierter als es bei den einfachen Kanalen der Fall ist, da ein sogenannter
ur Java
Martin Engel
Inhaltsverzeichnis
9.1 Einf uhrung . . . . . . . . . . . . . . . . . . . . . . . . . 101
9.2 Prozessorientierung in Java mit JCSP . . . . . . . . . . . 102
9.2.1 Hintergrund . . . . . . . . . . . . . . . . . . . . 102
9.2.2 Prozessorientiertes Design . . . . . . . . . . . . . 103
9.3 Die JCSP Bibliothek . . . . . . . . . . . . . . . . . . . . 105
9.3.1 Prozesse . . . . . . . . . . . . . . . . . . . . . . 105
9.3.2 Passive Strukturierungselemente . . . . . . . . . 106
9.3.3 Channels . . . . . . . . . . . . . . . . . . . . . . 106
9.3.4 Alternation . . . . . . . . . . . . . . . . . . . . . 107
9.3.5 Einfache Beispielimplementierung . . . . . . . . . 107
9.4 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . 109
JCSP ist eine Implementierung der von Tony Hoare im Jahr 1987 entwickelten for-
malen Sprache CSP (siehe Kapitel 6) f ur Java. Sie erlaubt Interaktionen zwischen
nebenlaugen Prozessen und daraus folgend die Entwicklung von prozessorien-
tierten Java Applikationen, deren Verhalten vollumfanglich beschreibbar ist.
9.1 Einf uhrung
Durch die Entwicklung von Mehrkernprozessoren ist es den CPU-Herstellern ge-
lungen, die Leistungsfahigkeit der aktuellen Prozessorgeneration durch die Paral-
lelisierung multipler Prozesse um ein Vielfaches zu steigern. Diese Art der Ver-
arbeitung erlaubt es, mehrere Rechenoperationen in einem Taktzyklus zu erledi-
gen, sofern diese eine parallele Abarbeitung erlauben. Dies entspricht auch der
nat urlichen Verarbeitungsweise, die wir aus unserem Alltag kennen. Dort ndet
eine Zuteilung von Teilaufgaben je nach Fahigkeiten des Mitarbeiters statt, die
dann parallel bearbeitet werden. Der gesamte Prozess besteht aus der Gesamtheit
seiner Teilaufgaben [1].
102 9 Communicating Sequential Processes f ur Java
In der technische Welt nimmt jedoch aufgrund der parallelen Tasks die Komple-
xitat eines solchen nebenlaugen Prozesses stark zu. F ur einen Softwareentwickler
kann es bereits bei kleinen Anwendungen zu unvorhergesehenen Problemen kom-
men, weil konkurrierende Tasks auf gemeinsame Ressourcen zugreifen. Als Beispiel
sei hier das Erzeuger-Verbraucher-Problem zu nennen. Die Synchronisation von
abhangigen Prozessen spielt hier eine wichtige Rolle, damit es nicht zu unvorher-
gesehenen Ergebnissen kommt. M ussen diese Tasks im Verlauf ihres Lebenszyklus
synchronisiert werden, so stellt dies meist zusatzliches Problempotential dar [3].
Dieser Artikel soll einen
Uberblick uber die JCSP Elemente geben, sowie das
grundlegenden Konzept hinter der Klassenbibliothek beschreiben. Eine Beispiel-
implementation zeigt den Aufbau und die Verbindung von Prozessen in einer JCSP
Anwendung.
9.2 Prozessorientierung in Java mit JCSP
In Java existieren bereits zahlreiche Konzepte zur Synchronisation von Threads,
wie z.B. das Monitorkonzept oder der Semaphormechanismus. Zur Kommuni-
kation zwischen Prozessen wird Remote Method Invocation (RMI) bereitgestellt.
Deren Mechanismen sind zwar einfach zu verstehen, jedoch bleibt die Anwendung
der Konzepte oft schwierig und deren Auswirkungen auf die einzelnen Threads
sind nicht immer vorhersehbar [2][3].
Im folgenden Abschnitt werden zunachst die Gr unde beleuchtet, die zur Entwick-
lung von JCSP gef uhrt haben. Anschlieend werden die grundlegenden Elemente
der Bibliothek untersucht.
9.2.1 Hintergrund
Ein Objekt kapselt sowohl Eigenschaften, als auch Methoden zur Anzeige oder
Manipulation dieser Daten und ist stets eine Instanz einer Klasse, die wiederum
zu anderen Klassen in Beziehung steht und dabei deren Verhalten erweitert. Das
heit, dass Klassen in einer Spezialisierungsrelation einer anderen Klasse stehen.
Elemente des objektorientierten Paradigmas, wie etwa Vererbung und Polymor-
phie, sind zwar aus der nat urlichen Welt entnommen und haben das Software-
design revolutioniert, haben jedoch in einigen Bereichen Schwachen. Speziell bei
der prozessorientierten Herangehensweise und hier insbesondere bei nebenlaugen
Prozessen, wirken sie oft storend. Zunachst ist festzuhalten, dass Objekte kein
Eigenleben besitzen. Das heit, dass samtliche Methoden eines Objekts direkt
oder indirekt nur durch einen in der Ausf uhrung bendlichen Thread aufgerufen
werden konnen (Welch nennt diese Eigenschaft: caller-oriented) [3].
9.2 Prozessorientierung in Java mit JCSP 103
Im seriellen objektorientierten Design muss der Mainthread alle Objekte bedienen,
um diese vor ubergehend zu aktivieren. Das ist solange notig wie deren Metho-
den ausgef uhrt werden. In einem nebenlaugen System sind die Objekte direkt
abhangig von der Ausf uhrung durch einen im Sichtbarkeitsbereich bendlichen
Thread. Dar uber hinaus ist es nicht moglich, die Ausf uhrung einer Methode zu
verhindern. Generell spielen die Grenzen eines Objekts eine untergeordnete Rol-
le, weil die Datenkapselung mehr und mehr zusammenbricht. Der Grund daf ur
ist, dass Attribute eines Objekts meist selbst Objekte sind, die dann haug wie-
derum in einer Vielzahl von anderen Objekten Verwendung nden. Durch diese
Umstande besitzt ein Objekt kaum individuelle Kontrolle uber seinen eigenen Le-
benszyklus und seine Attribute. Es droht ein un ubersichtliches Chaos, selbst wenn
ausschlielich primitive Datentypen Verwendung nden. Welch vergleicht diesen
Umstand mit dem Einsatz von globalen Variablen in manchen Programmierspra-
chen [3][4]. Allerdings ist zu beachten, dass die aufgef uhrten Unzulanglichkeiten
nicht aufgrund von Nebenlaugkeit zustande kommen. Es sind Schwachen des
objektorientierten Design.
1
9.2.2 Prozessorientiertes Design
Nebenlauges Verhalten von Objekten in einem System entspricht dem normalen
Verstandnis und sollte daher nicht schwierig zu implementieren sein. Es sollte
eher ein machtiges Hilfsmittel zur vereinfachten Beschreibung eines Systems sein.
Daraus ergibt sich oft bereits eine Performanceverbesserung.
Traditionelle Ansatze zum Anwendungsdesign waren entweder datenorientiert
oder prozessorientiert. Beim datenorientierte Ansatz wird die Struktur der Infor-
mationen und die Beziehungen untereinander modelliert, wohingegen beim pro-
zessorientierten Design die Aktion im Vordergrund steht, die durch ein Software-
artefakt ausgef uhrt wird [5].
Zur Beschreibung von Prozessen und deren Verhalten wurde CSP entwickelt. CSP
ist eine mathematisches Modell zur Spezikation und Verikation von komplexen
Verhaltensweisen, die durch die Interaktion zwischen nebenlaugen Objekten auf-
treten konnen [3]. Zur Anwendungsentwicklung ist es allerdings nicht notig, die
formale Sprache anzuwenden. Die meisten Modelle konnen auch hier durch Dia-
gramme beschrieben werden.
CSP basiert auf Prozessen, Prozessnetzwerken und zahlreichen Arten von Syn-
chronisation und Kommunikation zwischen diesen. Ein Prozessnetzwerk ist auch
wieder ein Prozess, wodurch sich Anwendungen haug in Schichtenarchitekturen
strukturieren lassen[3].
1
Einen Ausweg bietet das aus der funktionalen Programmierung bekannte Konzept von immu-
table data.
104 9 Communicating Sequential Processes f ur Java
Prozesse
Ein Prozess in CSP ist eine Komponente, die sowohl die Datenstruktur, als auch
die Algorithmen zur Manipulation der Daten beinhaltet. Sowohl Daten, als auch
Algorithmen sind im Sichtbarkeitsbereich als private deniert. Das heit, dass die
Auenwelt keinen lesenden oder schreibenden Zugri auf die Daten hat und die
Algorithmen nicht ausf uhrbar sind. Jeder Prozess ist aktiv und f uhrt seine Algo-
rithmen auf seine eigenen gekapselten Daten aus [2]. Untereinander interagieren
Prozesse ausschlielich uber Channels, da sie keinen Zugri auf die Methoden der
Gegenseite haben.
Synchronized Channels
Die einfachste Art der Prozessinteraktion ist synchronisiertes message passing
uber Channels. Vergleichbar ist diese Art der Kommunikation mit einer direkten
Kabelnetzwerkverbindung zweier Hardwaregerate [2].
Prozess A
c
Prozess B
Abbildung 9.1: einfaches Prozessnetzwerk
Das Beispiel in Abbildung 9.1 zeigt zwei Prozesse A und B, die uber einen Chan-
nel verbunden sind. Dieser besitzt keinerlei Kapazitat um Informationen auf-
zunehmen, sondern er ist ausschlielich Medium zur Nachrichten ubertragung.
Damit kein Informationsverlust auftreten kann, muss Channel-Kommunikation
synchronisiert sein [3]. Das bedeutet, dass Prozess A nach dem Senden ei-
ner
Ubertragungseinheit solange blockiert bis Prozess B bereit ist, eine weitere
AMQP working group. Er wollte gerne eine schlankere Alternative. Aus diesem
Gedanken entstand MQ. Die aktuelle Version ist 2.0.10 (Stand: Januar 2011).
13.3 Vorteile von ZeroMQ
Bei naherem Betrachten liegen die Vorteile von MQ auf der Hand. Es verspricht
von sich selber:
Nachrichten und
To-
pics, also Themengebiete. Ein Sender stellt f ur gewisse Interessengebiete neue
Nachrichten zur Verf ugung. Empfanger, die sich auf diese Gebiete
angemel-
det haben, konnen diese Nachrichten empfangen (dies ist in Abbildung 13.5
dargestellt).
UPSTREAM / DOWNSTREAM
Diese Methode kann man sich als einen Verbund von virtuellen Pipelines vor-
stellen. In dieser Pipeline sind verteilte Knoten miteinander verbunden. Am
oberen Ende ist ein Sender, der Daten in die verschiedenen Pipelines einf ullt
(siehe Abbildung 13.6). In der Mitte sind ein oder mehrere Empfanger, die die
Daten verandern und weiterleiten. Am Ende sind ein oder mehrere Empfanger
der Daten. Man kann sagen, dass dieser Kommunikations-Mechanismus ein
spezieller Fall des
make am bes-
ten. Es gibt auch die Moglichkeit, es auf einem Windows-System mit dem Visual
Studio zu kompilieren. Auch die meisten Bindings zu anderen Programmierspra-
chen sind nur im Source-Code vorhanden.
#include <zmq.hpp>
#include <unistd.h>
#include <stdio.h>
#include <string.h>
int main () {
// Prepare our context and socket
zmq::context_t context (1);
zmq::socket_t socket (context, ZMQ_REP);
socket.bind ("tcp://*:6666");
while (true) {
zmq::message_t request;
// Wait for next request from client
socket.recv (&request);
printf ("Received request: [%s]\n",
(char *) request.data ());
// Do some work
sleep (1);
// Send reply back to client
zmq::message_t reply (6);
memcpy ((void *) reply.data (), "World", 6);
13.7 Hands on ZeroMQ! 161
socket.send (reply);
}
return 0;
}
Listing 13.2: Beispiel eines Hello World Servers in ZeroMQ.
13.7.2 Beispiele
Wir fangen, wie in allen ersten Tutorials, mit einem kleinem Hello World-
Programm an. Es ist ein in C++ geschriebener Client und Server, die sich ge-
genseitig Hello und World Pakete schicken. Dieses ist in Listing 13.2 gezeigt. Als
erstes wird der Server erstellt. Er soll Pakete annehmen und ein Paket mit dem
Inhalt World zur uckschicken. Um eine MQ-Applikation zu starten, muss man
zuerst den MQ-Kontext erstellen. Hier werden Thread-Pools angelegt und wei-
tere Initialisierungen durchgef uhrt. Die Zahl, die als Parameter an den Kontext
ubergeben wird ist die Anzahl an IO-Threads, die erzeugt werden sollen. Nun
wird mithilfe des erstellten Kontextes ein MQ-Socket erzeugt. Hier wird der
Parameter REP (f ur Reply) ubergeben. Dieser zeigt an, dass dieses Socket auf
Anfragen antwortet. Danach wird das erstellte Socket an einen Endpunkt gebun-
den (bind). Dies ist hier ein TCP-Endpunkt mit dem Port 6666. Das Sternchen
fungiert als Platzhalter, da es sich um eine Verbindung handelt, die von einem an-
deren Teilnehmer aufgerufen wird. Daher kann die gebundene IP immer wechseln.
Nun folgt die Endlosschleife in der die Verarbeitung stattndet. Hier wird zuerst
eine Message erzeugt (request genannt), dieser wird die Methode socket.recv()
ubergeben und, wenn eine Anfrage vorhanden ist, mit Daten gef ullt. Wenn dies
der Fall ist, werden die gesendeten Daten mit printf() ausgegeben und eine Mil-
lisekunde mit sleep(1) gewartet. Danach wird eine Antwortmessage erzeugt und
World hinein geschrieben und per socket.send() zur uck geschickt. Das return 0
wird nie erreicht.
#include <zmq.hpp>
#include <string.h>
#include <stdio.h>
int main ()
{
// Prepare our context and socket
zmq::context_t context (1);
zmq::socket_t socket (context, ZMQ_REQ);
printf ("Connecting to hello world server...\n");
162 13 ZeroMQ
socket.connect ("tcp://localhost:6666");
// Do 10 requests, waiting each time for a response
for (int request_nbr = 0; request_nbr != 10; request_nbr++) {
zmq::message_t request (6);
memcpy ((void *) request.data (), "Hello", 6);
printf ("Sending request %d...\n", request_nbr);
socket.send (request);
// Get the reply.
zmq::message_t reply;
socket.recv (&reply);
printf ("Received reply %d: [%s]\n", request_nbr,
(char *) reply.data ());
}
return 0;
}
Listing 13.3: Beispiel eines Hello World Client in ZeroMQ.
Im Client-Code zu diesem Beispiel (Listing 13.3) sehen die ersten Zeilen wieder
ahnlich aus. Es wird ein Kontext erstellt und ein Socket generiert (diesmal mit
REQ f ur Request). Das Socket wird auf die localhost-Adresse mit dem Port 6666
und TCP gebunden. Danach werden in einer for-Schleife 10 Request an den Server
abgesendet und der Reply ausgegeben.
13.8 Fazit
In diesem Artikel wurde eine praktische Einf uhrung in die Programmierung mit
MQ gegeben. Nachdem Grundlagen uber die Historie, Architektur und Verwen-
dung von MQ erlautert wurden, verdeutlichte ein praktisches Beispiels die Ver-
wendung. Mein Fazit aus der Arbeit an MQ ist positiv. Nach einigen Startschwie-
rigkeiten, die die Kompilierung und den Integrationsanforderungen von MQ ge-
schuldet sind, kann man sehr schnell auch komplexere Anwendung erstellen und
praktisch umsetzen. Es ist durch die vielen vorhandenen Beispiele und den guten
Einf uhrungen einfach zu erlernen und man sieht schnell Erfolge. Ich kann jedem,
der sich f ur asynchrone Kommunikation und verteilte Anwendungen interessiert
empfehlen, sich mit MQ zu beschaftigen und auch gerne mal in den Quellco-
de zu schauen, da dieser sehr gut kommentiert ist. F ur mich war die Erfahrung,
die ich mit diesem Framework gemacht habe, sehr lehrreich und es hat mich
weitergebracht.
Literaturverzeichnis 163
Literaturverzeichnis
[1] ZeroMQ Website, http://www.zeromq.org/. 31.01.2011.
[2] ZeroMQ Guide, http://zguide.zeromq.org/chapter:all. 31.01.2011.
[3] Advanced Message Queuing Protocol, http://www.amqp.org/conuence/dis-
play/AMQP/Advanced+Message+Queuing+Protocol. 31.01.2011.
[4] TCP, http://www.faqs.org/rfcs/rfc793.html. 31.01.2011.
[5] OSI Modell, http://de.wikipedia.org/wiki/OSI-Modell. 31.01.2011.
[6] Asynchronous-I/O, http://en.wikipedia.org/wiki/Asynchronous I/O. 31.01.
2011.
[7] Pearl Module for ZeroMQ, http://search.cpan.org/dmaki/ZeroMQ-0.02
01/lib/ZeroMQ.pm. 31.01.2011.
[8] ZeroMQ Beispiele, https://github.com/imatix/zguide/tree/master/examples
31.01.2011.
[9] ZeroMQ Source, git://github.com/zeromq/zeromq2.git. 31.01.2011.
[10] RFC Pragmatic General Multicast, http://tools.ietf.org/html/rfc3208. 31.
01.2011.
[11] Pipes and Filters, http://msdn.microsoft.com/en-us/library/647419.aspx.
31.01.2011.
[12] ZeroMQ the Game, http://www.zeromq.org/blog:0mq-the-game. 31.01.
2011.
164 13 ZeroMQ
14 Remote Function Call in
SAP-Systemen
Sebastian Reidemeister
Inhaltsverzeichnis
14.1 Grundlagen . . . . . . . . . . . . . . . . . . . . . . . . . 166
14.2 RFC - Allgemein . . . . . . . . . . . . . . . . . . . . . . 166
14.3 RFC - Kommunikation . . . . . . . . . . . . . . . . . . . 168
14.4 RFC-Arten . . . . . . . . . . . . . . . . . . . . . . . . . 170
14.4.1 Synchroner RFC (sRFC) . . . . . . . . . . . . . . 170
14.4.2 Asynchroner RFC (aRFC) . . . . . . . . . . . . . 170
14.4.3 Transaktionaler RFC (tRFC) . . . . . . . . . . . 171
14.4.4 Queued RFC (qRFC) . . . . . . . . . . . . . . . 171
14.4.5 Background RFC (bgRFC) . . . . . . . . . . . . . 172
14.5 Programmierung . . . . . . . . . . . . . . . . . . . . . . 173
14.6 Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
Dieses Kapitel beschaftigt sich mit dem Aspekt der Kommunikation zwischen
verschiedenen Systemen im SAP-Umfeld. Dabei soll ein kurzer Einblick in die
Standardkommunikation mittels der Remote Function Calls, kurz RFC, gegeben
werden.
F ur die Programmierung von RFCs sind ein paar grundlegende Informationen
wichtig. Diese werden im Abschnitt 14.1 dieses Textes kurz erlautert. Danach wird
geklart, was man unter der RFC-Technik versteht. Ebenso wird kurz auf mogliche
Kommunikationsszenarien, die mit dem RFC ermoglicht werden konnen, einge-
gangen. Nachdem der Kontext des RFC naher erlautert wurde, werden im darauf
folgenden Teil alle momentan existierenden Arten des RFC erlautert. Am Ende
wird ein kurzer Ablaufplan f ur die Programmierung und eine Zusammenfassung
gegeben.
166 14 Remote Function Call in SAP-Systemen
14.1 Grundlagen
Um einen RFC in SAP programmieren zu konnen, kann man sich der Program-
miersprache ABAP bedienen. Sie ist eine Eigenentwicklung von SAP. ABAP be-
deutete bei ihrer Entstehung
CALL
FUNCTION um einige Parameter erweitert, um bspw.
DESTINATION.
14.2 RFC - Allgemein 167
Bei der Organisation der Kommunikation bietet der RFC einige wesentliche Funk-
tionen die nicht mehr nur alleine durch den Programmierer realisiert werden, son-
dern die das System teilweise selbst erledigt. Unter anderem organsiert der RFC
den Aufruf und die Steuerung der Kommunikationsroutinen, die f ur die Kommuni-
kation mit entfernten Systemen benotigt werden. Dazu gehort beispielsweise auch
die Anmeldung bzw. die Abmeldung am entfernten System. Wird eine Kommu-
nikation aufgebaut, so pr uft der RFC, ob der gew unschte Funktionsbaustein bzw.
die ubergeordnete Funktionsgruppe f ur den aufrufenden Nutzer freigegeben ist
und somit auch benutzt werden darf. Eine weitere Funktion des RFC ist die Kon-
vertierung von Aktualparametern. Es werden alle Daten, die f ur die Bearbeitung
des Aufrufs wichtig sind, in die jeweilig benotigten Datentypen konvertiert. Dies
konnen eventuell plattformabhangige Konvertierungen, beispielsweise bei unter-
schiedlichen Codepages oder Byte-Reihenfolgen, sein. Selbstverstandlich enthalt
der RFC eine Fehlerbehandlung, die auftretende Fehler bei der Kommunikation
abfangt und an den Aufrufer weiterreicht.
Kommunizieren nun zwei unterschiedliche SAP-System miteinander, so treten
meist zwei ABAP-Programme miteinander in Kontakt. Bei der Kommunikation
eines SAP-Systems mit einem Fremdsystem tritt meist ein ABAP-Programm mit
einem Programm in einer anderen Programmiersprache in Kontakt. Dabei hat
ABAP die Moglichkeit eine Verbindung mit den gangigsten Programmiersprachen,
wie z. B. C, C++, Visual Basic, Java oder .NET, aufzubauen. Deshalb kann die
RFC-Schnittstelle aus zwei Sichten betrachtet werden.
Zum einen gibt es die Schnittstelle aus ABAP-Sicht. Danach kann jedes beliebige
ABAP-Programm einen remote-fahigen Funktionsbaustein aufrufen. Dabei muss
dieser aufgerufene Funktionsbaustein als remote-fahig im aufgerufenen System
registriert sein. Durch eine Erweiterung des ublichen Funktionsbaustein-Aufrufs
in ABAP (
SYSTEM FAILURE-Exception
und zum anderen die
IN
BACKGROUND TASK wird jeder Aufruf eines Funktionsbausteins zur Bearbei-
tung vorgemerkt. Im aufrufenden Programm wird durch den Befehl
COMMIT
WORK die Ausf uhrung gestartet. Im Empfangssystem werden die Aufrufe, je
nachdem wie sie ankommen, abgearbeitet. Es ist nicht garantiert, dass diese Auf-
rufe in der gew unschten Reihenfolge bearbeitet werden. Wird ein Aufruf gesendet
und der Empfanger ist nicht verf ugbar, so wird der Aufruf in eine Warteschlan-
ge eingetragen. Das rufende Programm kann dadurch weiterlaufen ohne auf das
erfolgreiche oder nicht erfolgreiche Ablaufen der Funktionen zu warten. Wird
der RFC-Server nicht innerhalb eines bestimmten Zeitraums aktiviert, werden die
Aufrufe in einer Jobliste als Hintergrundauftrag eingetragen.
14.4.4 Queued RFC (qRFC)
Eine Erweiterung des tRFC stellt der qRFC dar. Beim qRFC ndet eine Seriali-
sierung des tRFC uber Queues statt. Diese Queues werden meist in Ausgangs-
und Eingangsqueue unterteilt. Damit wird ermoglicht, dass die ubertragenen Auf-
rufe im Zielsystem in der Reihenfolge bearbeitet werden, wie sie eintreen. Es
besteht weiterhin die Moglichkeit, eine Ausf uhrungseinheit (also mehrere Funk-
tionsbausteine innerhalb eines Prozesses) auf verschiedene Queues zu verteilen.
Diese Moglichkeit wird auch als Abhangigkeit bezeichnet.
172 14 Remote Function Call in SAP-Systemen
Der qRFC kann verschiedene Einsatzszenarien haben. Unter dem Outbound-
Szenario versteht man die Aufzeichnung der Aufrufe in der Ausgangsqueue auf
der Datenbank des Senders. Dies f uhrt zu einer Entkopplung zwischen Sender
und Empfanger. Das Inbound-Szenario beschreibt die Aufzeichnung der Aufrufe
als Eingangsqueue auf der Datenbank des Empfangers. Der Empfanger ist aber
meist kein entferntes System sondern ein anderer Applikationsserver des senden-
den AS ABAP. Dieses Szenario wird benutzt um beispielsweise Anwendungen
zu parallelisieren. Das nachste Szenario ist das Out-In-Szenario. Dies stellt ei-
ne Kombination von Outbound- und Inboundszenario dar. Anscheinend werden
die Vorteile beider Szenarien ausgenutzt. Jedoch sollte dieses Einsatzszenario nur
verwendet werden, wenn es begr undete Umstande f ur die doppelte Bereitstellung
der Daten gibt. Das letzte Szenario ist das No-Send-Szenario. Dies stellt einen
degenerierten Spezialfall dar. Daten werden nur auf Anforderung an ein anderes
System ubergeben. So z. B. bei der Anbindung von mobilen Endgeraten. Das
Endgerat fordert Daten beispielsweise aus der CRM-Middleware an und bekommt
sie ubergeben.
14.4.5 Background RFC (bgRFC)
Der Einsatz des background RFC ermoglicht es, Daten aufzuzeichnen, die spater
von der aufgerufenen Anwendung empfangen werden konnen. Dabei stellt der
bgRFC sicher, dass die Daten entweder genau einmal in beliebiger Reihenfol-
ge (transaktional) oder genau einmal in der Reihenfolge der Erzeugung an den
Empfanger ubergeben werden. Die verschiedenen Aufrufe konnen uber Queues
organisiert werden. Dabei kann ein Aufruf auf verschiedene Queues aufgeteilt
werden. Dadurch entsteht eine Abhangigkeit zwischen den Queues. Man kann
diesen Umstand auch als Synchronisationspunkt der Queues betrachten. Alle
Queues konnen weiter abgearbeitet werden bis ein Eintrag einer Queue mit einer
Abhangigkeit an erster Stelle der Queue steht. Erst wenn in allen betreenden
Queues die Eintrage der Abhangigkeit an erster Stelle stehen, kann der komplette
Aufruf bearbeitet werden. Diese Funktion des bgRFC ist sehr machtig und muss
genau uberlegt verwendet werden, da es sonst zu einem kompletten Stillstand der
Queue-Verwaltung kommen kann. Eine Anwendungsmoglichkeit ist beispielsweise
die Belegverwaltung in der Logistik. Eine kombinierte Verwendung von bgRFC,
qRFC und tRFC sind innerhalb eines Ziels nicht gestattet. Beim bgRFC gibt
es einige Optimierungsmoglichkeiten zwischen dem Aufrufer und dem Gerufenen.
Ausschlaggebend daf ur ist die Asynchronitat. Innerhalb eines SAP-Systems f uhren
diese Optimierungen zu einer Parallelisierung und zu einer Lastverteilung uber die
verf ugbaren Applikationsserver des Systems. Dies wird auch als Inbound-Verfahren
bezeichnet. Zwischen entfernten SAP-Systemen konnen durch die Asynchronitat
die Unterschiede in den Leistungsmerkmalen der verschiedenen AS ausgeglichen
14.5 Programmierung 173
werden. Weiterhin f uhren diese Optimierungen zu einer Entkopplung, also einer
physischen Aufteilung, einer Anwendung bzw. eines Business-Szenarios. Man be-
zeichnet diese Optimierungen auch als Outbound-Verfahren. Beide Verfahren,
Inbound- und Outbound-Verfahren, konnen auch kombiniert werden. Dadurch
lassen sich alle Optimierungsmoglichkeiten ausnutzen. Jedoch erfolgt die Auf-
zeichnung der Daten doppelt.
Im Allgemeinen kann man sagen, dass der bgRFC eine bessere Skalierbarkeit bei
der Bearbeitung von RFC-Daten ermoglicht. Eine weitere Verbesserung der Per-
formance bei der Erstellung eines bgRFC-Programms bietet eine API, die von SAP
f ur die Entwickler zur Verf ugung gestellt wurde. Sie f uhrt zu einer Reduzierung
des Support- und Entwicklungsaufwandes. Diese API unterst utzt die Denition
der Eigenschaften der
Ubertragung, Datenaufzeichnung und die B undelung meh-
rerer Funktionsbausteine als eine Unit. Als Unit bezeichnet man die Einheit einer
Ubertragung. Die Unit kann zwei Zustande besitzen, vollstandig ubertragen oder
steht zur
Ubertragung an. Das transaktionale Verhalten der Queue-Funktion er-
zielt keine Einsparung bei der Verarbeitung einzelner Units. Dieser Umstand kann
durch leistungsfahigere Hardware ausgeglichen werden.
14.5 Programmierung
Die Programmierung von RFCs erfolgt meist in drei Schritten. Im Schritt 1 muss
im System, auf welchem programmiert werden soll und dem Empfangssystem, ei-
ne Destination festgelegt werden. Dabei werden Einstellungen getroen, wie z. B.
Zieladresse des Empfangssystems oder Anmeldeinformationen am System. Diese
Einstellungen sind notwendig, um uberhaupt eine Verbindung mit einem exter-
nen System aufbauen zu konnen. Schritt 2 ist die Suche bzw. das Erstellen eines
remote-fahigen Funktionsbausteins. SAP bietet schon eine Vielzahl vorgefertigter
Bausteine, jedoch konnen Spezialfalle auftreten, in denen man gezwungen ist, ei-
gene Losungen zu erstellen. Schritt 3 ist dann die Erstellung des RFC-Programms.
Im Anschluss daran erfolgen meist noch weitere Tatigkeiten, wie beispielsweise
das Testen des Programms in einem Testsystem sowie das Einpegen des Pro-
gramms in das Produktivsystem, die jedoch an dieser Stelle nicht angesprochen
werden sollen.
14.6 Fazit
Zum Schluss ist festzustellen, dass die RFC-Technik ein sehr machtiges Werkzeug
f ur die Gestaltung von systeminterner bzw. system ubergreifender Kommunikation
darstellt. Mit Hilfe von RFCs gibt es f ur fast jedes Kommunikationsproblem eine
174 14 Remote Function Call in SAP-Systemen
Losung. Deshalb ist es nicht verwunderlich, dass alle Weiterentwicklungen im
Bereich Kommunikation im SAP-Umfeld, auf dem RFC-Konzept basieren.
Literaturverzeichnis
[1] Keller, H.; Kr uger, S., ABAP Objects: ABAP-Programmierung mit SAP Net-
Weaver. 3. Auage, 2006, Galileo Press, Bonn.
[2] RFC Programmierung in ABAP, Stand: 07.12.2010, http://help.sap.com/
printdocu/core /Print 46c/de/data/pdf/BCFESDE2/BCFESDE2.pdf
[3] Programming RFC Clients in ABAP, Stand: 07.12.2010,
http://help.sap.com/saphelp 47x200/helpdata/en/26/64f61dfa8911d386e70
000e82011b8/content.htm
Teil IV
Web Services
15 Web-Services-
Architektur
Sebastian Leisen
Inhaltsverzeichnis
15.1 Einleitung . . . . . . . . . . . . . . . . . . . . . . . . . . 177
15.2 Denition . . . . . . . . . . . . . . . . . . . . . . . . . . 178
15.3 Serviceorientierte Architekturen . . . . . . . . . . . . . . 178
15.3.1 Rollen in einer SOA . . . . . . . . . . . . . . . . 180
15.3.2 Aktionen in einer SOA . . . . . . . . . . . . . . . 181
15.4 Web-Service-Architektur . . . . . . . . . . . . . . . . . . 182
15.4.1 SOAP . . . . . . . . . . . . . . . . . . . . . . . 182
15.4.2 WSDL . . . . . . . . . . . . . . . . . . . . . . . 183
15.4.3 UDDI . . . . . . . . . . . . . . . . . . . . . . . . 184
15.4.4 Rollen und Aktionen . . . . . . . . . . . . . . . . 184
15.4.5 Beispiel - SOAP und WSDL . . . . . . . . . . . . 185
15.4.6 Vor- und Nachteile . . . . . . . . . . . . . . . . . 188
15.5 Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
15.1 Einleitung
Die Entwicklung der Web-Service-Architekturen kann auf eine lange Geschichte
zur uck blicken. Als Grundlage aller Computerprogramme und Programmierspra-
chen wird haug die Assemblerprogrammierung genannt. Mit ihren maschinenna-
hen Befehlen war es moglich bereits einige Probleme mit Hilfe eines Computers zu
losen. An verteilte Problembewaltigung war hierbei allerdings noch nicht zu den-
ken. Mit der Entwicklung von Netzwerktechniken wurde die Grundlage f ur Web-
Services geschaen. Die Einf uhrung von Remote Procedure Calls ermoglichte
erste entfernte und damit verteilte Funktionsaufrufe. Immer komplexer werdende
Programme erforderten eine neue Art der Programmierung. Auf die Assembler
Programmierung folgte die prozedurale Programmierung. Als auch diese nicht
mehr ausreichte wurde die Idee der objektorientierten Programmiersprache um-
gesetzt. Immer komplexer werdende Szenarien der Programmierung erforderten
178 15 Web-Services-Architektur
eine neue Abstraktionsebene. So auch im Falle von Web-Service-Architekturen.
Das folgende Kapitel soll einen Einblick in Serviceorientierte Architekturen und
im speziellen uber Web-Service-Architekturen bieten.
15.2 Denition
Web service is a software system designed to support interoperable machine-to-
machine interaction over a network. It has an interface described in a machine-
processable format (specically WSDL). Other systems interact with the Web-
Service in a manner prescribed by its description using SOAP messages, typically
conveyed using HTTP with an XML serialization in conjunction with other Web-
related standards [1].
Als Web-Service wird ein Softwaresystem verstanden welches die Interaktion von
Machine zu Machine ermoglicht. Das Anwendungsprogramm kann dabei auf ver-
schiedenen Plattformen laufen. Dies gewahrleistet die Interoperatbilitat des Web-
Services. Ein Web-Service kann somit auch als eine Softwareanwendung verstan-
den werden. Der Web-Service ist uber einen eindeutigen Uniform Ressource Iden-
tier (URI) identizierbar. Die Schnittstelle des Dienstes ist uber XML deniert.
Uber diese kann der Dienst deniert, beschrieben sowie gefunden werden. In ei-
ner Maschine-zu-Maschine-Kommunikation kann ein Web-Service auch mit so
genannten Software-Agenten kommunizieren. Dabei erfolgt ein Austausch von
XML Dokumenten uber zumeist internetbasierte Protokolle [1].
15.3 Serviceorientierte Architekturen
Web-Services orientieren sich an der Serviceorientierten Architektur - SOA.
Serviceorientierte Architekturen stellen das abstrakte Konzept einer Software-
Architektur dar. Im Zentrum von SOA steht das Anbieten, Suchen und Nutzen
von Diensten uber ein Netztwerk. Diese Dienste wiederum werden dabei von an-
deren Anwendungen und Diensten genutzt. SOA bieten den groen Vorteil der
Interoperabilitat, es spielt dabei keine Rolle welche Hard- noch Software, Pro-
grammiersprache oder welches Betriebssystem zu Grunde liegt. Die Anwendungs-
details sind daher nahezu unabhangig von der jeweiligen Implementierung. Die
funktionale Zerlegung der Anwendung ermoglicht eine prozessorientierte Betrach-
tungsweise. Somit ist es moglich explizite Teilprozesse uber das Netzwerk (z.B.
Internet) anzusprechen. Zusammenfassend lasst sich sagen, dass es sich bei einer
SOA nicht um eine konkrete Technik handelt, sondern um eine Abstraktion der
Wirklichkeit. Mittels dieser Abstraktion ist es moglich wesentliche Aspekte hervor
zu heben und unwichtige Aspekte auszublenden. Die aussichtsreichste Abstraktion
15.3 Serviceorientierte Architekturen 179
der Wirklichkeit kann als Web-Services gesehen werden [2].
Serviceorientierte Architekturen vereinen die folgenden Eigenschaften:
Lose Kopplung
Dynamisches Binden
Verzeichnisdienst
Verwenden von Standards
Sicherheit
Einfachheit.
Die lose Kopplung stellt ein wichtiges Merkmal einer Serviceorientierten Architek-
tur dar. Mit Hilfe der losen Kopplung ist es moglich, dass Dienste von Anwendern
beziehungsweise anderen Diensten bei Bedarf dynamisch gesucht, gefunden und
eingebunden werden konnen. Die Bindung des Services erfolgt zur Laufzeit, dass
heit zur
Ubersetzung des Programmes ist es nicht bekannt wer auf den Dienst zu-
greift. Das dynamische Einbinden beschreibt die Moglichkeit Funktionalitaten bei
Bedarf einzubinden. Als Voraussetzung muss jedoch erf ullt sein, dass ein moglicher
Aufrufer in der Lage ist einen entsprechenden Dienst uberhaupt zu nden. Dies
ist vergleichbar mit der Suche nach einem Restaurant in einer unbekannten Stadt.
Eine mogliche Losung zu diesem Problem ware die Verwendung von einem Bran-
chenbuch, wie die Gelben Seiten. Dabei m ussen allerdings drei Voraussetzungen
erf ullt sein [2].
Zugri auf ein Branchenbuch wie die Gelben Seiten
Kategorie muss dem Suchenden bekannt sein unter welcher ein mogliches
Restaurant zu nden ist
Restaurant muss in den Gelben Seiten registriert sein
Der Verzeichnisdienst ist mit den Gelben Seiten vergleichbar. Er stellt eine Art
Repository bereit in dem die zur Verf ugung stehenden Dienste registriert sind. Er
gestattet die Suche nach Methoden und Diensten welche gerade benotigt werden.
Allen Eigenschaften gleich ist die Notwendigkeit der Verwendung von Standards.
Nur dadurch ist es dem Nutzer moglich den Dienst eines unbekannten Anbieters
zu nutzen. Sollten keine Standards vorliegen, kann es passieren das die Kommu-
nikation mit dem Dienst scheitert. Dies ermoglicht eine breite Akzeptanz beim
Nutzer und sichert somit den Erfolg eines Web-Service. Ein Folge der Verwendung
von Standards ist die daraus resultierende Einfachheit, welche ein Web-Service mit
sich bringen sollte. Die Beschreibung, der Aufruf und die Kommunikation sollte
180 15 Web-Services-Architektur
Abbildung 15.1: Der SOA Tempel[2]
so einfach wie moglich gestaltet sein. Als letzte Eigenschaft vereint die SOA das
Thema Sicherheit [2].
Die folgende Abbildung veranschaulicht den allgemeinen und vereinfachten Auf-
bau einer Service-orientierten Architektur.
15.3.1 Rollen in einer SOA
Bei einer Serviceorientierten Architektur steht, wie bereits erwahnt, der Dienst
im Vordergrund. Dieser stellt dabei ein Programm bzw. eine Softwarekomponen-
te dar. Die Schnittstelle des Dienstes muss oentlich beschrieben sein. Die so
genannte Service Description muss in maschinenlesbarer Form vorliegen. Der Zu-
gri auf den Dienst ist dabei nur uber die beschriebene Schnittstelle moglich.
Damit wird das Prinzip des Information Hiding umgesetzt. Die Implementierung
des Dienstes an sich ist nicht sichtbar und wird uber die Dienstbeschreibung ge-
kapselt. Beteiligte einer SOA konnen drei verschiedene Rollen einnehmen:
Dienstanbieter
Dienstnutzer
Dienstverzeichnis / Dienstvermittler.
Der Dienstanbieter stellt eine Plattform zur Verf ugung, welche uber ein Netzwerk
(z.B. Internet) erreichbar ist [2].
15.3 Serviceorientierte Architekturen 181
Der angebotene Dienst muss vor der Nutzung jedoch beim Dienstverzeichnis re-
gistriert werden. Der Betreiber des Dienstes hat die Aufrechterhaltung, Sicher-
heit, Wartung sowie Authentizierung sicher zu stellen. Das Dienstverzeichnis,
auch Registry oder Repository genannt, spiegelt die bereits erwahnten Gelben
Seiten wieder. Beim Dienstverzeichnis besteht die Moglichkeit der Registrierung
und der damit verbundenen Kategorisierung. Eine eindeutige Kategorisierung ist
w unschenswert, in der Praxis jedoch kaum moglich. Das Dienstverzeichnis kann
ebenfalls als Dienstsuchmaschine bezeichnet werden. Der Dienstnutzer ist ver-
gleichbar mit einem Client in einer Client Server Architektur. Er greift nach er-
folgreicher Suche auf vorhandene Dienste zu. F ur ihn ist es wichtig, dass die
Dienste auf Standards beruhen. Nur so ist es gewahrleistet, dass ein unbekannter
Nutzer einen bis dato unbekannten Dienst problemlos nutzen kann. Dazu muss
die beschriebene Schnittstelle dem Nutzer jedoch vollstandig dargelegt sein [2].
15.3.2 Aktionen in einer SOA
Zu den Aktionen in einer SOA zahlen die folgenden Punkte:
Veroentlichen
Suchen
Verweis auf Dienst
Interaktion mit dem Dienst.
Beim Veroentlichen hinterlegt der Dienstanbieter den Dienst in einer oentlichen
Umgebung (Installation). Dieser Vorgang wird auch als Deployment bezeich-
net. Es erfolgt dabei eine Registrierung, Eintragung sowie Kategorisierung beim
Dienstverzeichnis. Ein potenzieller Nutzer fragt daraufhin beim Dienstverzeich-
nis an. Durch die vorgenommene Kategorisierung ist es dem Dienstverzeichnis
moglich eine konkrete Antwort auf die Anfrage des Dienstnutzers zu generieren.
Die Beschreibung des Dienstes erfolgt durch Taxonomien sowie Ontologien. Sollte
ein potentieller Dienst gefunden worden sein, verweist das Dienstverzeichnis auf
den Dienst. Nach der Abfrage der Dienstbeschreibung durch den Nutzer beim
Dienstanbieter erhalt der Nutzer die Schnittstellenbeschreibung. Nach erfolgrei-
cher Authentizierung kann der Dienst daraufhin durch den Nutzer gebunden
werden. Einer erfolgreichen Nutzung steht fortan nichts mehr im Wege [2]. Die
Abbildung 15.2 fasst die genannten Rollen und Aktionen in einer Grak zusam-
men.
182 15 Web-Services-Architektur
Abbildung 15.2: SOA Rollen und Aktionen
15.4 Web-Service-Architektur
In den vergangenen Kapiteln wurden Serviceorientierte Architekturen beleuchtet.
Web-Service-Architekturen stellen eine konkrete Implementierung einer Service-
orientierten Architektur dar. Sie ubernehmen dazu die folgenden grundlegenden
Komponenten:
Kommunikation
Dienstbeschreibung
Verzeichnisdienst.
Diese werden bei einer Web-Service-Architektur (WSArch) durch die folgenden
Techniken und Protokolle reprasentiert [1].
15.4.1 SOAP
Die Kommunikation einer WSArch lauft uber das SOAP-Protokoll ab. Das SOAP-
Protokoll beschreibt ein Protokoll zum strukturierten Datenaustausch in WSArch.
Das Protokoll basiert auf XML, dies wird zum Nachrichtenaustausch / Re-
prasentation verwendet. Es greift f ur den Transport auf die Transport- und An-
wendungsschicht des TCP/IP Modells zur uck. Als haugste Kombination kommt
dabei HTTP sowie TCP zum Einsatz. SOAP wird vor allem dort eingesetzt wo
der direkte Zugang zu einem fremden System nicht gewahrleistet ist oder f ur
15.4 Web-Service-Architektur 183
nicht sinnvoll erachtet wird. Die Gr unde daf ur sind vor allem in vielen verschie-
denen Anwendungsarchitekturen aber auch in Sicherheitaspekten zu nden. Die
Kommunikation mittels SOAP ermoglicht die lose Kopplung von Systemen. Dazu
wird beim Sender ein XML Dokument zusammengesetzt, welches anschlieend
validiert werden muss. Die minimale SOAP-Nachricht besteht aus einem Enve-
lope genannten Element. Diesem Element muss ein lokaler Name zugewiesen
werden. Ein optionales Kind-Element des Envelopes ist das Header-Element. Im
Header konnen Metadaten wie Routing oder Verschl usselung untergebracht sein.
Im anschlieenden Body-Element sind die eigentlichen Nutzdaten untergebracht.
Innerhalb des Body-Elements konnen sowohl Informationen zum Datenaustausch
als auch Anweisungen zum entfernten Prozeduraufruf vorhanden sein. Die gelie-
ferten Informationen sind vom Empfanger entsprechend zu interpretieren [3].
15.4.2 WSDL
Die Web-Service Description Language (WSDL) stellt eine Metasprache zum
Austausch von Nachrichten auf Basis von XML dar. Ihr haugster Einsatzort
ist die Beschreibung und der Nachrichtenaustausch innerhalb von Web-Services.
Die Sprache ist dabei plattform-, programmiersprachen- und protokollunabhangig.
Mittels WSDL ist es moglich Funktionen, Daten, Datentypen und Austauschpara-
meter eines Web-Services zu beschreiben. Es werden dabei die oentlichen Ope-
rationen, Parameter und R uckgabewerte kommuniziert (Prinzip des Information
Hiding). Zur Beschreibung der Schnittstelle und des Zugangsprotokolls werden
folgende Beschreibungselemente verwendet:
types (Datentypen)
messages (Nachricht)
portType (Schnittstellentypen)
binding (Bindung)
port (Port)
service (Service).
In types werden die f ur messages verwendeten Datentypen deniert. Sie werden
zum Austausch innerhalb von messages verwendet[4].
Das Element message stellt eine abstrakte Denition der zu ubertragenden Da-
ten dar und kann aus mehreren logischen Teilen bestehen. Im Element portType
vorhandene Schnittstellentypen werden in neueren Versionen der WSDL auch als
Interface bezeichnet. Die WSDL beschreibt 4 Typen von Schnittstellennachrich-
ten:
184 15 Web-Services-Architektur
One-way (Service erhalt Nachricht vom Client)
Request-response (Client Anfrage - Service Antwort)
Solicit-response (Service Nachricht - Antwort Client)
Notication (Service sendet Nachricht).
Das binding eines Services bestimmt das konkrete Protokoll und Datenformat f ur
die ausgetauschten Nachrichten. Der port wiederum speziziert die genaue Adres-
se f ur das binding. F ur den Aufruf des Web-Services wird auf einen einheitlichen
Bezeichner wie den Uniform Resource Identier (URI) zur uckgegrien. Das letz-
te Beschreibungselement service fasst die bisher genannten Elemente zusammen
und beschreibt damit den Service vollstandig [4].
15.4.3 UDDI
Universal Description, Discovery and Integration (UDDI) bezeichnet den standar-
disierten Verzeichnisdienst in einer WSArch. Der Verzeichnisdienst besitzt eine
SOAP-Schnittstelle welche die Informationen zum Unternehmen, den Daten und
dem Service bereitstellt. Der dreiteilige Aufbau wird wie folgt vorgenommen.
Die White Pages enthalten Basisinformationen, welche Auskunft uber die
Identitat eines Serviceanbieters geben. Zu den moglichen Informationen zahlen
der Ansprechpartner, das Geschaftsumfeld, Kontaktdaten sowie eine einein-
deutige ID zur Identizierung des Unternehmens.
Die Yellow Pages dienen der Servicekategorisierung. Mit Hilfe der in den White
Pages bereit gestellten Informationen wird eine Kategorisierung hinsichtlich
des Zweckes vorgenommen.
Im letzten Bereich, den so genannten Green Pages, wird die Schnittstellenbe-
schreibung gespeichert [5].
Das Zusammenspiel der Bereiche m undet im Datenmodell der UDDI. Hierauf soll
jedoch an dieser Stelle nicht weiter eingegangen werden.
15.4.4 Rollen und Aktionen
F ugt man dem bekannten Modell einer SOA, die in den vorherigen Kapiteln be-
schriebenen Informationen hinzu, so erhalt man folgendes Modell.
15.4 Web-Service-Architektur 185
Abbildung 15.3: WSArch Rollen und Aktionen
15.4.5 Beispiel - SOAP und WSDL
<?xml version="1.0"?>
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope">
<s:Body>
<m:StudentenInDatenbank xmlns:m="http://www.host.com/soap">
Leisen, Baumbach, Herrmann
</m:StudentenInDatenbank>
</s:Body>
</s:Envelope>
Listing 15.1: SOAP Anfrage
Das Beispiel 15.1 stellt eine exemplarische Suchanfrage an den angegebenen Host.
Hierzu steht die Methode StudentenInDatenbank bereit welche den Namen als
Eingabe verlangt. Das Element StudentenInDatenbank ist nicht Teil der SOAP
Denition und ist somit anwendungspezisch. Die SOAP Anfrage enthalt kein
Header-Element.
<?xml version="1.0"?>
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope">
<s:Header>
<m:RequestID
xmlns:m="http://www.host.com/soap">c34deca</m:RequestID>
</s:Header>
186 15 Web-Services-Architektur
<s:Body>
<m:DbResponse xmlns:m="http://www.host.com/soap">
<m:matrikel value="Leisen, Baumbach, Herrmann">
<m:Choice value="1">143257</m:Choice>
<m:Choice value="2">176453</m:Choice>
<m:Choice value="3">323953</m:Choice>
</m:title>
</m:DbResponse>
</s:Body>
</s:Envelope>
Listing 15.2: SOAP Antwort
In der Antwort des Dienstes 15.2 ist ein Header-Element vorhanden. Dies lie-
fert die AnfrageID zur uck. Die abgefragten Informationen benden sich im Body
der SOAP-Nachricht und liefern die Matrikelnummer der abgefragten Studenten
zur uck.
<?xml version="1.0"?>
<definitions name="Studenten"
targetNamespace="http://host.com/studenten.wsdl"
xmlns:tns="http://host.com/studenten.wsdl"
xmlns:xsd1="http://host.com/studenten.xsd"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns="http://schemas.xmlsoap.org/wsdl/">
....
</definitions>
Listing 15.3: WSDL Service Denition
Das Listing 15.3 zeigt die WSDL service Denition f ur den zugehorigen Dienst.
<types>
<schema targetNamespace="http://host.com/studenten.xsd"
xmlns="http://www.w3.org/2001/XMLSchema">
<element name="MatrikelRequest">
<complexType>
<all>
<element name="name" type="string"/>
</all>
</complexType>
</element>
<element name="MatrikelResponse">
<complexType>
<all>
15.4 Web-Service-Architektur 187
<element name="matrikel" type="integer"/>
</all>
</complexType>
</element>
</schema>
</types>
Listing 15.4: WSDL types Denition
Listing 15.4 zeigt die types Denitionen
<message name="GetNameInput">
<part name="body" element="xsd1:MatrikelRequest"/>
</message>
<message name="GetMatrikelOutput">
<part name="body" element="xsd1:MatrikelResponse"/>
</message>
Listing 15.5: WSDL message Denition
In Listing 15.5 sind die WSDL message Denitionen zu sehen.
<portType name="StudentenPortType">
<operation name="GetStudent">
<input message="tns:GetNameInput"/>
<output message="tns:GetMatrikelOutput"/>
</operation>
</portType>
Listing 15.6: WSDL portType Denition
Listing 15.6 zeigt die zugehorigen portType Denitionen.
<binding name="StudentSoapBinding" type="tns:StudentenPortType">
<soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="GetStudent">
<soap:operation soapAction="http://host.com/GetStudent"/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
188 15 Web-Services-Architektur
</binding>
Listing 15.7: WSDL binding Denition
Die WSDL binding Denitionen sind in Listing 15.7 zu sehen.
<service name="StudentService">
<documentation>Meine erster Web-Service</documentation>
<port name="StudentPort" binding="tns:StudentSoapBinding">
<soap:address location="http://host.com/student"/>
</port>
</service>
Listing 15.8: WSDL service Denition
15.8 zeigt die zugehorigen WSDL service Dentionen
15.4.6 Vor- und Nachteile
Folgende Vorteile ergeben sich aus den vorangegangenen Kapiteln:
groer Kostenvorteil durch geringe Implementierungskosten
Verwendung oener Standards
oene und exible Architektur
Interoperabilitat
geringe Einstiegsbarrieren.
Folgende Nachteile ergeben sich aus der Verwendung von Web-Services-Architek-
turen:
Sicherheitsaspekte wie Authentizierung und Verschl usselung kaum umgesetzt
Performance oft mangelhaft aufgrund von Protokolloverhead und loser Kopp-
lung
Schnittstellen m ussen genau deniert sein.
15.5 Fazit
Die Einf uhrung in Serviceorientierte Architekturen hat den Grundstein f ur das
Verstandnis von Web-Service-Architekturen gelegt. SOA sind dabei nicht als
Literaturverzeichnis 189
Web-Services anzusehen. Sie beschreiben losgelost von einer konkreten Im-
plementierung lediglich eine Architektur. Als Beispiel f ur eine SOA kann ein
Geschaftsprozess zu Rate gezogen werden. Bei diesem wird deutlich, das es sich
bei einer Serviceorientierten Architektur jeweils um eine individuelle Unterneh-
menslosung handelt.
Die vorgestellten Standards SOAP, WSDL und UDDI stellen die grundlegenden
Funktionen f ur WSArch bereit. Mittels Web-Services ist eine verteilte Zusammen-
arbeit zwischen verschiedenen Anwendungsprogrammen moglich. Dabei spielt es
keinerlei Rolle welche Plattformen, Programmiersprachen bzw. Frameworks ver-
wendet werden. Durch geringe Implementierungs- und Betriebskosten stellen Web-
Services eine kosteng unstige Art der Datenreprasentation dar. Die Verwendung
von oenen Standards ermoglicht eine grotmogliche Interoperabilitat.
Literaturverzeichnis
[1] Web Service Architecture W3C 2004 - http://www.w3.org/TR/ws-arch/
[2] W.Dostal, M. Jeckle, I.Melzer, B.Zengler, Service-orientierte Architekturen
mit Web Services. Spektrum Akademischer Verlag 2005.
[3] SOAP Tutorial - http://www.w3schools.com/soap/default.asp
[4] Web Service Dention Language (WSDL) - http://www.w3.org/TR/wsdl
[5] Universal Description Discovery and Integration -
http://de.wikipedia.org/wiki/UDDI
190 15 Web-Services-Architektur
16 Apache CXF
Martin Herrmann
Inhaltsverzeichnis
16.1 Einleitung . . . . . . . . . . . . . . . . . . . . . . . . . . 191
16.2 Allgemeines . . . . . . . . . . . . . . . . . . . . . . . . . 192
16.3 Implementierte Protokolle . . . . . . . . . . . . . . . . . 192
16.3.1 SOAP . . . . . . . . . . . . . . . . . . . . . . . 192
16.3.2 WSDL . . . . . . . . . . . . . . . . . . . . . . . 193
16.3.3 WS-*-Spezikationen . . . . . . . . . . . . . . . 193
16.3.4 Weitere Protokolle . . . . . . . . . . . . . . . . . 194
16.4 Unterst utzte Programmieransatze . . . . . . . . . . . . . 195
16.4.1 Spring . . . . . . . . . . . . . . . . . . . . . . . 195
16.4.2 JAX-WS . . . . . . . . . . . . . . . . . . . . . . 195
16.4.3 JAX-RS . . . . . . . . . . . . . . . . . . . . . . 195
16.4.4 Weitere Programmierverfahren . . . . . . . . . . 195
16.5 Beispiel . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
16.6 Anwenderfreundlichkeit . . . . . . . . . . . . . . . . . . . 199
16.7 Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
16.1 Einleitung
Im Zeitalter des Web 2.0 werden eine Vielzahl von Anwendungen verteilt uber das
Internet realisiert. F ur die Interaktion zwischen Anwendungsprogrammen werden
vermehrt Web-Services eingesetzt, die eine Zusammenarbeit von Anwendungen
auf verschiedenen Plattformen erleichtern sollen. Apache CXF ist ein Framework
welches es Entwicklern erleichtern soll solche Web-Services zu implementieren.
Diese Ausarbeitung betrachtet Apache CXF naher, stellt dessen Funktionalitaten
dar und soll zeigen, ob es den Entwickler damit ermoglicht wird, auf einfachem
Wege Web-Services zu erstellen.
192 16 Apache CXF
16.2 Allgemeines
Bei Apache CXF handelt es sich um ein so genanntes Open-Source-Web-Service-
Framework welches auf Java basiert. Es stellt dem Entwickler einen Program-
mierrahmen bereit, der es ihm erlaubt verschiedenen Schnittstellen, Verfahren
und Anwendungen in Bezug auf Web-Services mit geringem Aufwand zu imple-
mentieren. Solche Web-Services sind XML-basierte Kommunikationsschnittstellen
f ur verteilte Systeme, die plattform ubergreifende Anwendungen realisieren sollen.
CXF unterst utzt zudem eine Vielzahl von Frontendprogrammiermodellen. Apache
CXF wird als Open Source Software von der Apache Software Foundation unter
der Apache License 2.0 veroentlicht[1].
Apache CXF entwickelte sich aus den Web-Service-Frameworks Codhouse XFire
und IONA Celtix, welche zu Apache CXF verschmolzen und so die Abk urzung CXF
f ur CeltiXFiredenierten. Die Entwickler von Celtix arbeiteten bis 2006, die von
XFire noch bis Mai 2007 eigenstandig an ihren Softwarelosungen und begannen
danach mit der Implementierung von Apache CXF. Beide Softwarelosungen brach-
ten eine groe Zahl von Protokollen und Programmierverfahren zur Erstellung von
verteilten Anwendungen in das neue Programm ein. Die Firma IONA, die vormals
Celtix entwickelte, vertreibt aktuell eine Enterprise-Version von CXF mit Support-
und Servicevertragen[2], [3].
16.3 Implementierte Protokolle
Obwohl Apache CXF im Vergleich zu anderen Frameworks wie etwa Apache
Axis recht schlank ist[4], verf ugt es dennoch uber eine vielfaltige Auswahl von
implementierten Protokollen und Verfahren zur Entwicklung von Web-Services.
Die Entwickler erweitern zudem mit dem Voranschreiten des Projekts dieses mit
zusatzlichen Ansatzen. So kann Apache CXF als ein kleines Sammelsurium von
vielen, aber dennoch ausgewahlten Web-Service-Implementierungsverfahren ver-
standen werden. Es obliegt allerdings oft der Aufgabe des Entwicklers sich f ur das
optimale Verfahren zu entscheiden. Einige Vorkenntnisse uber Web-Services sind
somit notwendig um die optimale Schnittstelle zu spezizieren, wenn diese nicht
vom verteilten System deniert sind. Im Folgenden werden einige der wichtigsten
enthaltenen Protokolle zur Realisierung von Web-Service vorgestellt.
16.3.1 SOAP
SOAP (urspr unglich f ur Simple Object Access Protocol) stellt ein Protokoll der
Anwendungsschicht dar. Primar in Kombination mit HTTP und TCP verwendet,
handelt es sich hierbei um eine Rahmenvorgabe von XML-basierten Nachrichten
16.3 Implementierte Protokolle 193
zur Kommunikation von Systemen. Es ermoglicht verteilten Systemen Informa-
tionen via HTTP auszutauschen und stellt somit eine wichtige Grundlage f ur
die Entwicklung von Web-Services dar[5]. SOAP war bereits in den Frameworks
Codehouse XFire und IONA Celtix enthalten auf denen CXF basiert.
16.3.2 WSDL
Bei WSDL (Web Services Description Language) handelt es sich um eine XML-
basierte Metasprache um Web-Service-Funktionen anzubieten und auszulesen. So
kann vom Client der Funktionsumfang der Serveranwendungen ermittelt werden
um verteilte Anwendungen zu strukturieren. WSDL wird in der Regel mit SOAP
verwendet um Web-Services zu realisieren. Die XML-Struktur von WSDL wird
dabei durch folgende 6 Elemente beschrieben[6]:
Datentypen f ur Daten die den Nachrichtenaustausch beschreiben.
Nachrichten entsprechen gesendeten und empfangenen Daten.
Schnittstellen beschreiben Dienstoperationen.
Protokoll beschreibt Protokolle und Datenformate einer Schnittstelle.
Port ist eine Adresse f ur ein Protokoll.
Service fasst mehrere Ports zusammen.
Zuk unftig ist die Implementierung von WSDL 2.0 geplant, welches einige Erwei-
terungen und Spezikationen f ur die dahinterstehende Metasprache liefern soll.
16.3.3 WS-*-Spezikationen
Eine Erweiterung des SOAP/WSDL-Ansatzes zum Erstellen von Web-Services
stellen die so genannten WS-*-Spezikationen des World Wide Web Consortium
(W3C) dar. Diese basieren auf SOAP und WSDL, spezizieren aber weitere, sehr
spezielle Verfahren zur Abstimmung und Kommunikation von verteilten Systemen
zur Implementierung bzw. Nutzung von Web-Services.
Eine Vielzahl der Protokolle wurde bereits in Apache CXF implementiert, so dass
diese vom Entwickler eines Web-Services ohne viel Aufwand implementiert werden
konnen. Dabei sind aktuell folgende Standards umgesetzt (Version 2.3.2, Stand
31.01.2011)[7]:
WS-Adressing f ur Verfahren zum Austausch von Adressinformationen.
WS Policy f ur Verfahren zum Austausch von Richtlinien, Qualitat, Version
des Systems.
194 16 Apache CXF
WS-Reliable Messaging f ur Verfahren, die unter Zuhilfenahme einer Middel-
ware sicherstellen, dass gesendete Nachrichten trotz Teilversagen des Systems
zugestellt werden.
WS-Security f ur Kommunikationsprotokolle um Sicherheitsaspekte gewahr-
leisten zu konnen.
WS-SecurityPolicy f ur Verfahren zur Zusicherungen an Sicherheitaspekten.
WS-SecureConversation f ur Verfahren zur Realisierung einer sicheren Kom-
munikation.
WS-Trust f ur Verfahren zum Domanen- ubergreifenden Austausch von Infor-
mationen.
Neben den bereits implementierten WS-*-Spezikationen sind folgende f ur
zuk unftige Versionen von Apache CXF geplant:
WS-Coordination f ur Verfahren um verteilte Anwendung miteinander zu ko-
ordinieren.
WS-Atomic Transactions erweitert WS-Coordination um Spezikationen f ur
kurz laufende Anwendungen.
WS-BusinessActivity erweitert WS-Coordination um Spezikationen f ur
langer laufende Anwendungen.
WS-MetaDataExchange f ur Verfahren zur Suche von Web-Service- Meta-
daten.
WS-Eventing f ur Verfahren um ein Event-Management f ur Web-Services zu
realisieren.
WS-Transfer f ur Verfahren um
Ubertragungsspezikationen f ur Web-Services
zu denieren.
16.3.4 Weitere Protokolle
Neben den bereits vorgestellten Protokollen zur Realisierung von Web-Services,
sind in Apache CXF noch viele weitere Ansatze implementiert. Dazu zahlen un-
ter andrem COBRA, Pure XML und REST. Eine aktuelle und vollstandige Liste
bendet sich auf der Homepage[7] des Projektes.
16.4 Unterst utzte Programmieransatze 195
16.4 Unterst utzte Programmieransatze
Neben den vorgestellten Web-Service-Protokollen verf ugt CXF uber eine Auswahl
von implementierten Programmierverfahren die uberwiegend auch zur Frontend-
programmierung bei der Entwicklung von Web-Services genutzt werden konnen.
Im Folgenden wird eine Auswahl der wichtigsten Verfahren vorgestellt.
16.4.1 Spring
Bei Spring handelt es sich um ein eigenstandiges Open-Source-Framework auf
Java-Basis. Spring vereinfacht die Programmierlogik und soll gute Programmier-
praktiken fordern. Mit Spring soll es vereinfacht werden die Applikationskom-
ponenten eines Programmes auszulagern. Die Besonderheit, die Spring als eine
wichtige Komponente von CXF auszeichnet, ist die Tatsache, dass viele verschie-
dene Plattformen und Systeme unterst utzt werden. Spring wurde in Apache CXF
integriert, da mittels dieses Frameworks eine gute Moglichkeit besteht Verteil-
te Anwendungen zu realisieren[8]. Ein Beispiel zur Implementierung von Spring
ndet sich im Kapitel 16.5 auf Seite 196.
16.4.2 JAX-WS
Beim Java API for XML - Web Services handelt es sich um eine Java-Pro-
grammschnittstelle zum Erstellen von Web-Services. Sie erleichtert den Program-
mierern die Konguration des Web-Services und der Kommunikation zwischen
verteilten Anwendungen. JAX-WS integriert die Protokolle SOAP, WSDL sowie
einige WS-*-Standards, weshalb es sich gut in Apache CXF integrieren lasst[9].
16.4.3 JAX-RS
Das Java API for RESTful Web Services ist eine Java-Programmierschnittstelle
zum Erstellen eines Web-Services unter Verwendung von Representational State
Transfer (kurz REST). Ebenso wie bei JAX-WS erleichtert JAX RS es den Pro-
grammierern Web-Services zu implementieren und verteilte Anwendungen zu rea-
lisieren. JAX-RS wurde im Rahmen des Java Community Process von einem Kon-
sortium um die Firma Sun Microsystems erarbeitet. Die Integrierung in CXF er-
laubt dem Entwickler abseits von SOAP/WSDL zu arbeiten[10].
16.4.4 Weitere Programmierverfahren
Neben den vorgestellten Programmieransatzen hat Apache CXF weitere Verfahren
integriert und wird mit Voranschreiten des Projektes um weitere Moglichkeiten
196 16 Apache CXF
zur Implementierung von Web-Services erweitert. Einige weitere Ansatze und Pro-
grammierschnittstellen sind Java Business Integration (JBI), Java EE Connector
Architecture (JCA) und Java Management Extensions (JMX). Eine vollstandige
Liste der aktuell implementierten und geplanten Programmieransatze ndet sich
auf der Homepage[7] des Projektes.
16.5 Beispiel
Im Folgenden soll an einem einfachen Beispiel gezeigt werden, wie ein Projekt mit
Hilfe von CXF erstellt werden kann. Es wird ein trivialer Service mithilfe von Spring
und Zuhilfenahme von WSDL erstellt. Der Code kann mit Hilfe jeder IDE erstellt
werden, die beste Unterst utzung von Seiten Apache CXF erhalt man allerdings
f ur Eclipse[11]. Andere IDEs wie Netbeans oder das Kompilieren mit Hilfe von
Apache Maven und Apache Ant ist aber ebenso moglich. Am stabilsten lauft CXF
auf dem JRE 1.5, allerdings wird auch die neuere Version 1.6 unterst utzt.
Vor der eigentlichen Implementierung muss ein neues Projekt angelegt werden
und einige Dateien eingebunden werden. Folgende JAR-Files sind Standard-
CXF-Bibliotheken die f ur die meisten Projekte benotigt werden und von der
Homepage[1] des Projectes bezogen werden konnen:
commons-logging-1.1.jar
geronimo-activation_1.1_spec-1.0-M1.jar
geronimo-annotation_1.0_spec-1.1.jar
geronimo-javamail_1.4_spec-1.0-M1.jar
geronimo-servlet_2.5_spec-1.1-M1.jar
geronimo-ws-metadata_2.0_spec-1.1.1.jar
jaxb-api-2.0.jar
jaxb-impl-2.0.5.jar
jaxws-api-2.0.jar
neethi-2.0.jar
saaj-api-1.3.jar
saaj-impl-1.3.jar
stax-api-1.0.1.jar
wsdl4j-1.6.1.jar
wstx-asl-3.2.1.jar
XmlSchema-1.2.jar
xml-resolver-1.2.jar
Listing 16.1: CXF-Projekt - allgemeine JAR-Dateien
Um Spring und CXF (Versionsangabe) verwenden zu konnen m ussen zusatzlich
folgende Dateien eingebunden werden:
16.5 Beispiel 197
aopalliance-1.0.jar
spring-core-2.0.8.jar
spring-beans-2.0.8.jar
spring-context-2.0.8.jar
spring-web-2.0.8.jar
cxf-2.1.jar
Listing 16.2: CXF-Projekt - Spring und CFX JAR-Dateien
Sind alle Dateien in das Projekt eingebunden, kann mit der Implementierung des
Services begonnen werden. F ur die Erstellung eines Web-Services m ussen eine
Interface- und eine Implementierung-Datei angelegt werden. Die Interface-Datei
sieht im aktuellen Beispiel wie folgt aus:
package demo.spring;
import javax.jws.WebService;
@WebService
public interface HelloWorld {
String sayHi(String text);}
Listing 16.3: CXF-Projekt - Interface-Datei
Die zugehorige Implementation enthalt folgenden Code:
package demo.spring;
import javax.jws.WebService;
@WebService(endpointInterface = "demo.spring.HelloWorld")
public class HelloWorldImpl implements HelloWorld {
public String sayHi(String text) {
System.out.println("sayHi called");
return "Hello " + text; }}
Listing 16.4: CXF-Projekt - Implementation-Datei
Der Service ist damit vollstandig um eine HalloWorld-Antwort zu produzieren.
Durch die Annotation @WebService kann CXF automatisch eine entsprechende
WSDL-Datei erstellen. Um den Web-Service mittels Spring nutzen zu konnen,
m ussen noch die Server Beans angepasst werden. Dazu m ussen im WEB-INF-
Ordner die Datei beans.xml folgendermaen anpassen:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jaxws="http://cxf.apache.org/jaxws"
xsi:schemaLocation="http://www.springframework.org/schema/beans
198 16 Apache CXF
http://www.springframework.org/schema/beans/spring-beans.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">
<import resource="classpath:META-INF/cxf/cxf.xml" />
<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
<jaxws:endpoint id="helloWorld"
implementor="demo.spring.HelloWorldImpl"
address="/HelloWorld" />
</beans>
Listing 16.5: CXF-Projektt - beans.xml
Um den Spring-Service zu komplettieren, muss zuletzt die web.xml-Datei ange-
passt werden:
<web-app><context-param>
<param-name>contextConfigLocation</param-name>
<param-value>WEB-INF/beans.xml</param-value>
</context-param>
<listener><listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class></listener>
<servlet><servlet-name>CXFServlet</servlet-name>
<display-name>CXF Servlet</display-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping><servlet-name>CXFServlet</servlet-name>
<url-pattern>/ *</url-pattern>
</servlet-mapping>
</web-app>
Listing 16.6: CXF-Projekt - web.xml
Mit dem in der web.xml denierten ContextLoaderListener wird das Spring-
Framework gestartet und die beans.xml geladen. Damit ist der Spring-Web-Service
vollstandig implementiert und einsatzbereit. Um den Service testen zu konnen,
ist abschlieend die Implementierung eines Clients notwendig. Dies ist allerdings
relativ trivial und sieht im aktuellen Beispiel wie folgt aus:
package demo.spring.client;
import org.springframework.context.support.
ClassPathXmlApplicationContext;
import demo.spring.HelloWorld;
16.6 Anwenderfreundlichkeit 199
public final class Client { private Client() { }
public static void main(String args[]) throws Exception {
// START SNIPPET: client
ClassPathXmlApplicationContext context
= new ClassPathXmlApplicationContext(new String[]
{"demo/spring/client/client-beans.xml"});
HelloWorld client = (HelloWorld)context.getBean("client");
String response = client.sayHi("Joe");
System.out.println("Response: " + response);
System.exit(0); }} // END SNIPPET: client
Listing 16.7: CXF-Projekt - Client
Abschlieend muss noch die Bean-Datei des Servers angepasst werden. Im aktu-
ellen Beispiel einfach an den entsprechenden Localhost-Port.
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jaxws="http://cxf.apache.org/jaxws"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">
<import resource="classpath:META-INF/cxf/cxf.xml" />
<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
<jaxws:endpoint id="helloWorld"
implementor="demo.spring.HelloWorldImpl"
address="/HelloWorld" />
</beans>
Listing 16.8: CXF-Projekt - Client beans.xml
Als Ergebnis erhalten wir einen Client und einen Server zur Realisierung eines
trivialen Web-Services, der problemlos erweitert werden kann[12].
16.6 Anwenderfreundlichkeit
Apache CXF ist im Vergleich zu vielen anderen Open-Source-Projekten recht
weit entwickelt. Es werden regelmaig Updates und Weiterentwicklungen ver-
oentlicht, sowie Fehler behoben. Trotz der schlanken Implementierung ist das
Projekt vielfaltig und hat viele Ansatze zur Entwicklung und Gestaltung von Web-
Services integriert. Dieser Punkt kann aber dahingehend als Nachteil betrachtet
werden, dass eine groe Vielfalt an Entwicklungsmoglichkeiten viele Vorkenntnisse
200 16 Apache CXF
beim Entwickler voraussetzt. Das Projekt liefert nur eine sparliche Dokumentation
seiner Funktionalitaten, was dazu f uhrt, dass auch professionelle Entwickler eine
gewisse Einarbeitungszeit in das Projekt investieren m ussen, um damit produk-
tiv arbeiten zu konnen. User die uber geringere Programmierkenntnisse verf ugen
und Apache CXF als Instrument verwenden wollen, um auf einfachen Wege Web-
Services zu implementieren, werden eine langere Einarbeitungszeit benotigen. Auf-
grund der vielfaltigen Implementierung und der entgegenstehenden schlechten Do-
kumentation ist es f ur User ohne groes Hintergrundwissen nahezu unmoglich die
Funktionalitaten von CXF voll auszunutzen und die Vorz uge gegen uber anderen
Entwicklungsmethoden wahrzunehmen.
16.7 Fazit
Apache CXF ist ein vielfaltiges, aber dennoch schlankes Web-Service-Framework,
welches dem Entwickler bei der Implementierung von Web-Service unterst utzen
soll. Das Projekt wird seit mehreren Jahren kontinuierlich weiterentwickelt und
hat deshalb sehr viele implementiere Schnittstellen, Protokolle und Verfahren.
CXF kann somit als kleines Sammelsurium an Methoden zum Erstellen von Web-
Services verstanden werden. Dennoch ist es in mancher Hinsicht beschrankter als
andere Frameworks wie etwa Apache Axis. Es liefert aber auch Funktionalitaten,
wie die Integration von Spring, welches es gegen uber von anderen Frameworks
abhebt. Zu kritisieren ist die l uckenhafte Dokumentation, welche es Entwicklern
mit geringeren Vorkenntnissen erschwert sich schnell in das Projekt einzuarbeiten
und die Funktionalitaten im vollen Umfang einzusetzen. F ur eine kommerzielle
Nutzung m usste eine bessere Dokumentation und Nutzerunterst utzung angeboten
werden. Dennoch ist Apache CXF ein gut entwickeltes Framework, welches nach
einer gewissen Einarbeitungszeit eektiv zur Erstellung von Web-Services genutzt
werden kann.
Literaturverzeichnis
[1] Apache Software Foundation (Hrsg.), Apache CXF: An Open-Source Services
Framework, http://cxf.apache.org, 21.01.2011
[2] Codehouse (Hrsg.), Codehouse XFire, http://xre.codehaus.org, 03.01.2011
[3] IONA (Hrsg.), Celtix: The Open Source Java ESB, http://celtix.ow2.org,
03.01.2011
[4] Thomas Bayer, Apache Axis2, CXF und Sun JAX-WS RI im Vergleich,
http://www.predic8.de/axis2-cxf-jax-ws-vergleich.htm, 04.01.2011
Literaturverzeichnis 201
[5] W3school (Hrsg.), SOAP Tutorial, http://www.w3schools.com/soap/
default.asp, 05.01.2011
[6] W3school (Hrsg.), WSDL Tutorial, http://www.w3schools.com/wsdl/
default.asp, 05.01.2011
[7] Apache Software Foundation (Hrsg.), Apache CXF - Projekt Status,
http:cxf.apache.org/project-status.html, 31.1.2011
[8] SpingSource (Hrsg.), The Standard for Enterprise Java Development,
http://www.springsource.com/developer/spring, 05.01.2011
[9] Oracle Corporation (Hrsg.), Getting Started with JAX-WS Web Services,
http://netbeans.org/kb/docs/websvc/jax-ws.html, 21.01.2011
[10] Oracle Corporation (Hrsg.), Jersey: RESTful Web services made easy,
http://wikis.sun.com/display/Jersey/Main, 21.01.2011
[11] Apache Software Foundation (Hrsg.), Apache CXF - Setting up Eclipse,
http://cxf.apache.org/setting-up-eclipse.html, 05.01.2011
[12] Apache Software Foundation (Hrsg.), Apache CXF - Writing a service
with Spring, http://cxf.apache.org/docs/writing-a-service-with-spring.html,
05.01.2011
202 16 Apache CXF
Teil V
Grid, Cluster und Monitoring
17 Globus Toolkit
Martin Baumbach
Inhaltsverzeichnis
17.1 Grid Computing . . . . . . . . . . . . . . . . . . . . . . . 205
17.1.1 Begriserklarung . . . . . . . . . . . . . . . . . . 205
17.1.2 Funktionsweise und Anwendungsgebiete . . . . . 206
17.2 Das Globus Toolkit . . . . . . . . . . . . . . . . . . . . . 207
17.2.1 Allgemeines . . . . . . . . . . . . . . . . . . . . 207
17.2.2 Vorteile . . . . . . . . . . . . . . . . . . . . . . . 208
17.2.3 Aufbau . . . . . . . . . . . . . . . . . . . . . . . 209
17.3 Bedienung und Eingabebefehle . . . . . . . . . . . . . . . 212
17.4 Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214
Das Globus Toolkit ist ein Open Source Toolkit zur Erzeugung von Computing
Grids und wird von der Globus Alliance entwickelt und angeboten. Die Globus Al-
liance ist eine internationale Organisation, welche sich auf die Entwicklung grund-
legender Technologien f ur Grid-Infrastrukturen konzentriert. Das Toolkit kann auf
folgenden Betriebssystemen zum Einsatz kommen: Linux, FreeBSD, Solaris, Mac
OS X, HP-UX und AIX. Die derzeit aktuellste Version des Toolkits ist die 5.0.2,
welche am 19.07.2010 veroentlicht wurde.
17.1 Grid Computing
Um das Globus Toolkit besser zu verstehen, ist eine Einf uhrung in die Thematik
des Grid-Computing notwendig. Die folgenden Abschnitte erlautern verschiedene
Begriichkeiten und die Funktionsweise f ur ein besseres Verstandnis.
17.1.1 Begriserklarung
Grid-Computing ist eine Art des verteilten Rechnens. Es ist eine koordinierte, ge-
meinsame Nutzung von Ressourcen uber geographische Grenzen hinweg. Somit ist
es moglich uber Institutsgrenzen hinaus virtuelle Organisationsstrukturen zu bil-
den. Dadurch wird ein verteiltes System gebildet. Hierbei wird ein Supercomputer
aus einem Cluster lose gekoppelter Computer erzeugt.
206 17 Globus Toolkit
Diese Art des verteilten Rechnens dient zur Losung von rechenintensiven, ma-
thematischen und wissenschaftlichen Problemen. Der Unterschied zu typischen
Computerclustern liegt zum einen bei einer wesentlich loseren Kopplung der ein-
zelnen beteiligten Computer und zum anderen bei der geographischen Zerstreuung
der Computer. Nicht alle Computer benden sich zentral in einem Serverraum um
rechenintensive Aufgaben zu bewaltigen. Daher liegt ublicherweise auch eine He-
terogenitat vor. Ein Grid dient in den meisten Fallen zur Bewaltigung einer speziel-
len Aufgabe und wird im Normalfall nicht f ur unterschiedliche Zwecke eingesetzt,
im Gegensatz zu typischen Computerclustern. Auerdem werden standardisierte
Programmbibliotheken und Middlware genutzt. Der Vorteil eines Grids ist, dass
der Zugang zu verschiedenartigen Systemen moglich gemacht wird und somit
der Zugang zu den Daten der unterschiedlichen Systeme gewahrleistet ist. Durch
Grid-Computing werden verschiedene Probleme behoben. Beispielsweise bietet ei-
ne Grid eine einheitliche Schnittstelle f ur den Zugang zu Systemen und einen
transparenten Zugri auf die Daten. Dadurch ist eine sogenannte Interoperabi-
litat gegeben. Unter Interoperabilitat versteht man eine unabhangige, moglichst
nahtlose Zusammenarbeit heterogener Systeme um Informationen ezient und
gut verwertbar auszutauschen. Man kann Grid-Computings in verschiedene Klas-
sen unterteilen:
Computing Grids (Rechengrids): Zugri auf verteilte Rechenressourcen
Data Grids (Datengrids): Zugri auf verteilte Datenbanken
Knowledge Grids: Software-System zur Wissensgewinnung
Ressource Grids: Stellt Rechenzeit oder Speicherkapazitat zur Verf ugung
Service Grids: Stellt IT-Dienste bereit
17.1.2 Funktionsweise und Anwendungsgebiete
Beim Grid-Computing ist zunachst jeder Computer jedem anderen gleich gestellt.
Genau wie bei einer Peer-to-Peer-Connection. Daher ist eine strenge Hierarchie
notwendig, welche die Verteilung der Rechenleistung nach objektiven Kriterien
verwaltet. An Hardware wird nur ein Computer mit Netzwerkverbindung benotigt.
Auf den einzelnen Computern, welche im Grid zusammenarbeiten, ubernimmt eine
Software das Losen einer ihm zugeteilten Teilaufgabe. Diese wird im Normalfall
von einem zentralen Server zur Verf ugung gestellt. Der Server nutzt eine Software,
welche die groe, rechenintensive Aufgabe in mehrere Teilaufgaben aufsplittet und
an einzelne Knoten, Computer im Grid, verteilt und nach dem Losen die einzelnen
Teilergebnisse wieder zu einem Gesamtergebnis zusammentragt. Grid-Computing
kommt dann zum Einsatz, wenn einzelne Computer mit ihrer Rechenleistung an
ihre Grenzen gelangen.
17.2 Das Globus Toolkit 207
Daher sind typische Aufgaben beispielsweise die Auswertung, Integration und Dar-
stellung von sehr groen Datenmengen. Dies ist sehr hilfreich in der naturwis-
senschaftlichen oder medizinischen Forschung. Weitere Einsatzgebiete sind die
Meteorologie, mit der Auswertung von Wetterdaten, oder rechenintensive Indus-
triesimulationen. Ein Vorreiter in der Weiterentwicklung und Etablierung von Grid-
Computing ist die Teilchenphysik mit Groexperimenten wie Teilchenbeschleuni-
gern oder ahnlichem. Zur Erzeugung von verschiedenartigen Grids gibt es diverse
Grid-Middleware. Einige Beispiele hierf ur sind:
UNICORE
Xgrid
gLite
Gridbus
OurGrid
Sun Grid Engine
Globus Tookit
Im Rahmen der Ausarbeitung wird in den folgenden Abschnitten das Globus Tool-
kit vorgestellt und naher erlautert [1].
17.2 Das Globus Toolkit
Die Globus Alliance bietet zwei Losungen von Grid Software: Globus Online,
welches schon auf einer fertigen Grid-Architektur basiert und f ur Testzwecke und
Berechnungen jeglicher Art verwendet werden kann und das Globus Toolkit,
welches zur Erstellung eines eigenen Grids genutzt werden kann. Globus Online
steht unter dem Motto Use the Grid und das Globus Toolkit unter dem Motto
Build the Grid.
17.2.1 Allgemeines
Das Globus Toolkit ist eine grundlegende Technologie f ur Grids. Mit Hilfe die-
ser Open Source Software konnen Menschen Rechenleistung, Datenbanken und
andere Werkzeuge online und sicher uber Unternehmen, Institutionen und geo-
graphische Grenzen hinweg teilen.
Das Toolkit beinhaltet Softwareservices und Bibliotheken zur Ressourcen uber-
wachung, Verwaltung, Sichtung sowie Sicherheits- und Datenmanagement und
enthalt Software f ur die Sicherheits- und Informationsinfrastruktur, Ressourcen-
208 17 Globus Toolkit
und Datenmanagement, Kommunikation, Fehlererkennung und Portabilitat. Es ist
so konstruiert, dass die einzelnen Softwarepakete und Komponenten zusammen
aber auch unabhangig voneinander verwendet werden konnen. Da jede Organisa-
tion uber eine einzigartige Struktur und Unternehmensphilosophie verf ugt, wird
die Zusammenarbeit erschwert. Gr unde hierf ur sind die Inkompatibilitat von Res-
sourcen, Computern und Netzwerken. Das Globus Toolkit wurde entwickelt um
genau diese Hindernisse, welche eine nahtlose Zusammenarbeit verhindern, aus
dem Weg zu raumen. Die zentralen Dienste, Schnittstellen und Protokolle des
Toolkits ermoglichen es dem Benutzer uber einen Remote-Zugri auf Ressourcen
zuzugreifen, so als w urde sich der Nutzer direkt vor Ort benden. Gleichzeitig
hat man mit dem Toolkit die Kontrolle dar uber, wer wann die einzelnen Res-
sourcen nutzt. Das Globus Toolkit wurde mit einer Open Source Strategie ent-
wickelt, welche dem des Linux Betriebssystems sehr ahnelt. An der Entwicklung
sind unzahlige Entwickler weltweit beteiligt. Dadurch wird eine schnellere und
groere Verbreitung gefordert und dies f uhrt zu mehr technischen Innovationen.
Die Open-Source-Community arbeitet standig an Produktverbesserungen und der
Weiterentwicklung und Fehlerbehebung der Software [2].
17.2.2 Vorteile
Das Globus Toolkit bietet eine einheitliche Schnittstelle, auch beim Einsetzen
unterschiedlicher Systeme. Des Weiteren bedient es sich dem Prinzip des Single-
Sign-On. Somit ist der Nutzer nach einmaliger Authentizierung am Arbeitsplatz
berechtigt auf alle Rechner und Dienste zuzugreifen. Dies gilt f ur alle Dienste f ur
die er autorisiert ist. Somit entfallt eine standige Neuanmeldung bei den einzel-
nen Diensten. Es bietet zudem die Moglichkeit der Interoperabilitat. Somit besteht
die Fahigkeit in unabhangigen, heterogenen, verschiedenen Systemen, Organisa-
tionen oder Techniken moglichst nahtlos zusammen zu arbeiten. Dadurch konnen
die Informationen ezient und gut verwertbar ausgetauscht werden ohne dabei
auf eine Absprache zwischen den beteiligten Systemen zur uckgreifen zu m ussen.
Hierbei ist jedoch zu beachten, dass verschiedene Standards in den Systemen
eingehalten werden m ussen. Durch die Interoperabilitat ist daher das Arbeiten
und Rechnen in anderen Grid-Projekten problemlos moglich. Gleichzeitig besteht
die Moglichkeit Daten auf andere Ressourcen, welche sich innerhalb des Grids
benden, zu transferieren.
Ein weiterer groer Vorteil ist die Aufgabenverteilung auf die einzelnen Syste-
me beziehungsweise die Erzeugung eines guten Workows. Beispielsweise kann
das Pre-Processing am Standort A stattnden, die eigentliche Berechnung der
Daten am Standort B und die nale Auswertung der Ergebnisse schlielich am
Standort C. Dadurch m ussen die einzelnen Personen sich nicht zentral an einem
Standort benden, was zur Arbeitserleichterung beitragt. Einzelne Clients nutzen
17.2 Das Globus Toolkit 209
eigene interne Richtlinien (Policies), unterschiedliche Installationen, Batch Sys-
teme, Netzwerkprotokolle und Benutzerverwaltungen. Durch das Globus Toolkit
ndet eine Vereinheitlichung auf Basis von verschiedenen Standards statt. Das
Toolkit basiert auf Web-Services, auf welche noch eingegangen wird. Das 15.
Kapitel beschaftigt sich mit der Architektur von Web Services. Somit bietet das
Globus Toolkit einen Standardzugang und Standardschnittstellen.
17.2.3 Aufbau
Das Globus Toolkit ist eine Implementierung verschiedener Standards:
Open Grid Services Architecture (OGSA)
Open Grid Services Infrastrucure (OGSI)
Web Services Resource Framework
SOAP und WSDL
WS-Management und WS-BaseNotication
Job Submission Description Language
Distributed Resource Management Application API
Die OGSA ist eine Architektur f ur serviceorientierte Grid Computing Umgebungen
und wurde von der OGF, dem Open Grid Forum, entwickelt. Diese Architektur
basiert wiederum auch auf verschiedenen Techniken von Webservices wie WSDL
oder SOAP. Die OGSI bietet eine Infrastruktur f ur die Open Grid Service Ar-
chitektur. Das Toolkit nutzt Implementierungen der folgender Protokolle, welche
auch von der OGF deniert wurden, zur Sicherstellung folgender Services:
Security Services: Grid Security Infrastructure (GSI)
Resource Management: Grid Resource Allocation and Management Protocol
(GRAM)
Information Services: Monitoring and Discovery Services (MDS)
Data Movement and Management: Global Access to Secondary Storage
(GASS)
Die Abbildung 17.1 veranschaulicht den allgemeinen und vereinfachten Aufbau
des Toolkits durch die einzelnen Implementierungen der Protokolle. Hierbei gibt
es jedoch kleinere Unterschiede bei den einzelnen, verwendeten Protokollen in den
verschiedenen Versionen des Toolkits.
Security Services beziehungsweise die Grid Security Infrastructure (GSI) ba-
siert auf dem Prinzip der Private-Public-Key Verschl usselung. Der Public Key
210 17 Globus Toolkit
Abbildung 17.1: vereinfachter Aufbau des Globus Toolkits
ermoglicht es jedem, Daten f ur den Inhaber des Private Key zu verschl usseln
oder dessen digitale Signaturen zu pr ufen. Der Private Key ermoglicht dem Besit-
zer, Daten welche mit dem Public Key verschl usselt wurden, zu entschl usseln,
sich zu authentizieren oder digitale Signaturen zu erzeugen. Es basiert auf
X.509-Zertikaten. Diese sind eine Art elektronische Umsetzung der Authenti-
zierung, Autorisierung und sind vergleichbar mit einem Personalausweis. Der
private Teile des Zertikats ist mit einem Passwort gesch utzt und mit dem Zerti-
kat kann man sich beim Ressourcen-Provider ausweisen. Durch den Einsatz von
Proxy-Zertikaten wird das bereits angesprochene Single-Sign-On und eine De-
legation von Aufgaben ermoglicht. Proxy-Zertikate haben in der Regel nur eine
G ultigkeitsdauer von 12 Stunden. Dadurch, dass hierbei keine Passworter uber
das Netz ubertragen werden, keine Passworter gespeichert werden m ussen und
die G ultigkeitsdauer nur begrenzt ist, bietet dieses Verfahren mehr Sicherheit. Der
Einsatz dieser Zertikate ist zudem einfach und bequem.
Resource Management, speziell der Grid Resource Allocation Manager (GRAM),
ist eine Software-Komponente des Globus Toolkits f ur das Lokalisieren,
Uber-
tragen,
Uberwachen und das Abbrechen von Jobs. Die Resource Specication
Language (RSL), ist eine XML basierte Job Beschreibungssprache und dient dazu
komplexe Jobs zu beschreiben. Zudem ist RSL notwendig um mehrere Jobs mit
einem Befehl auszuf uhren, parallele Jobs auszuf uhren und um das le staging zu
ermoglichen. Unter staging versteht man das Kopieren von Daten auf eine Res-
source. Es ist damit eine serielle sowie parallele Abarbeitung der Jobs moglich.
GRAM bietet Schnittstellen zu allen gangigen Batchsystemen. Man unterschei-
17.2 Das Globus Toolkit 211
det hierbei zwei Arten von Jobs. Einmal den interaktiven Job. Hierbei ist man
durchgangig mit der Rechenressource verbunden und die Ausgabe erfolgt auf ei-
nem lokalen Bildschirm. Zum anderen gibt es den Batchjob. Hierbei wird das
Programm auf einer Rechenressource ausgef uhrt und die Ausgabe erfolgt in Form
einer Datei. Dabei ist keine Interaktion moglich.
Information Services beziehungsweise Monitoring and Discovery Services sind eine
Suite von Web-Services. Diese beinhalten Komponenten zur
Uberwachung und
Anzeige von Ressourcen in einer virtuellen Organisation. Das Globus Toolkit in
der Version 4 enthalt noch eine non-Web-Service-Version des Monitoring and
Discovery Services. Diese ist jedoch in der Version 5 nicht mehr enthalten. Die
folgende Grak zeigt das GUI eines solchen
Uberwachungstool. Fehlerhafte Jobs
sind markiert.
Abbildung 17.2: Monitoring and Discovery Services
Das Data Movement und Management bedient sich an verschiedenen Mechanis-
men. Das GridFTP, dem Reliable File Transfer (RLT), dem Replication Location
Service (RLS) und dem Data Replication Service (DRS).
GridFTP ist eine FTP-Erweiterung. Hierbei sind mehrere parallele TCP-Kanale
moglich die der Sender bestimmt und onet. Im Grid-Umfeld spielt NAT keine
groe Rolle. Durch Vereinfachung wird die Methode robust in Bezug auf Verlus-
te. Um eine Beschleunigung des Datentransfers zu ermoglichen, konnen Striped
GridFTP-Server eingesetzt werden. Hierbei transferieren mehrere Knoten aus dem
Rechnerverbund parallel Daten. GridFTP ist ein sicheres, zuverlassiges, perfor-
mantes Protokoll und speziell f ur groe Datenmengen optimiert.
212 17 Globus Toolkit
17.3 Bedienung und Eingabebefehle
Die Eingabe beim Globus Toolkit erfolgt auf der Kommandozeile in einer
herkommlichen Konsole. Hierbei gibt es zahlreiche Eingabebefehle und im Fol-
genden sollen einige grundlegende Befehle vorgestellt werden.
Das Globus Toolkit greift auf ein Benutzerverzeichnis /.globus zur uck und dieses
muss als erstes erzeugt werden und die AFS-Rechte m ussen gesetzt werden:
/bin/bash
mkdir ~/.globus
fs sa ~/.globus whoami all -clear
chmod 700 ~/.globus
exit
Listing 17.1: Benutzerverzeichnis anlegen
Um das Toolkit nutzen zu konnen, m ussen das Zertikat und der private
Schl ussel exportiert werden. Die Datei wird beispielsweise als DFNcerticate.p12
in /.globus/ abgelegt. Danach m ussen der private Schl ussel und das Zertikat
getrennt werden: Um eine Verbindung zu einem Grid, hier am Beispiel eines kti-
ven Grids der FH-Schmalkalden gridway.dgrid.fh-sm.de aufzubauen, ist folgender
Befehl notwendig. Hierbei wird in Analogie zu ssh gsissh auf Port 2222 verwendet:
grid-proxy-init
gsissh -p 2222 gridway.dgrid.fh-sm.de
Listing 17.2: Auf Grid zugreifen
Um eine Datei zu kopieren, kann gsiscp verwendet werden. Um eine Portangabe
zu machen, wird das Flag -P verwendet:
gsiscp -P 2222 myfile gridway.dgrid.fh-sm.de
Listing 17.3: Datei kopieren
Nach dem Beenden der gsissh-Verbindung, muss der Proxy wieder geloscht wer-
den. Dies geschieht mit folgendem Befehl:
grid-proxy-destroy
Listing 17.4: Proxy loschen
Um beispielsweise einen Knoten mit 8 Prozessoren f ur eine maximale Rechenzeit
von einer Stunde zu reservieren ist folgender Befehl notwendig:
17.3 Bedienung und Eingabebefehle 213
qsub -I -l nodes=1:ppn=8:bwgrid,walltime=1:00:00
Listing 17.5: Knoten reservieren
Job wird in eine Warteschlange eingereiht und danach abgearbeitet:
qsub -l nodes=2:bwgrid:ppn=2+1:bwgrid:ppn=3 ./myscript
Listing 17.6: Job in Warteschlange stellen
Der Befehl globusrun-ws ist ein ozieller Job-Eingabe-Client f ur GRAM4 und
kann mit verschiedenen Befehlen kombiniert werden. Er dient dazu Jobs einzu-
geben und zu managen. Der Befehl um einen Job abzusenden oder zustellen zu
konnen, sieht am Beispiel von date wie folgt aus:
globusrun-ws -submit -c /bin/date
Listing 17.7: Job absenden oder zustellen
Mit der Erweiterung -F wird der Host speziziert:
globusrun-ws -submit -F mb.fh-schmalkalden.de -c grid1
Listing 17.8: Den Host spezizieren
Mit der Option -s wird der Streaming-Modus aktiviert und die Ausgabe erfolgt
auf dem lokalen Bildschirm:
globusrun-ws -submit -s -c /bin/date
Listing 17.9: Streaming Modus aktivieren
Mit der Erweiterung -b wird der Job im Batchmodus abgesetzt:
globusrun-ws -submit -b -c /bin/date
Listing 17.10: Job im Batchmodus
Das Toolkit ist sehr komplex und erfordert einges an Fachkenntnissen. Es wird
jedoch gut strukturierte Dokumentation, sowohl f ur Systemadministratoren als
auch f ur Endanwender, f ur den Umgang mit dem Toolkit angeboten [3].
214 17 Globus Toolkit
17.4 Fazit
Beim Globus Toolkit erfolgt eine zertikatbasierte Authentizierung und Auto-
risierung, welche f ur mehr Sicherheit sorgt, so dass Angrie von auen weniger
haug erfolgreich sind. Durch den Einsatz von Zertikaten wird mehr Sicherheit
gewahrleistet und der Einsatz ist einfacher und bequemer. Das Toolkit bietet
Schnittstellen f ur alle gangigen Batchsysteme. Zudem ermoglicht es Single-Sign-
On. Das Toolkit bietet letztendlich einen sicheren, zuverlassigen und performan-
ten Datentransfer. Es stellt sehr leistungsfahige Hilfsmittel bereit. Zudem werden
f ur den Einsatz gute bis sehr gute Programmierkenntnisse und der sichere Um-
gang mit Linux vorausgesetzt, da das Windows-Betriebssystem nicht unterst utzt
wird. Gute Grundkenntnisse auf diesen Gebieten sind schon f ur das Einrichten
des Toolkits erforderlich. Das Toolkit dient zur Losung von rechenintensiven, ma-
thematischen und naturwissenschaftlichen Problemen in Gebieten der Teilchen-
physik, Meteorologie oder Industriesimulationen und der Einsatz f ur den privaten
Gebrauch ist daher eher ungeeignet.
Literaturverzeichnis
[1] The gridbus project, Grid Computing. http://www.gridcomputing.com/,
2010.
[2] Globus Alliance, About the Globus Toolkit.
http://www.globus.org/toolkit/about.html, 2010.
[3] Globus Alliance, Commandline Tools. http://www.globus.org/toolkit/docs/
4.2/4.2.1/commands/, 2010.
[4] Globus Alliance, Globus Toolkit. http://www.globus.org/toolkit/, 2010.
18 Apache Hadoop
Thomas Hohn
Inhaltsverzeichnis
18.1 Das Apache Hadoop Framework . . . . . . . . . . . . . . 215
18.1.1 Was soll Hadoop ermoglichen? . . . . . . . . . . 216
18.2 Subprojekte des Hadoop-Frameworks . . . . . . . . . . . 216
18.2.1 Hadoop Common . . . . . . . . . . . . . . . . . 216
18.2.2 Hadoop MapReduce . . . . . . . . . . . . . . . . 216
18.2.3 Chukwa . . . . . . . . . . . . . . . . . . . . . . . 217
18.2.4 H-Base . . . . . . . . . . . . . . . . . . . . . . . 218
18.2.5 HDFS (Hadoop Distributed File System) . . . . . 218
18.2.6 AVRO . . . . . . . . . . . . . . . . . . . . . . . 219
18.2.7 ZooKeeper . . . . . . . . . . . . . . . . . . . . . 219
18.2.8 HIVE . . . . . . . . . . . . . . . . . . . . . . . . 219
18.2.9 Pig . . . . . . . . . . . . . . . . . . . . . . . . . 220
18.2.10 Mahout . . . . . . . . . . . . . . . . . . . . . . . 220
18.3 Einsatzgebiete des Apache Hadoop Frameworks . . . . . . 221
18.3.1 Facebook . . . . . . . . . . . . . . . . . . . . . . 222
18.3.2 Yahoo! . . . . . . . . . . . . . . . . . . . . . . . 223
18.4 Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224
18.1 Das Apache Hadoop Framework
Der Entwickler von Apache Lucene, Doug Cutting, startete im Jahr 2006 das Pro-
jekt Hadoop, dass zu diesem Zeitpunkt noch unter dem Namen Lucene-Subprojekt
bekannt war. Urspr unglich stammt Hadoop von Apache Nutch, einer Open Sour-
ce Web-Suchmaschine ab. Apache Nutch wird als ein Teil des Apache Lucene-
Projektes angesehen.
Im Jahre 2008 ernannte die Apache Software Foundation (ASF) das Hadoop-
Projekt zu einem Top-Level-Projekt. Kurz darauf wurde Hadoop schon von ver-
schiedenen Firmen, wie z.B. Yahoo!, Facebook und der New York Times, genutzt.
Im Juli 2009 gewann ein Cluster mit dem Hadoop-Framework zweimal den Tera-
byte Sort Benchmark, der in unterschiedlichen Kategorien die leistungsfahigsten
216 18 Apache Hadoop
Systeme zur Datensortierung bestimmte. Es war das erste Java-Open-Source-
Programm welches diesen Benchmark f ur sich entscheiden konnte.
18.1.1 Was soll Hadoop ermoglichen?
Das Apache Hadoop-Projekt entwickelt Open-Source-Software f ur sicheres, ska-
lierbares und verteiltes Arbeiten. Es dient als Plattform, die das Schreiben und
Ausf uhren von Anwendungen erleichtern soll. Dieses Framework soll in der Lage
sein, groe Datenmengen im Petabyte-Bereich verarbeiten zu konnen. Um dies
umsetzen zu konnen, wird Hadoop von einer Reihe Subprojekte, die z.B. Daten
speichern, analysieren oder verteilen konnen, unterst utzt. Im folgenden Abschnitt
werden alle Subprojekte des Apache Hadoop Frameworks naher betrachtet.
18.2 Subprojekte des Hadoop-Frameworks
Wie im Abschnitt 18.1 bereits angesprochen entwickelte Hadoop zehn Subprojek-
te, die zumeist mit einer Open-Source-Liznez genutzt werden konnen.
Die folgende
Ubersicht soll Aufschluss dar uber geben, f ur welchen Einsatzbereich
sich die einzelnen Subprojekte eignen und welche spezischen Eigenschaften sie
besitzen.
18.2.1 Hadoop Common
Common ist ein Hilfsmittel, das alle anderen Hadoop Subobjekte unterst utzt.
Es enthalt ein File-System, Serialization Libaries und RPC. Hadoop Common
verfolgt eine eigene Dokumentation, die n utzliche Informationen zur Handhabung,
Nutzung und Installation von Hadoop beinhaltet.
18.2.2 Hadoop MapReduce
Die Grundlage hierf ur wurde durch Google Inc. geschaen. Google f uhrte die-
sen Algorithmus ein, um nebenlauge Berechnungen von groen Datenmengen
auf Computerclustern durchzuf uhren. Hadoop MapReduce verfolgt genau diesen
Ansatz des verteilten Arbeitens. Es ist ein Programmiermodell und Software-
Framework zum Schreiben von Anwendungen, die es ermoglichen sollen eine
schnelle Verarbeitung groer Datenmengen parallel an groen Clustern von Rech-
nerknoten durchzuf uhren. Deren Implementierung kann durch C++, Erlang, Java,
Python und uber weitere Sprachen realisiert werden. Abbildung 18.1 soll verdeut-
lichen, wie Hadoop MapReduce in einem Unternehmen angewendet werden kann.
Der hier dargestellte Datenuss illustriert die MapReduce-Berechnung.
18.2 Subprojekte des Hadoop-Frameworks 217
Abbildung 18.1: Using Hadoop in the Enterprise (Quelle:[1])
Im Bereich 1
Con-
sume Result. Diese Daten werden dann in einem Relationalen Datenbank Ma-
nagement System (RDBMS) abgespeichert. Von diesem Punkt aus konnen die
Daten f ur den Benutzer bereitgestellt werden. So konnen nun Analysen, Auswer-
tungen oder weitere Verwendung dieser Daten gewahrleistet werden.
18.2.3 Chukwa
Chukwa ist ein Sammelsystem f ur Dateien jeglicher Art. Um die bestmogliche
Nutzung der gesammelten Daten zu gewahrleisten, bietet Chukwa ein eigenes
Toolkit an, welches f ur Monitoring und genaue Analysen von Ergebnissen zur
Verf ugung steht. Seine Aufgabe besteht darin, verteilte Systeme zu uberwachen
218 18 Apache Hadoop
und zu verwalten. Des Weiteren bildet es die Spitze von Hadoop Distributed File
System (HDFS) und MapReduce. In Hinblick auf die Skalierbarkeit und Robustheit
besitzt Chukwa die gleichen Eigenschaften wie Hadoop. Mit Chukwa ist es Hadoop
gelungen, ein gutes Open-Source Dateisammelsystem zu entwickeln.
18.2.4 H-Base
H-Base ist eine einfach skalierbare Datenbank die zur Verwaltung sehr groer
Datenmengen innerhalb eines Hadoop-Clusters dient. Hierbei bietet es sich als
kosteng unstiger Ansatz an, da es auch Open-Source ist. Die H-Base-Datenbank
basiert auf einer freien Implementierung der Google-Version BigTable. BigTable ist
ein proprietares Hochleistungs-Datenbanksystem das von Google zur Verf ugung
gestellt wird. Die Grundlage hierf ur wurde von Google File Systeme (GFS) und
Chubby Lock Service gelegt.
Die Datenstruktur von H-Base ist sehr gut f ur Daten geeignet, die selten
verandert, daf ur aber sehr haug erganzt werden. H-Base ist eine gute Losung,
um Milliarden von Zeilen verteilt und performant zu verwalten.
Es stellt geeignete Basisklassen f ur die Unterst utzung von Hadoop-MapReduce-
Jobs mit den so genannten H-Base-Tables bereit. Durch Optimierung von Real-
zeitabfragen konnen schnellere Prozesse erzeugt werden. Weiterhin enthalt es
RESTful Web Service Gateway der XML-, Protobuf- und binare Datenendkodie-
rung unterst utzt.
Die Random-Access-Performace ist hier auf der gleichen Ebene mit Open-Source
relationalen Datenbanken, wie MySQL, zu sehen. Ein weiterer wichtiger Punkt der
von H-Base verfolgt wird, ist der Export von Metriken uber die Hadoop Metrik
Subsysteme.
18.2.5 HDFS (Hadoop Distributed File System)
Als Vorbild f ur HDFS dient das Google File System (GFS). Aber was versteht man
eigentlich unter GFS? GFS ist ein auf Linux basiertes Dateisystem, das von Google
f ur seine Anwendungen genutzt wird. Das Haupteinsatzgebiet liegt im Bereich der
Internetsuch-Optimierung und soll einen hohen Datendurchsatz ermoglichen. Wie
folgt werden Daten in mehreren Gigabyte groen Dateien gespeichert, die gewisse
Bedingungen erf ullen m ussen. Bspw. d urfen diese Daten nur selten geandert oder
uberschrieben werden.
Nach diesem Vorbild arbeitet auch HDFS. Es wird von Hadoop als primares Spei-
chersystem eingesetzt. Hierbei erstellt es mehrere Kopien von Datenblocken und
verteilt diese auf Rechnerknoten in einem Custer was zuverlassig und extrem
schnelle Berechnungen zulasst.
18.2 Subprojekte des Hadoop-Frameworks 219
18.2.6 AVRO
AVRO ist ein Datei-Sterilisations-System welches auf bestimmte Schemata auf-
baut. Es bietet den Anwendern eine ubersichtliche Datenstruktur, wobei es auch
ein eigenes kompaktes, schnelles und binares Datenformat bereitstellt. Weiter-
hin konnen hier persistente Daten in einer Container-Datei gespeichert werden.
Im Umgang mit dynamischen Sprachen bietet sich AVRO an, da es eine leichte
Integration zulasst.
Im Vergleich zu anderen Systemen wird bei AVRO kein Code erzeugt, sondern uber
ein bestimmtes Schema konnen die Daten vollstandig verarbeitet werden. Wenn
ein Schema vorhanden ist, besteht die Moglichkeit, beim Lesen der Daten weniger
Typinformationen in den Daten zu codieren. Bei Anwendung eines Schemas sind
dennoch das alte und das neue Schema vorhanden. Dennoch bietet AVRO eine
Reihe gleicher Funktionen wie bei anderen Systemen, wie bspw. Sparsamkeit oder
Protokoll-Puer.
18.2.7 ZooKeeper
ZooKeeper ist ein High-Performance-Service, um verteilte Anwendungen koordi-
nieren zu konnen. Dieser Dienst ist zustandig f ur die Bereitstellung von Gruppen
Services, verteilter Synchronisierung und die Einhaltung von Kongurationsinfor-
mationen. Viele verteilte Anwendungen verwenden oder beinhalten diese Dienste
bereits. Dabei ist zu beachten, dass bei der Durchf uhrung solcher Dienste auch
gewisse Fehler auftreten konnen, die dann zu einem hoheren Verwaltungsauf-
wand f uhren. Die Losung dieser Fehler gestaltet sich schwierig. Auch bei richtiger
Anwendung dieser Dienste wird durch die verschiedenen Implementierungen eine
hohe Komplexitat erzeugt. Ziel von ZooKeeper ist es, eine einheitliche zentrale
Koordinationsstelle zu etablieren, in der alle Dienste vereint werden. Der Service
der einzelnen Dienste bleibt auch nach der Zentralisierung immer verteilt.
18.2.8 HIVE
HIVE bildet die Spitze des Hadoop-Frameworks in Form einer Data-Warehouse-
Infrastruktur. Es bietet eine Reihe unterst utzender Tools, die dazu genutzt werden
Analysen und Auswertungen von groen Datensets durchzuf uhren und in Hadoop-
Files zu speichern. Gleichzeitig soll es ermoglichen Daten komplexer Struktur
leichter zusammenzufassen. Um solche Prozesse durchf uhren und Daten struk-
turieren zu konnen, nutzt HIVE eine eigene Abfragesprache (HIVE QL), die auf
SQL basiert. HIVE QL bietet annahernd die gleichen Voraussetzungen wie SQL
und bietet so dem Nutzer ein leichteres Arbeiten, da die Einarbeitungszeit in diese
eigene Sprache gering ist.
220 18 Apache Hadoop
Gleichzeitig ermoglicht HIVE QL MapReduce-Programmierern ihre selbst erzeug-
ten Mapper und Reducer zu besseren Analysen einzusetzen.
Weiterhin soll es eine gute Latenz f ur Test-Abfragen und interaktives Daten-
Browsing unterst utzen. Ein Nachteil der bei HIVE auftritt ist der Umgang mit
Echtzeit-Abfragen, da diese hier nicht unterst utzt werden.
Nat urlich uberwiegen dennoch die Vorteile dieser Software. Sie liegen im Bereich
der Skalierbarkeit, Fehlertoleranz und der Erweiterbarkeit.
HIVE wird derzeit schon von Facebook eingesetzt, um die Flut an Datenmengen,
die taglich neu erzeugt oder verwaltet werden m ussen, handhaben zu konnen.
Durch die solide Infrastruktur kann eine sichere Speicherung und das Abrufen von
Daten gewahrleistet werden.
18.2.9 Pig
Dieses Subprojekt verfolgt die Verwaltung und Analyse sehr groer Datenmengen.
Um dies realisieren zu konnen hat man in Pig eine eigene Programmiersprache
entwickelt, die es zulasst High-Level-Abfragen auf Daten durchzuf uhren. F ur die
Ausf uhrung ist ein Compiler von Noten, der von Pig bereitgestellt wird. Ein groer
Vorteil von Pig ist seine oene zugangliche Struktur und die Parallelisierung. Hier-
bei kann durch eine einfache Programmierung das parallele Ausf uhren komplexer
Analysen durchgef uhrt werden. Im Hinblick auf die Optimierung agiert Pig auto-
nom, da es komplexe Operationen selbst ausf uhren kann. Es ermoglicht so dem
Nutzer eine leichte Handhabung.
Ein weiterer Vorteil f ur den Nutzer besteht in der eigenen Programmiersprache
von Pig die es ermoglicht eigene Funktionen mit einem bestimmten Zweck f ur die
Verarbeitung von Daten zu generieren.
So erweist sich Pig als ein sehr individuell einsetzbares Tool, welches sich uber
einen groen Anwendungsbereich aufspannen lasst.
18.2.10 Mahout
Mahout ist eine kommerziell eingesetzte Software, welche das Ziel verfolgt, ska-
lierbare maschinelle Lern-Bibliotheken zu erzeugen. Es handelt sich hierbei wieder
um den Einsatz groer Datenmengen die skaliert werden m ussen.
Was wird aber unter dem Begri der Skalierbarkeit in Mahout verstanden? Be-
stimmte Kern-Algorithmen, die mit Hilfe von MapReduce Paradigmen umgesetzt
werden, werden f ur Klassikationen, Clustering und Batch-Based Collaborative
Filtering eingesetzt. Weiterhin gibt es noch die s.g. Kern-Bibliotheken, welche
sehr ausgereift und hoch optimiert sind. Diese bieten verteilten- als auch nicht
verteilten Algorithmen eine sehr gute und ausgewogene Leistung.
18.3 Einsatzgebiete des Apache Hadoop Frameworks 221
Ein weiterer wichtiger Punkt ist, dass Mahout zum aktuellen Zeitpunkt nur vier
Use Cases unterst utzt. Diese Use Cases teilen sich wie folgt auf:
1. Der Schwerpunkt leigt darauf, sich auf das Nutzerverhalten zu konzentrieren,
um bestimmte Begrie ausndig zu machen die der Nutzer bevorzugt.
2. Clustering versucht Dokumente nach bestimmten Themenbereichen zu ordnen
die jeweils eine eigene Gruppe bilden.
3. Klassizierung konzentriert sich auf die Zuordnung der vorhandenen, geord-
neten Dokumente zu speziellen Kategorien, wobei sie auch bei nicht gekenn-
zeichneten Dokumenten versuchen, eine richtige Kategorie zu nden.
4. Bei Gegenstanden die haug benutzt werden, wird versucht sie in einer geeig-
neten Gruppe von Gegenstanden zusammen zufassen. Hierf ur sind so genannte
Sessions oder
Hadoop
with Security und zum anderen um
Oozie.
harten Echtzeitsystemen
vorgegebene Antwortzeiten penibel eingehalten werden, wahrend bei
weichen
Echtzeitsystemen Informationen auch spater verarbeitet werden konnen.
Weiche Echtzeitsysteme (Soft Real-Time Systems)
Die Ergebnisse von weichen Echtzeittasks sind nach der Deadline weiterhin von
Nutzen und f uhren nicht zum Scheitern des Systems. Als Beispiel ware ein Vi-
deostream zu nennen, welcher durch Performanceeinbr uche des Servers Bildfehler
liefert, aber dennoch nicht abbricht.
Harte Echtzeitsysteme (Hard Real-Time Systems)
Bei harten Echtzeitsystemen f uhrt eine
Uberschreitung der Antwortzeit zu kriti-
schem Fehlverhalten im System. Besonders in sicherheitskritischen Systemen wie
Reaktoren oder Shuttles konnen nicht ubermittelte Warnungen bei
Uberhitzungen
Leben gefahrden.
Besteht ein Echtzeitsystem aus mindestens einem harten Task, so ist es als ein
hartes Echtzeitsystem zu klassizieren, da andere Prozesse von dem rechtzeitigen
Ergebnis abhangig sind.
19.2.2 Verteilte Echtzeitsysteme
Ein Monitor beobachtet das Verhalten eines Systems und erkennt, wenn es im
Einklang mit einer bestimmten Spezikation ist [1].
Das uberwachte System (System Under Observation, SUO) kann ein Programm,
Hardware, Netzwerk oder jede Kombination untereinander sein. Verletzt beispiels-
weise das SUO eine Spezikation, gibt der Monitor eine Warnung aus, worauf das
System reagieren kann.
In der Vergangenheit lag der Fokus der Forschung bei Monitoren auf Oine
monitoring. Dabei erfolgt die Datensammlung und Analyse nicht dynamisch, d.h.
Daten konnen nicht im laufenden Betrieb des Systems verwendet werden. Fehler
werden dagegen protokolliert und dienen nach ihrer Analyse zur Fehlerdiagnose
und Verbesserung des Systems.
19.3.1 Forschungsstand des Monitoring
Online-Monitoring dagegen ist aktueller Forschungsgegenstand. Ein Programm
wird hierbei kontinuierlich auf die Einhaltung seiner Spezikationen gepr uft. Mo-
nitore tragen hierbei im laufenden Betrieb zur Stabilitat des Systems bei. Jedoch
erfordert Online-Monitoring hohe Ressourcen und kommt deshalb uberwiegend in
der Praxis nur beim Testen von Software zum Einsatz.
Die Implementierung von Online-Monitoring kann entweder inline oder outli-
ne erfolgen. Bei der inline-Umsetzung eines Monitors wird dieser ahnlich eines
Kommentars innerhalb des Programmcodes platziert. Bei dem Anna Consistency
232 19 Monitoring Distributed Real-Time Systems
Checking System (Anna CCS) werden z.B. aus Kommentaren mit Eigenschaften
Funktionen generiert, welche an dieser Stelle als Monitor arbeiten. Sogar ab Ja-
va 5 sind grundlegende Behauptungen im Code moglich. Eine andere Moglichkeit
einen Monitor zu implementieren ist auerhalb (outline) des Programmcodes. Der
Monitor wir hierbei als eigener Prozess gestartet. Auch eine Kombination von out-
und inline Implementierung moglich.
Online-Monitore teilen unabhangig von ihrer Implementierung Ressourcen mit
dem beobachteten System. So stellt sich als Forschungsherausforderung an
Online-Monitoring u.a. die Frage nach ihrer Ezienz. Die Aufgabe von Moni-
toren ist das Synthetisieren von Verhaltensspezizierungen hoherer Ebenen. Dies
kann ezient durch z.B. Linear Temporal Logic (LTL) (zeitabhangige Logik)
geschehen, welches das Generieren von Sicherheitseigenschaften aus Aussagen
ermoglicht. Eine zeitabhangige Aussage ware z.B. Es kann niemals was schlim-
mes passieren. Mit Hilfe von zeitlichen Modalitaten konnen Formeln uber die
Zukunft von Pfaden aufgestellt werden. Durch Operatoren wird hierbei zum Aus-
druck gebracht, ob ein Modell die Sicherheitseigenschaften erf ullt und wann nicht
mehr. Als Modell ware hier EAGLE zu nennen, welches beim NASA Mars Rover
zum Einsatz kommt.
Ein Groteil der Forschung des Monitoring basiert auf einheitlicher, monolithischer
Software. In der Monitoring-Forschung wurde verteilten Systemen bisher wenig
Beachtung gewidmet. Es gibt dennoch interessante Ansatze:
Der zentrale Monitoring-Ansatz f ur lokale Eigenschaften von Bauer erfordert
nur einen Verweis eines Programms auf einen lokalen Knoten. Jeder Knoten
uberpr uft sicherheitstechnische Eigenschaften und sendet einen Bericht an die
zentrale Diagnose-Engine. Der zentrale Monitor versucht den Ursprung des Pro-
blems zu diagnostizieren und in einen sicheren Zustand zu lenken. Der Ansatz
von Bhargavon zielt auf die
Uberwachung von verteilten Netzwerkprotokollen,
wie TCP, ab. Hierbei haben sogenannte Black-Box-Monitore keine Kenntnis des
internen Zustands. Sie zeigen den Trac, mimen Protokollaktivitaten als Reaktion
des uberwachten Inputs nach und vergleichen den Output im Netzwerk.
Die Network Event Recognition Language (NERL) wird hierbei verwendet, um
die Spezizierungen der zu uberwachenden Netzwerkereignisse zu denieren. Mit
einem spezialisierten Compiler wird dazu eine Zustandsmaschine generiert, welche
die Ereignisse uberwacht.
19.3.2 Monitoring and Checking (MaC) Framework
Im Folgenden soll das MaC-Framework vorgestellt werden, welches ein hochentwi-
ckeltes Monitoring-Framework ist. Das MaC-Framework adressiert weiche, nicht
verteilte Echtzeitanwendungen, welche in Java geschrieben wurden. Das Beson-
19.4 Monitor-Architekturen f ur verteilte, harte Echtzeitsysteme 233
dere am Framework ist, dass die Integration und Monitor-Zustandigkeiten in ver-
schiedenen Tasks erfolgt. Die Implementierung kann out- oder inline erfolgen, bei
komplexen Projekten sollte der Monitor jedoch auerhalb des Programmcodes
platziert werden.
Die Sicherheitsspezizierungen werden in der Meta Event Denition Language
(MEDL) deniert, eine zeitliche Satzlogik von Ereignissen und Bedingungen. Die-
se wird uber einen Pfad von Beobachtungen interpretiert. Die Primitive Event
Denition Language (PEDL) deniert die Ereignisse und ist zustandig f ur das
Mapping von Spezikationen. Der PEDL-Compiler setzt den Input aus Java-
Implementierung und PEDL-Spezizierung um. Daraus entstehen zwei Produkte.
Der Filter wird als Code eingesetzt und beobachtet die Monitor-Objekte. Der
Event Recognizer verarbeitet die geschickten Ereignisse und uberpr uft, ob diese
uberwacht werden. Der MEDL-Compiler arbeitet auf der anderen Seite als Ve-
rier und uberpr uft ob der Event Recognizer die MEDL-Spezizierungen einhalt.
Durch die Aufgabentrennung ist eine hohe Sicherheit bei der Ausf uhrung gegeben.
Abbildung 19.3: Monitoring and Checking (MaC) Framework[1]
19.4 Monitor-Architekturen f ur verteilte, harte
Echtzeitsysteme
Mochte man Monitore f ur verteilte Echtzeitsysteme entwerfen, so ist hierbei kein
neuer Theorieansatz notwendig. Galois [1] argumentiert, dass das Subsumieren
234 19 Monitoring Distributed Real-Time Systems
von aktuellen, theoretischen Erkenntnissen hierbei ausreichend f ur den Entwurf
von
Uberwachungssystemen ist. Monitore sind nach dieser Argumentation Pro-
zesse, welche sich nicht von anderen in einem System unterscheiden.
19.4.1 Monitore in einem verteilten Echtzeitsystem