Verteilte Informationsstrukturen zur modernen - Das IICM

Transcription

Verteilte Informationsstrukturen zur modernen - Das IICM
Verteilte Informationsstrukturen zur
modernen Wissensauffindung im Internet
Untersuchungen und Testimplementierung von
standardisierten Übertragungsmechanismen für das
xFIND System
Wilfried Lackner
Verteilte Informationsstrukturen zur
modernen Wissensauffindung im Internet
Untersuchungen und Testimplementierung von
standardisierten Übertragungsmechanismen am xFIND System
Diplomarbeit
an der
Technischen Universität Graz
vorgelegt von
Wilfried Lackner
Institut für Informationssysteme und Computer Medien (IICM)
Technische Universität Graz
A-8010 Graz, Österreich
Dezember 2004
© Copyright 2004, Wilfried Lackner
Diese Arbeit ist in deutscher Sprache verfasst.
Begutachter: o.Univ.-Prof. Dr. Dr.h.c.mult. Hermann Maurer
Betreuer: Dipl.-Ing. Dr.tech. Christian Gütl
Distributed Informationstructure of Modern
Information Retrieval Systems
Analysis and Testimplementation of standardised
Datatransfermechanism for the xFIND System
Master’s Thesis
at
Graz University of Technology
submitted by
Wilfried Lackner
Institut for Information System and Computer Media (IICM)
Graz University of Technology
A-8010 Graz, Austria
December 2004
© Copyright 2004, Wilfried Lackner
This Thesis is written in german language.
Advisor: o.Univ.-Prof. Dr. Dr.h.c.mult. Hermann Maurer
Supervisor: Dipl.-Ing. Dr.tech. Christian Gütl
Kurzfassung
Wissensauffindung im Internet kann grundsätzlich über verschiedene Möglichkeiten
realisiert werden. Der Zugriff auf das verteilte Wissen erfolgt jedoch meist unstrukturiert
unter Nutzung verschiedener Suchfunktionen. Im WWW erfolgt die Suche nach
Information mit Hilfe von Suchmaschinen. Aufgrund des stetig steigenden
Datenvolumens können herkömmliche Suchmaschinen oft keine brauchbaren Antworten
mehr liefern. Ein großer Anteil des Wissens steckt zudem im nicht indizierten DeepWeb.
Information in verschiedenen Formaten, Medien oder Sprachversionen erschweren
zudem die Suche. Um nun gezielt nach Informationen suchen zu können, bedarf es
deshalb zusätzlicher Aufwände. Das Anreichern der Information mit Metadaten
erleichtert z.B. eine spezifische Datensuche. Das xFIND System versucht insbesondere in
diesem Bereich der Informationsauffindung mögliche Problembereiche zu verbessern.
xFIND ist eine verteilte Sucharchitektur mit der vordefinierte Quellen, themenspezifisch
durchsucht werden können. Die xFIND Kommunikations-schnittstellen sind nicht
standardisiert und besitzen kein modernes Sicherheitskonzept. Ziel dieser Arbeit ist es,
Vorschläge zur Verbesserung der xFIND Kommunikationsschicht im Bereich der
Datenübertragung, Modulanbindung und Verwaltung mit Hilfe standardisierter Protokolle
und Methoden zu erstellen.
Im Untersuchungsteil dieser Arbeit werden Problembereiche verteilter Informationsstrukturen und verteilter Anwendungen dargestellt. Vor- und Nachteile verschiedener
verteilter Topologien liefern zusätzliche Informationen für eine eingehende Analyse
verteilter Architekturen. Neue Ideen und konzeptionelle Ansätze können aus
Architekturformen wie z.B. offenen und dezentralen Peer-to-Peer Netzwerken, die sich
verstärkt im Internet verbreiten, gewonnen werden. Viele bestehende Lösungen aus dem
Bereich der Middleware Applikationen setzen vorwiegend standardisierte Schnittstellen
ein. Eine Analyse diverser standardisierter Dienste und Transportprotokolle für verteilte
Suchsysteme bildet die Basis für weitere Untersuchungen an der xFIND
Übertragungsschicht.
Um Vorschläge zur Verbesserung der xFIND Kommunikationsschnittstellen erstellen
zu können, wird im Gestaltungsteil eine eingehende Analyse der xFIND
Systemarchitektur durchgeführt. Zu Testzwecken wird das Übertragungsverhalten einer
xFIND Client-Server Kommunikation unter Nutzung einer Testimplementierung
simuliert. Mit diesem Simulationsaufbau werden Benchmarkwerte erstellt, um
vergleichbare Analyseergebnisse mit anderen Technologien zu gewinnen. In weitere
Folge werden zwei Technologien näher untersucht und Prototypen für eine verbesserte
Kommunikationsarchitektur für das xFIND System implementiert. So findet BEEP im
Bereich der Datenübertragung und das JXTA Protokollframework für den Bereich der
automatisierten Verwaltung im Gestaltungsbereich seine Anwendung. Mit Hilfe dieser
Prototypen werden spezifische Kennwerte der jeweiligen Technologien erstellt und mit
den Ergebnissen von xFIND verglichen. Den Abschluss des Gestaltungsteiles bildet eine
Übersicht an möglichen Vorschlägen und neuen Ideen zur Verbesserung bzw.
Erweiterung des xFIND Systems.
Abstract
Information retrieval in the Internet can in principle be realized in miscellaneous
ways. However, access to distributed knowledge often occurs in unstructured fashion
through the use of different search methods. In case of the WWW, the search for
information is carried out by means of search engines. Because of the constantly rising
quantity of data, conventional search engines often provide no useful answers.
Furthermore, a large portion of knowledge resides in the un-indexed DeepWeb.
Information storage in different formats, media or language versions additionally
complicate the retrieval process. In order to be able to look for purposeful information
additional methods are required. For example, providing information with metadata
facilitates a specific data search. The xFIND system introduced in this work tries to
present some solutions as to how these problems of information retrieval could be
prevented. xFIND is a distributed search architecture which enables a topic-specifical
search in pre-defined resources. The xFIND communication interfaces are not
standardized and have no modern security concept. The goal of this thesis is to find some
suggestions for the improvement of the xFIND communication layer in the range of the
data communication, the module binding and the module administration with the help of
standardized protocols and methods.
The theoretical section of this thesis tries to present problem areas of distributed
information structures and distributed applications. Pro and cons of different distributed
topologies give additional information for a detailed analysis of distributed architectures.
New ideas and conceptional approaches can be extracted from new architecture forms
such as open and decentralized peer-to-peer networks which increasingly spread in the
Internet. Many existing solutions from the area of middleware applications use
predominantly standardized interfaces. An analysis of various standardized services and
transport protocols for distributed searching systems forms the base for further
investigations at the xFIND communication layer.
In order to be able to provide suggestions concerning the improvement of the xFIND
communication interfaces, a detailed analysis of the xFIND architecture is accomplished
in the practical section of this thesis. In order to get comparable results of the xFIND
transient characteristic a simulation test of the xFIND Client Server communication has
been implemented. With this test simulation, benchmark values are provided for future
analysis. Furthermore, two technologies are closely investigated and implemented as
prototypes to achieve improvements for the xFIND communication architecture. In this
way, BEEP will be tested in the practical section in the area of data communication and
the JXTA protocol framework in the range of automated administration. With the help of
special test implementations, the characteristic values of the respective technologies are
provided and compared with the results of the xFIND system. The conclusion of the
practical section is an overview of possible suggestions and new ideas for the
improvement and extension of the xFIND search system.
Ich versichere hiermit, diese Arbeit selbständig verfasst, andere als die angegebenen
Quellen und Hilfsmittel nicht benutzt und mich auch sonst keiner unerlaubten Hilfs-mittel
bedient zu haben.
I herby certify that the work presented in this thesis is on my own and the work performed
by others is appropriately cited.
Danksagung
Mein Dank gilt den Mitarbeitern des IICM um Herrn Prof. Dr. Dr. hc. mult. Hermann
Maurer für die Unterstützung in administrativen Angelegenheiten, sowie meinen
Kollegen in der Web Application Group (WAG) die mich stets ermutigt haben und von
deren Wissen ich sehr viel profitieren konnte.
Insbesondere danken möchte ich meinem Diplomarbeits Betreuer, Herrn Dipl.-Ing.
Dr.tech. Christian Gütl, der mich durch zahlreiche Anregungen, Ratschläge und viel
Geduld bei der Erstellung dieser Arbeit unterstützt hat.
Der größte Dank gilt meiner Frau Anita, die mich auch in schwierigen Zeiten immer
motiviert hat und mir vor allem beim Korrekturlesen eine große Hilfe war.
Schon ein Sprichwort sagt:
"Ein Mann muss in seinem Leben einen Sohn (Clemens & Paul) zeugen, ein Haus bauen,
einen Baum pflanzen und ein Buch schreiben."
Ich habe diese Reihenfolge strikt eingehalten, was sich naturgemäß auf die
Erstellungsdauer der vorliegenden Arbeit niedergeschlagen hat. Die Bedeutung hinter
diesem Sprichwort sagt aber doch viel mehr aus.
"Gib das Leben, das du ohne dein Zutun empfangen hast weiter und sorge zusätzlich
dafür, dass dein Kind ein Dach über dem Kopf hat. Arbeite nicht nur für dich und deine
Familie, sondern tue etwas für die Zukunft der Allgemeinheit. Du weißt zwar nicht, wer in
200 Jahren unter deinem Baum sitzen wird, aber mit dem Pflanzen des Baumes tust du
etwas für deine Nachwelt. Behalte deine Gedanken nicht für dich, sondern schreibe sie
auf. Du weißt zwar nicht, wer dein Buch einmal lesen wird, aber du hast etwas
hinterlassen, was ein Baustein im Denken eines anderen Menschen sein könnte." von
Armin Assmann aus dem Buch „der Erntewagen“
Danke Annemarie und Ferdinand, dass ich all die eben erwähnten Dinge ohne größere
Probleme vollbringen konnte.
Inhaltsverzeichnis:
1. Einleitung...................................................................................................................... 1
1.1.
1.2.
Motivation......................................................................................................................... 1
Strukturierung der Arbeit .................................................................................................. 3
I Untersuchungsbereich ........................................................5
2. Einführende Betrachtungen........................................................................................ 7
2.1.
2.2.
2.3.
2.4.
Einleitung.......................................................................................................................... 7
Informationsaufkommen im Internet ................................................................................ 7
Resource Discovery ........................................................................................................ 10
Schlussbemerkung .......................................................................................................... 11
3. Verteilte Informationsstrukturen............................................................................. 13
3.1.
3.2.
3.3.
3.4.
3.5.
Einleitung........................................................................................................................ 13
Begriffsbestimmungen .................................................................................................... 13
Architekturen verteilter Informationsstrukturen ............................................................. 15
3.3.1. Anforderungen an verteilte Informationsstrukturen: ......................................... 17
3.3.2. Anwendungen für verteilte Datenverwaltung.................................................... 18
Remote Procedure Call in der Kommunikationsschicht ................................................. 20
Schlussbemerkung .......................................................................................................... 23
4. Verteilte Anwendungen ............................................................................................. 25
4.1.
4.2.
4.3.
4.4.
4.5.
4.6.
4.7.
4.8.
4.9.
Einleitung........................................................................................................................ 25
Topologien verteilter Anwendungen............................................................................... 26
Transaktionen.................................................................................................................. 30
Verteiltes Dateisystem .................................................................................................... 33
4.4.1. Network File System NFS................................................................................. 33
4.4.2. Andrew File System .......................................................................................... 33
Objektorientiertes verteiltes System - Komponentenarchitektur..................................... 36
Client-Server versus Peer-To-Peer.................................................................................. 41
Middleware als Basiskomponente für verteilte Anwendungen....................................... 43
4.7.1. Allgemeine Betrachtung .................................................................................... 44
4.7.2. DCE ................................................................................................................... 45
4.7.3. COM.................................................................................................................. 48
4.7.4. DCOM ............................................................................................................... 51
4.7.5. .NET .................................................................................................................. 54
4.7.6. mono::................................................................................................................ 56
4.7.7. Java 2 Plattform - J2EE ..................................................................................... 56
4.7.8. Open Net Environment - ONE .......................................................................... 59
4.7.9. Dino - Dinopolis ................................................................................................ 62
Web Service Architektur (WSA) .................................................................................... 66
4.8.1. UDDI ................................................................................................................. 67
4.8.2. WSDL................................................................................................................ 69
Schlussbemerkung .......................................................................................................... 70
5. Transport Protokolle ................................................................................................. 73
5.1.
5.2.
5.3.
5.4.
Standardisierung ............................................................................................................. 73
Allgemeines .................................................................................................................... 76
Z39.50 ............................................................................................................................. 77
XML-Grundlagen ........................................................................................................... 79
5.4.1. DOM.................................................................................................................. 79
5.4.2. SAX ................................................................................................................... 80
5.4.3. DTD................................................................................................................... 80
5.4.4. XML-Schema .................................................................................................... 80
5.4.5. XSLT - Stylesheets............................................................................................ 81
5.4.6. XML Verknüpfungstechnologien: XLink / XPointer / XPath ........................... 81
5.4.7. XHTML............................................................................................................. 81
5.5. BEEP............................................................................................................................... 82
5.6. XML-RPC....................................................................................................................... 84
5.7. ebXML............................................................................................................................ 85
5.8. SOAP .............................................................................................................................. 86
5.9. Jabber .............................................................................................................................. 89
5.10. JXTA Protokolle ............................................................................................................. 92
5.11. Schlussbemerkung .......................................................................................................... 94
6. Verteilte Suchsysteme................................................................................................ 97
6.1.
6.2.
6.3.
6.4.
6.5.
6.6.
Freenet ............................................................................................................................ 97
FASD ............................................................................................................................ 100
JXTA............................................................................................................................. 101
Harvest .......................................................................................................................... 105
xFIND ........................................................................................................................... 106
Schlussbemerkung ........................................................................................................ 109
II Gestaltungsbereich ..........................................................111
7. xFIND Kommunikationsarchitektur...................................................................... 113
7.1.
7.2.
7.3.
7.4.
7.5.
7.6.
7.7.
7.8.
Einleitung...................................................................................................................... 113
xFIND Konfiguration.................................................................................................... 114
xFIND Kommunikation ................................................................................................ 115
xFIND Datenübertragung ............................................................................................. 119
Beschreibung der xFIND QCF-Datenpakete ................................................................ 120
Testimplementierung – Client-Server Simulation......................................................... 121
xFIND Benchmark Tests .............................................................................................. 122
Schlussbemerkung ........................................................................................................ 125
8. Analyse des Protokolls BEEP ................................................................................. 127
8.1.
8.2.
8.3.
8.4.
8.5.
8.6.
Aufbau der BEEP Kommunikation............................................................................... 127
BEEP Testimplementierung.......................................................................................... 131
BEEP Benchmark Tests ................................................................................................ 132
xFIND Objekte in BEEP serialisieren........................................................................... 136
BEEP im Vergleich mit der xFIND-Kommunikationsschicht ...................................... 137
Schlussbemerkung ........................................................................................................ 140
9. Analyse des JXTA Protokoll-Frameworks ............................................................ 141
9.1.
9.2.
9.3.
9.4.
9.5.
Beschreibung der JXTA-Core Protokolle ..................................................................... 142
9.1.1. Peer Discovery Protokoll (PDP)...................................................................... 144
9.1.2. Information Protokoll (PIP)............................................................................. 145
9.1.3. Pipe Binding Protokoll (PBP).......................................................................... 146
9.1.4. Peer Resolver Protokoll (PRP) ........................................................................ 148
9.1.5. Rendezvous Protokoll (RVP) .......................................................................... 149
9.1.6. Endpoint Routing Protokoll (ERP).................................................................. 149
Aufbau von JXTA Advertisements ............................................................................... 151
9.2.1. Peer Advertisement ......................................................................................... 152
9.2.2. Peer Group Advertisement .............................................................................. 152
9.2.3. Module Class Advertisement........................................................................... 153
9.2.4. Module Specification Advertisement .............................................................. 153
9.2.5. Module Implementation Advertisement .......................................................... 154
9.2.6. Implementierung von Advertisements............................................................. 155
Einsatz von JXTA Services........................................................................................... 156
xFIND JXTA Testimplementierung ............................................................................. 156
Schlussbemerkung ........................................................................................................ 161
10. Verbesserungsvorschläge für das xFIND System ................................................. 163
10.1.
10.2.
10.3.
10.4.
10.5.
xFIND Konfiguration.................................................................................................... 163
xFIND interne Kommunikation .................................................................................... 164
xFIND externe Kommunikation ................................................................................... 165
xFIND Architektur........................................................................................................ 166
Schlussbemerkung ........................................................................................................ 167
11. Zusammenfassung.................................................................................................... 169
III Anhang ..............................................................................173
12. QCF-Spezifikation ................................................................................................... 175
12.1. Allgemeines .................................................................................................................. 175
12.2. Übersicht über die QCF-Keys....................................................................................... 177
13. xQMS Spezifikation ................................................................................................. 190
14. Profiling Analyse Ergebnisse .................................................................................. 191
14.1.
14.2.
14.3.
14.4.
14.5.
Call Graph xFIND Client.............................................................................................. 191
Call Graph xFIND Manager.......................................................................................... 191
Call Graph BEEP Client N-N ....................................................................................... 192
Call Graph BEEP Daemon N-N.................................................................................... 192
Call Graph BEEP Client N-TLS ................................................................................... 193
15. Verzeichnisse ............................................................................................................ 194
15.1.
15.2.
15.3.
15.4.
15.5.
Tabellenverzeichnis ...................................................................................................... 194
Listingverzeichnis ......................................................................................................... 194
Abbildungsverzeichnis.................................................................................................. 195
Numerische Aufzählung von RFC Referenz Dokumenten ........................................... 197
Literatur und Quellenverzeichnis.................................................................................. 198
Seite 1
Kapitel 1
1.
Einleitung
1.1.
Motivation
Information wird immer stärker zu einem entscheidenden Wettbewerbsfaktor mit
strategischer Dimension. Dennoch entspricht Information nicht zugleich auch Wissen.
Nur wer Zugriff auf Informationen zum richtigen Zeitpunkt und am richtigen Ort hat,
kann daraus Wissen ableiten bzw. Wissen erzeugen. Dies kann schon auf jeden Einzelnen
in seinem persönlichen Umfeld zutreffen und wirkt sich insbesondere auf
Unternehmenseinheiten und Organisationen aus. Wer klare Strategien verfolgen kann, um
aus abrufbarer Information Wissen zu erzeugen, kann auch den nötigen Vorsprung in der
Informationsgesellschaft erzielen.
In der Studie „How Much Information1“ von Peter Leyman und Hal R. Varian wird
die derzeitig verfügbare Informationsmenge2 mit 12 Exabyte beziffert. Pro Jahr3 werden
laut der Studie ca. 1.5 Exabyte an neuen Daten (ohne Duplikate) produziert. Die Studie
besagt auch, dass 99,97% des jährlichen Informationsaufkommens in digitaler Form
produziert wird. In der heutigen Informationsgesellschaft wird der Einsatz des Internet als
Informationsträger und als Informationsvermittler (Transportmedium) vermehrt
eingesetzt. Der Zugriff auf die Informationen kann über synchrone und asynchrone
Vermittlungsmethoden erfolgen. Eine Unterscheidung in der Informationsaufbereitung
erfolgt auch aufgrund verschiedener Anforderungen der Zielgruppen, Mensch oder
Maschine. Dabei steht der einfache Zugriff auf die Informationen dem Problem der
Informationsflut gegenüber. Das World Wide Web (WWW) bietet mit dem Erscheinen
der Studie Zugriff auf mehr als 2.5 Milliarden Dokumenten an und wächst um 7.3
Millionen Seiten täglich. Dabei wird unterschieden zwischen quasi statischen
Informationen (Surface Web) und dynamischen Informationen (Hidden Web), die durch
Interaktion durch einen Benutzer erstellt werden (z.B. Eingabeformular, als Resultat
dynamische Ergebnisseite).
1
2
3
siehe http://www.sims.berkeley.edu/how-much-info
Die Informationen sind auf verschiedenen Medien gespeichert: Papier (Bücher, Zeitschriften, Statistiken, Office
Dokumente), Film (Foto, Zelluloid, Röntgenbilder), Optisch (Musik CD, Daten CD, DVD), Magnetisch (Datenbänder,
Festplatten)
Die Studie ist aus dem Jahr 2000. Entsprechend sollen die Zahlen nur die Größenordnungen darstellen [Anmerkung
des Autors]
Seite 2
Kapitel 1 - Einleitung
Information wird durch Medien und Telekommunikationsgeräten produziert,
empfangen und verarbeitet. Über entsprechende Verteilungsmechanismen ist es ein
Leichtes, Informationen technisch einem breiten Anwenderkreis zur Verfügung zu
stellen. Zudem stellt der Wunsch einer kontinuierlichen Informationsvermittlung
(Mobile,Wearable-Computing)
auch
neue
Anforderungen
an
die
Informationsbereitsteller. Die „richtige“ Information im „richtigen“ Umfang zu
vermitteln sind eine große Herausforderung und teilweise ungelöste Probleme bei der
Informationsauffindung und der Informationsvermittlung.
Eine Informationsüberflutung verursacht neben größerem Verwaltungsaufwand auch
häufig negativen Stress4. Um der Informationsüberflutung Einhalt gebieten zu können, ist
es wichtig, systematisches Wissensmanagement zu betreiben. Um aus der Vielzahl von
Informationen gezielt Wissen gewinnen zu können, müssen spezielle Verfahren mit Hilfe
von Filter-Mechanismen strukturiert und selektiv eingesetzt werden. Metadaten als
zusätzliche Entscheidungskriterien werden z.B. in personalisierten Nachrichtendiensten
oder gängigen Metasuchmaschinen ausgewertet.
„Die Informationsexplosion ist nicht das Problem; streng genommen gibt es keine
Informationsflut, sondern nur eine der Medienwirklichkeit unangemessene
kulturtechnische Praxis.“ [Hartmann 1999]
Die Aussage von Frank Hartmann bringt eine weitere Problematik zu Tage. Es werden
jegliche Informationen digitalisiert und zumeist unstrukturiert abgelegt. Hauptsache die
Daten sind irgendwo und in irgendeiner Form gespeichert. Dass man aber gleichzeitig
einen gezielten Zugriff auf die Daten zur Verfügung stellt, ist dabei leider oft nicht von
Relevanz. D.h. die technologischen Voraussetzungen zur Datenerzeugung,
Datenspeicherung und Datenauffindung sind bereits vorhanden, jedoch fehlt es am
notwendigen Verantwortungsbewusstsein die Technologien entsprechend ihrer
Einsatzbereiche zu nutzen.
Die Speicherung und Verbreitung von großen Datenmengen ist in der heutigen Zeit
problemlos möglich. Problembereiche wie die stetige Wachstumsrate des
Datenvolumens, eine gemeinsame Nutzung von freien und kostenpflichtigen Diensten,
die Verteiltheit (Informationen oder allgemein Ressourcen), der Einsatz verschiedener
Medien, verschiedene Sprachen, verschiedene Benutzerkreise (geschützter Zugriff) und
diverse Kombinationen erschweren jedoch den schnellen Zugriff auf diese Datenmengen.
In weiterer Folge ist auch eine gezielte Suche nach relevanten Informationen für den
Einzelnen nur unter gewissen Rahmenbedingungen möglich. Mögliche Lösungen wären
eine Adaption der Suchdienste hinsichtlich ihrer Informationsabdeckung
(themenspezifische Auswahl) und eine Anpassung in der Suchmethodik. Einen weiteren
Problembereich stellt das „Vertrauen in die Information“ bzw. deren Gültigkeit oder
Aktualität dar. [Gütl 2002]
Die Verarbeitung der vielfältigen Informationen in unterschiedlichsten
Repräsentationen ist aus genannten Gründen nicht mehr von zentralen Stellen aus zu
bewältigen. Vielmehr sind intelligente Suchsysteme gefragt, die verteilte Dienste und
Applikationen verschiedener Hersteller nutzen können. Dabei geht es nicht immer nur um
herkömmliche Suchdienste in den gegenwärtig bekannten Formen. Vermehrt sollen auch
Übersetzungsdienste, Klassifizierungsdienste und weitere Dienste aus andern Bereichen
4
Stress ist für den Organismus nicht immer nur als negativ zu bewerten. In der Stressforschung wird zwischen
positivem, vitalisierendem, lebensnotwendigem Stress (Eustress) und negativem, schädlichem, Lebens zerstörendem
Stress (Distress) unterschieden [http://www.moreee.de/info_auswirkung.html].
Seite 3
zur verbesserten Informationsauffindung zum Einsatz kommen. So ist unter anderem
auch die Zusammenarbeit oder die Kombination von kommerziellen und nicht
kommerziellen Diensten als weiteres Ziel eines selektiven Datenzugriffs wünschenswert
und möglich. [Gütl 2002]
Die Zusammenarbeit verschiedener Dienste im Allgemeinen, kann jedoch nur erreicht
werden, wenn die anzusprechenden Systemteile über bekannte, standardisierte
(technologisch
anerkannt,
siehe
dazu
Abschnitt
5.1
Standardisierung)
Kommunikationsschnittstellen verfügen. Die Auswahl aus einem Pool an speziellen
Systemdiensten könnte auch bestimmten Benutzerkreisen einen speziellen thematischen
Zugriff auf die Informationen in geregeltem Umfang ermöglichen; siehe auch [Gütl
2002]. Zusätzliche Intelligenz zum automatisierten Auffinden möglicher geeigneter
Dienste erleichtert den strategischen Zugriffsprozess auf die Daten für einen größeren
Anwenderbereich. Dies beinhaltet die Suche nach entsprechenden Diensten und
Komponenten anhand deren spezifischer Eigenschaften. Systeme könnten ihrerseits die
Dienste anhand charakteristischer Eigenschaften gezielt in einer Umgebung anbieten.
Eine Erweiterung der Kommunikationsschicht würde die Anbindung dieser Dienste
ermöglichen. Sicherheitsaspekte in der Übertragung der Daten spielen neben einem
automatisierten Datenzugriff eine weitere wichtige Rolle. Eine verteilte Umgebung bietet
mehr Angriffsmöglichkeiten als zentral verwaltete Systeme. Datenkonsistenz in
Verbindung mit sicheren Übertragungsmechanismen sind weitere wichtige
Anforderungen an moderne Übertragungstechnologien. [Gütl 2002]
Ziel dieser Arbeit ist es, geeignete Übertragungsmechanismen für verteilte
Informationssysteme zu finden. Insbesondere gilt das Augenmerk auf die Unterstützung
standardisierter Übertragungsprotokolle bei der modernen Wissensauffindung. Hierzu
werden Mechanismen der Informationsübertragung und Informationsauffindung für
verteilte Systeme untersucht. Basierend auf diesen Erkenntnissen wird eine geeignete
Auswahl getroffen, um die Übertragungsschicht des xFIND Suchsystems erweitern und
verbessern zu können.
1.2.
Strukturierung der Arbeit
Die vorliegende Arbeit gliedert sich in einen Untersuchungsbereich und einem
Gestaltungsbereich auf. Im Untersuchungsbereich werden in den Kapiteln 2 bis 6 verteilte
Informationsstrukturen zur modernen Wissensauffindung im Internet diskutiert. Die
Thematik reicht von der Darstellung grundlegender Problematiken des stetig steigenden
Informationsaufkommens und deren Verarbeitung bis hin zu modernen Lösungsansätzen
der verteilten Datenverarbeitung. Im Gestaltungsbereich werden geeignete Technologien
zur Erweiterung des xFIND Suchsystems anhand diverser Testimplementierung
analysiert. Mit der Erweiterung der Transportschicht will man einerseits eine breitere
Akzeptanz erreichen und andererseits bestehende Dienste nutzen bzw. in weiterer Folge
auch Dienste über das Internet anbieten.
Um ein Grundverständnis für die Wissensauffindung im Internet zu bekommen, wird
im Kapitel 2 das Informationsaufkommen im Internet und deren Verbreitung über
Netzwerke untersucht. Des Weiteren werden mittels Möglichkeiten von Ressource
Discovery Systemen die Verarbeitung verteilter Informationen mit Webbasierten
Technologien beschrieben
Seite 4
Kapitel 1 - Einleitung
In Kapitel 3 wird näher auf konzeptionelle Ansätze der Datenverwaltung, wie verteilte
Informationsstrukturen und Architekturansätze eingegangen. Ausgehend von
Begriffsbestimmungen verteilter Informationsstrukturen werden allgemein gültige
Anforderungen an verteilte Architekturen abgeleitet. Zum Abschluss des Kapitels wird
eine Basistechnologie der verteilten Informationsübertragung, Remote Procedure Calls
(RPC), vorgestellt.
Zu Beginn des Kapitels 4 werden Topologie–Formen vorgestellt, um verteilte
Informationsstrukturen und Architekturen theoretisch abbilden zu können. In weiterer
Folge werden verschiedene Möglichkeiten zur Umsetzung von Topologie-Formen
beschrieben. Dazu gehören funktionale Ansätze, objektorientierte Ansätze, den Einsatz
von Komponenten Architektur und Peer-to-Peer (P2P) Technologien. Die theoretischen
Ansätze verteilter Informationsverarbeitung werden im Anschluss in einem Überblick
über Middleware Lösungen näher untersucht.
Ausgehend von Erkenntnissen aus dem Überblick Middleware Lösungen) wird in
Kapitel 5 eine Auswahl an standardisierten Übertragungsprotokollen vorgestellt, die
„historische“ Protokolle (z.B. Z39.50) und moderne XML-basierte Ansätze (z.B. SOAP)
enthält. Als einleitender Abschnitt des Kapitels 5 wird das Thema Standardisierung für
Hilfestellungen bei der Entwicklung von Software behandelt.
Kapitel 6 gibt einen Überblick über verteilte Suchsysteme und bildet den Abschluss
des Untersuchungsteiles. In Rückschluss auf Kapitel 5 werden die geeignetsten
Technologien zur Erweiterung des xFIND-Suchsystems ausgewählt und im
Untersuchungsbereich näher analysiert.
In Kapitel 7 wird die xFIND Kommunikationsarchitektur analysiert. Dabei werden vor
allem
die
vorhandenen
Problembereiche
aufgezeigt.
Eine
Benchmark
Testimplementierung wird zur Gewinnung von Performancedaten herangezogen. Diese
Testdaten
dienen
als
Ausgangsbasis
für
Vergleiche
mit
anderen
Übertragungstechnologien.
Kapitel 8 analysiert das Datenübertragungsprotokoll BEEP. Dabei wird näher auch
den technischen Aufbau und der Datenübermittlung eingegangen. In einer
Testimplementierung werden wiederum Benchmark Tests zur Gewinnung von
Performancedaten eingesetzt. Der direkte Vergleich von BEEP mit xFIND zeigt die
Vorteile und Nachteile beider Technologien auf.
Als zweite Technologie wird das JXTA Protokoll Framework in Kapitel 9 näher
untersucht. Insbesondere gilt die Aufmerksamkeit der selbstorganisierenden Eigenschaft
dieser Peer-to-Peer Technologie. Anhand von zwei Testimplementierungen wird die
einfache Verwendung der JXTA Module aufgezeigt.
Im letzten Kapitel des Gestaltungsteiles werden Vorschläge zur Verbesserung des
xFIND Systems erstellt. Um eine Differenzierung zu erreichen werden die Vorschläge
thematisch getrennt in Konfiguration, Kommunikation und Architektur.
Im Anhang ist die xFIND QCF und XQMS Spezifikation beigefügt. Zusätzlich sind
Profiling Daten der xFIND und BEEP Benchmarktests ersichtlich. Auch die Aufzählung
der referenzierten RFC-Dokumente, sowie ein Abbildungsverzeichnis und ein
Tabellenverzeichnis sind im Anhang ersichtlich. Abschließend ist eine vollständige
Literaturliste in alphabetischer Reihenfolge enthalten.
Seite 5
I
Untersuchungsbereich
Seite 6
Seite 7
Kapitel 2
2.
Einführende Betrachtungen
2.1.
Einleitung
Ziel des Kapitels ist es, Problembereiche der verteilten Informationsverarbeitung im
Hinblick auf Erzeugung, Verbreitung und Auffindung von Information und Diensten
darzustellen. Die ständig wachsende Informationsflut und die Verteilung der Information
bringen an sich bereits viele Probleme mit sich. Zudem werden die Informationseinheiten
oft dynamisch erzeugt und liegen in verschiedenen Formaten bzw. Medien oder
Sprachversionen vor. Entsprechend müssen geeignete Werkzeuge und Mechanismen zur
Informationsverarbeitung und Informationsauffindung bereitgestellt werden.
Im Bereich der Informationsauffindung kommt es einerseits darauf an, gezielt nach
bestimmten Informationsbereichen zu suchen bzw. zuzugreifen und andererseits möchte
man gleichzeitig auch weitere unterstützende Dienste (z.B. Übersetzungsdienste,
Klassifizierungsdienste) nutzen. Dies setzt jedoch voraus, dass Dienste und
Anwendungen über geeignete Kommunikationsschnittstellen verfügen. Liegen diese etwa
standardisiert vor, ist es möglich, einzelne Dienste zu koppeln bzw. diese einem größeren
Anwendungsbereich zur Verfügung zu stellen.
Im ersten Abschnitt dieses Kapitels soll der große Problembereich des
Informationsaufkommens im Internet beschrieben werden. In Überleitung zu
Möglichkeiten der verteilten Informationsverarbeitung im Internet wird im Abschnitt
Resource Discovery der Zusammenhang von Informations-Diensten mittels WebServices dargestellt
2.2.
Informationsaufkommen im Internet
In den vergangenen Jahren gab es eine rasche Zunahme der Anzahl an PCs und
Workstations in Local-Area und Wide-Area Netzwerken. Ebenso nahm die Anzahl an
Mobile Computing Geräten rasant zu. Dies bewirkte neben dem steigenden
Informationsaufkommen auch eine Änderung in der Datenspeicherung, der
Datenverteilung, der Datenpräsentation sowie in der Auffindung von relevanten Daten
und Diensten. Netze, die die Grundlage der Kommunikation darstellen, sind nur Teil
eines vollständigen Distributed Computing Environment. Die Bedeutung von verteilten
Systemen stieg in erster Linie aufgrund der Senkung von Produktionskosten im
Hardwarebereich (Speicherkomponenten und Prozessoren) und dem Ausbau der
weltweiten Netzwerkverbindungen. [Cailliau 1995] [Leiner et al. 2000]
Seite 8
Kapitel 2- Einleitung
Neue Entwicklungen im Bereich der Netzwerktechnologie (z.B. ATM5, ADSL6,
XDSL7) lassen eine bessere Verfügbarkeit und eine Erzielung höherer Bandbreiten zu.
Die technischen und materiellen Fähigkeiten der Zusammenarbeit (Interoperabilität) in
solchen verteilten Systemen ermöglichen den Zugriff auf Daten unabhängig von Ort und
Zeit.
Das
Internet
als
multifunktionale
und
weltweit
verfügbare
Kommunikationsplattform hat sich sowohl im Business-to-Consumer-Bereich (B2C) als
auch im Business-to-Business-Bereich (B2B) durchgesetzt. Die Nachrichtenvermittlung
erfolgte in den Anfängen des Internets über gezielte Zugriffe (browsen, E-Mail, etc.) auf
Datenbestände (Standort), die von speziellen Informationsdiensten bereitgestellt wurden.
[Cailliau 1995] [Leiner et al. 2000]
Ein wesentliches Merkmal des Internet ist, dass es nicht von einem Betreiber zentral
organisiert und betrieben wird, sondern aus einer Vielzahl von dezentral verwalteten, aber
untereinander verbundenen Teilnetzen besteht. Sehr streng müssen hierbei die weltweit
eindeutigen Adressierungsvorschriften sowie die TCP/IP Protokollspezifikationen
eingehalten werden, um die Kompatibilität sicher zu stellen. Hieraus resultieren neben
den Vorteilen der Internationalität und geringen Kosten auch die Nachteile einer sehr
heterogenen Netzqualität (z.B. Performance und Sicherheit). Die Einsatzbereiche reichen
dabei von der simplen Bereitstellung multimedialer Unternehmens spezifischer
Informationen und die Verwendung von E-Mail als Nachrichtendienst bis hin zu OnlineShopping-Systemen und anderen Web basierten Diensten. Als geeignete Maßnahmen
gegen Sicherheitslücken in der Internet-Architektur, insbesondere beim Austausch
sensibler Daten, werden verschiedene Verschlüsselungs-Mechanismen, elektronische
Unterschrift oder die Verwendung von Firewalls eingesetzt. Das stetige Wachstum der
Netzwerke bzw. die damit aufkommende Informationsflut (siehe Abbildung 2.1 und
Tabelle 2.1) bereitet herkömmlichen zentralen Ansätzen in der Informationsverarbeitung
(Software) immer mehr Probleme. Die weltweite Vernetzung von Computern und deren
Anbindung an das Internet, impliziert auch eine Vernetzung der gespeicherten Daten.
[Zakon 2002]
Abbildung 2.1: Wachstum des Internet (Anzahl an Webseiten) [Zakon 2002]
5
6
7
ATM steht für Asynchronous Transfer Mode und basiert auf Punkt-zu-Punkt-Verbindungen. Vorteile sind eine gute
Skalierbarkeit, Datenübetragung in Echtzeit und gut kontrollierbare Datenströme.
ADSL steht für Asymmetric Digital Subscriber Line und ist eine Breitbandtechnologie. ADSL benutzt die
herkömmlichen Kupferdrähte des Telefonnetzes trennt Sprache von Daten. Die Datenübermittlung erfolgt
asymmetrisch.
XDSL ist der Oberbegriff für Technologien, die Telefonkabel für den digitalen Datenverkehr nutzen. X ist eine Variable
und kann statt "A" auch beispielsweise für ein "S" (Symmetrical Digital Subscriber Line) stehen.
Seite 9
January 2002 December 2002
Growth
Hostnames
36,689,008
35,543,105
-3.12%
Active Sites
14,134,142
16,629,876
17.66%
3,801,101
4,007,918
5.44%
IP Addresses with Scripting Languages
612,420
931,468
52.10%
SSL Servers
153,072
174,745
14.16%
IP Addresses
Tabelle 2.1: Internet Wachstumsrate Jahr 2002 (http://www.netcraft.com/survey)
Die Wandlung des Internet vom Status des reinen „Informationsbereitsteller“ zu einem
interaktiven Medium bezeugen Schlagworte wie B2C, B2B oder auch Web-Services.
Speziell das Angebot an verteilten Diensten nimmt in letzter Zeit aufgrund der
Entwicklung neuer Technologien rasant zu. Die Informationsauffindung im WWW wird
durch Suchmaschinen wesendlich erleichtert. Entsprechend müssen auch die Wege der
Informationsauffindung, im Speziellen die Suche, den neuen Gegebenheiten angepasst
werden. Suchdienste die nur reine Textinhalte indizieren und filtern sind veraltet und
können gegenwärtige und künftige Anforderungen nicht mehr abdecken. Multimediale
Suchfähigkeiten oder Ähnlichkeitssuche (unter Verwendung von z.B. Word Stemming8)
bzw. Spracherkennung (Language Guessing) und Anforderungen aus dem Bereich
Resource Discovery, erfordern neben Adaptionen in der Suchmethodik (verteilte Suche,
mobile Agenten, Peer-to-Peer) auch eine Anpassung der Übertragungsprotokolle. [Gütl
2002]
Insbesondere im Bereich Verteilter Suchsysteme ist der Einsatz standardisierter
Übertragungsprotokolle von großer Bedeutung, So können Dienste verschiedener
Suchsysteme kombiniert werden, um deren spezielle Eigenschaften nutzen zu können.
Ein wichtiger Grund Suchsysteme bzw. deren Dienste zu verteilen ist, eine bessere
Skalierbarkeit bezüglich gezielter themenspezifischen oder medienspezifischer
Informationen zu erlagen. Nur ein Bruchteil aller verfügbaren Informationen kann von
einem Suchsystem abgedeckt werden. Die durchschnittliche Lebensdauer (Veränderung,
Ortswechsel, dynamischer Inhalt) einer Webseite von weniger als 70 Tage bringt
zusätzliche Probleme. Weiters ist ein Großteil des Datenbestandes in Datenbanken
gespeichert und nur über dynamische Datenaufbereitung mittels Interaktion abrufbar.
Hier scheitern gängige Suchsysteme zur Gänze. Web Archive stellen auch keine Lösung
für dieses Problem dar (siehe auch [Lackner et al. 2001]). Der Zugang zu diesen
Datenbeständen über Web-Services wäre eine Möglichkeit diese Datenbestände auch
allgemein nutzbar zu machen. In weiterer Folge kann mit Hilfe von Web-Services auch
die Migration von Systemumgebungen erleichtert werden. Anwendungen die dieser
Themenzuordnung genügen, werden dem Bereich Resource Discovery zugeordnet, auf
welche speziell im nächsten Abschnitt eingegangen wird. [Gütl 2002]
8
berücksichtigt verschiedene grammatische Formen und Schreibweisen eines Suchbegriffes
Seite 10
2.3.
Kapitel 2- Einleitung
Resource Discovery
Informationsverarbeitung im Sinne von Resource Discovery bedeutet das Anbieten
von Informationen bzw. Diensten und das Konsumieren von Informationen bzw.
Diensten. Resource Discovery Systeme aus dem Internetbereich stehen oft in
Zusammenhang mit informations- verarbeitenden Systemen des WWW. Die
identifizierten Problembereiche, die aus dem stetig steigenden Informationsaufkommen
entstehen, sollen mit Hilfe geeigneter Maßnamen minimiert werden. Dazu gehören unter
anderem die gezielte Auffindung von Information bzw. Diensten oder das Anbieten von
gekapselter Informationsbereiche und entsprechender Dienste. [Gütl 2002]
Der Begriff Resource Discovery im Generellen umfasst Bereiche wie das Auffinden,
Verwalten und Abrufen von Ressourcen in verteilten Systemumgebungen. Als Ressource
werden alle realen oder abstrakten Objekte bezeichnet, die in irgendeiner Form Daten
sowie Informationen verarbeiten können. Der Begriff Discovery im Speziellen beschreibt
Mechanismen, die das Auffinden und Abrufen von Ressourcen ermöglichen. In
Abbildung 2.2 wird Discovery als Vermittler zwischen Informations-Produzent und
Konsument dargestellt. Produzenten oder Informationsanbieter werden als Content
Provider dargestellt, Informationskonsumenten sind mit Content Seeker bezeichnet, die
Rolle des Vermittlers stellen Discovery Services zur Verfügung. Somit ist ein
kontinuierlicher gerichteter Informationsfluss gegeben. [Gütl 2002]
Abbildung 2.2: Discovery vermittelt zwischen Dienstleister und Konsument [Ianella 1997]
Beispiele für Discovery Services wären spezielle Such-Agenten (eigenständig
handelnde Dienste), die im Netzwerk unabhängig voneinander Daten bzw. Informationen
sammeln und diese dem Auftraggeber zur Verfügung stellen. Es geht aber nicht immer
nur um die Auffindung von Daten bzw. Informationen, sondern auch um das zur
Verfügung stellen unterstützender Dienste. Dazu gehören etwa Hintergrundbibliotheken,
Übersetzungsdienste oder aktive Dienste die persönliche Profile erarbeiten. Der in
Discovery Services bezeichnete Informationsfluss stellt eine Art Informationsaustausch
zwischen den beteiligten Gruppierungen dar. Soll der Informationsaustausch über das
Internet standardisiert abgewickelt werden, müssen so genannte Web-Services geeignete
Schnittstellen und Zugänge zu den Ressourcen bereitstellen. Durch das Zusammenführen
themenspezifisch ähnlicher Dienste, kann eine Spezialisierung in verschiedene
Fachbereiche erfolgen. Seit dem kommerziellen Erfolg des MP3 Dienstes Napster, mit
dem der Austausch von Musikdaten über das Internet über spezielle Clients und
Webseiten ermöglicht wurde, wird die Entwicklungsarbeit von Peer-to-Peer
Technologien stetig forciert. Die Problematik der Copyright und Nutzungsverletzungen
privater und kommerzieller Informationen werden durch den Einsatz gängiger
Seite 11
Datenaustauschsysteme zusätzlich verschärft. Die Erarbeitung von Sicherheitsaspekten
und die Unterstützung in der Auffindung und Indizierung multimedialer Daten stellen
weitere Anforderungen an neue Entwicklungen. [Gütl 2002]
Als Resultat dieser Forschungen und Entwicklungsarbeit setzten sich vermehrt WebFrameworkansätze durch. Einerseits wird durch den Einsatz von WebFrameworkansätzen die Entwicklungsarbeit „schlanker“ netzwerkfähiger Dienste
erleichtert und andererseits erreicht man eine bessere Skalierbarkeit des Gesamtsystems.
Dies bezeugen nicht zuletzt Entwicklungen wie .NET von Microsoft oder ONE (Open
Network Environment) von SUN Microsystems. Dabei wird versucht, auf
Standardprotokolle und Standarddienste aufzubauen, um neben Portabilität und
Akzeptanz auch eine weite Verbreitung der Applikationen und Dienste zu erreichen. Um
eine Kombination von kommerziellen Diensten und nicht kommerziellen Diensten zu
ermöglichen, muss gewährleistet sein, dass Standards verwendet und eingehalten werden.
[Weber 1998]
2.4.
Schlussbemerkung
Mit der Zunahme an diversen Endgeräten und dem Netzwerkausbau steigerte sich
auch das Informationsaufkommen im Internet. Zudem liegt eine große Verteiltheit der
Informationen vor. Diese Problematiken führen zu erschwerter und nicht zielgerechter
Informationsauffindung. Gängige Suchsysteme können einerseits kaum das ganze
Informationsspektrum abdecken und andererseits liefern sie sehr viele, zum Teil
unbrauchbare Informationen. Gegen diesen Trend arbeiten spezifisch angepasste
Suchsysteme, die gezielt nur thematisch oder medienspezifisch eingeschränkte
Informationsbereiche abdecken. Jedoch unterstützen diese Systeme keine allgemein
gültigen Abfragemechanismen oder verfügen über keine entsprechend standardisierten
Kommunikations-Schnittstellen. Der Mangel an Unterstützung standardisierter
Technologien verhindert auch die Kombination diverser Systeme. Ohne Security Checks,
Echtheitszertifikate oder auf bestimmte Benutzer eingeschränkte Zugriffe, ist es
ungewiss, ob die gelieferten Informationen vertrauenswürdig sind. Nicht immer ist es
erforderlich bestehende Technologien zu verwerfen. Im Migrationsprozess kann in einem
ersten Schritt die Kommunikationsschicht dahingehend erweitert werden, dass z.B.
Dienste über so genannte Web Services angeboten werden. In weiterer Folge kann durch
zusätzliche Maßnahmen das automatisierte Aufsuchen und Anbieten diverser Dienste
erfolgen.
Aus diesen Erkenntnissen ergeben sich folgende Schlussfolgerungen: Die
Kommunikationsschnittstelle muss an die entsprechend eingesetzte Technologie
angepasst werden. Die Kommunikationsschnittstelle sollte recht allgemein entworfen
werden, sodass verschiedene Standards unterstützt werden können. In Bezug auf die zu
übertragenen Daten (medienabhängig) sollten auch Performance Aspekte beim Entwurf
miteinbezogen werden. Um die Echtheit der Daten gewährleisten zu können, müssen
entsprechende Datenschutz Mechanismen, bzw. die Unterstützung einer
Zugriffskontrolle integriert werden.
Verschiedene Frameworkansätze bieten hierzu bereits viele Basisfunktionalitäten an.
In Anlehnung und Ausnützung dieser Technologien und unter Berücksichtigung bereits
bewährter Middleware Lösungen bzw. Multi-Tier Architekturen können einfache,
schlanke und skalierbare Schnittstellen erzeugt werden. Die Einhaltung von Standards
führt nicht zuletzt neben einer besseren Portabilität auch zu größerer Akzeptanz.
Seite 12
Kapitel 2- Einleitung
In den nun folgenden Kapiteln wird versucht, Eigenschaften von verteilten Systemen
zu charakterisieren. Anhand dieser Eigenschaften sollen bestehende Modelle evaluiert
werden und geeignete Vorschläge zur Verbesserung bzw. Erweiterung der
Kommunikationsschicht des xFIND-Suchsystems gefunden werden. Die interessantesten
Vorschläge werden im Gestaltungsteil beispielhaft umgesetzt und einander gegenüber
gestellt.
Seite 13
Kapitel 3
3.
Verteilte Informationsstrukturen
3.1.
Einleitung
Allgemeine Problembereiche in der Informations-Aufbereitung, der InformationsVerteilung, der Informations-Übertragung und insbesondere bei der Suche nach
Informationen und Diensten wurden im vergangenen Kapitel aufgezeigt. Um
Lösungsansätze in Teilbereichen der Kommunikations- und Informationsübertragung
analysieren zu können, werden in diesem Kapitel Merkmale von verteilten
Informationsstrukturen und verteilten Systemen vorgestellt.
Mit Hilfe von Begriffsbestimmungen wird versucht abstrakte Begriffe wie
Information
bzw.
Informationsstruktur
mit
Anwendungsmöglichkeiten
zu
veranschaulichen. In der folgenden Analyse steht deshalb nicht die Funktionalität der
Kommunikation bzw. der Informationsübertragung im Sinne der Analyse, sondern die
Art und Weise bzw. wie und mit welchen Modellen Information abgebildet werden kann.
Eine Form der Abbildung kann mit Hilfe von Architektur-Modellen erfolgen. In
weiterer Folge werden entsprechend verschiedene Architektur-Modelle beschrieben bzw.
deren Vor und Nachteile aufgezeigt. Anhand von Beispielen werden mögliche
Realisierungen verteilter Informationsstrukturkonzepte vorgestellt. Aus den gesammelten
Erkenntnissen können wichtige Anforderungen für den Entwurf einer neuen
Kommunikationsschicht für das xFIND-Suchsystem abgeleitet werden. Auch soll diese
Diskussion weitere Rückschlüsse zum Vergleich mit dem Architekturansatz des xFINDSuchsystems geben.
Am Schluss des Kapitels wird in einem kurzen Überblick die als Referenz geltende
Remote Procedure Call Technologie vorgestellt. Die RPC Technik wird als
Basistechnologie der Datenübertragung in der Kommunikationsschicht angesehen und
gilt als Ausgangspunkt vieler Entwicklungen im Bereich der Informationsübertragung in
verteilten Systemen.
3.2.
Begriffsbestimmungen
Einführend möchte der Autor der vorliegenden Arbeit mit Hilfe von
Begriffsbestimmungen grundlegende Eigenschaften der Informationsverarbeitung
darstellen. Dabei stützen sich diese Definitionen auf Aussagen im Bereich der
Datenverarbeitung, die logische Zusammenhänge und funktionelle Abläufe abdecken.
Weiterführend sollen aber auch die Begriffe unter Berücksichtigung semantischer
Aspekte neue Sichtweisen liefern. Insbesondere die semantischen Aspekte liefern nötige
Schlussfolgerungen für den Zusammenhang der abstrakten Definition und den möglichen
Einsatzbereichen.
Seite 14
Kapitel 3 - Verteilte Informationsstrukturen
Daten sind nach DIN 44300 Zeichen (Buchstaben, Zahlen oder Symbole) oder
kontinuierliche Funktionen, die zum Zweck der Verarbeitung Information aufgrund
bekannter oder unterstellter Abmachungen darstellen. Diese können korrekt oder falsch
sein. Bei Informationen zum Zwecke der Verarbeitung wird zwischen digitalen und
analogen Daten unterschieden. Im Zuge diese Arbeit wird von Daten gesprochen, die in
daten- verarbeitenden Anlagen automatisiert verarbeitet werden können. Die Definition
setzt Zeichen mit Funktionen gleich. Zeichen und Funktionen werden jedoch von
Strukturen beschrieben. Nach Mackeprang sind Daten „Strukturen physikalischer
Wirkungen, die zur Ableitung von Informationen dienen oder diese Informationen
darstellen". Eine Struktur wird durch mathematische Funktionen beschrieben, die als
Anordnung in Zeit und Raum zu sehen ist. [Dreßler 2002]
Der Begriff Information wird in unserem Informationszeitalter in verschiedenen
Bereichen unterschiedlich ausgelegt und genutzt. 1948 verfasste Cloude E Shannon nach
Arbeiten von Nyquist und Hartley eine mathematische Theorie der Kommunikation, die
zur Formulierung einer allgemeinen Informationstheorie führte: die Nachrichtentheorie.
Diese besitzt auch heute noch Gültigkeit, wobei Shannon bei seiner Theorie die
Übertragung elektrischer Signale in den Vordergrund stellte. Die Betrachtung von
Shannon kann jedoch nicht allgemein für die Datenübertragung angewandt werden, da
die Übertragung und Verarbeitung von Daten von weiteren wichtigen Faktoren anhängt.
Um den Begriff der Information für den Bereich der Informationsverarbeitung nutzbar zu
machen, werden semantische Aspekte benötigt. Siegfried Wendt weicht in seinem Buch
„Nichtphysikalische Grundlagen der Informationstechnik“ von der klassischen
Shannontheorie ab und definiert Begriffe wie Information und Informationsstruktur aus
Sicht der Informationsvisualisierung. Siegfried Wendt verknüpft die logische Abstraktion
mit möglichen Nutzungsinhalten. Dabei bezeichnet er Information als "Information ist
alles Wissbahre. Information kann man speichern, transportieren und verarbeiten".
Hingegen definiert Wend den Begriff Informationsstruktur ohne semantische Aspekte
"Eine Informationsstruktur ist eine Relation, die die Beziehung zwischen
Informationsobjekten9 beschreibt". [Wendt 1991]:
Um den Nutzungsgrad der bisherigen Begriffsbestimmungen von Information und
Informationsstruktur hervorheben zu können, ist es auch wichtig, Daten als gekapselte
Objekte, die nicht nur rein statischer Natur sind, zu sehen. Nachdem nun Begriffe wie
Information und Informationsstruktur erklärt wurden, sind weiterführende Betrachtungen
im Rahmen dieser Arbeit speziell für den Bereich der verteilten Informationssysteme und
der Informationsverteilung notwendig.
Michael Weber definierte in seinem Buch „Verteilte Systeme“ zwei weitere
Begriffsbestimmungen. Eine verteilte Anwendung ist aus der Sicht von Weber „[...] eine
Anwendung, die auf mehreren Rechnern bzw. Prozessoren abläuft und unter diesen
Informationen austauscht". [Weber 1998]
Hingegen sieht Weber den Unterschied von verteilter Anwendung zu verteilten
Systemen darin, dass ein verteiltes System dann als solches bezeichnet wird, wenn „[...]
mehrere Rechner bzw. Prozessoren im System vorhanden sind und auf denen mindestens
eine verteilte Anwendung lauffähig installiert ist". [Weber 1998]
Von diesen Definitionen ausgehend können bereits Minimalanforderungen verteilter
Systeme abgeleitet werden. Eine Anwendung soll verteilbar sein bzw. auf verschiedenen
Architekturen lauffähig sein. Diese Minimalanforderungen sollen im folgenden Abschnitt
9
Ein Informationsobjekt entspricht der Kapselung von informationsrepräsentierenden Daten. [Wendt 1991]
Seite 15
Grundlagen der Software Architektur verifiziert und gegebenenfalls ergänzt werden. Es
werden Eigenschaften von Informationsstrukturen definiert, entsprechende Komponenten
der Architekturen erläutert, auf die Vorteile und Nachteile von verteilten Ansätzen
eingegangen und anhand verschiedener Modelle die Architektur verteilter
Informationsstrukturen erklärt.
3.3.
Architekturen verteilter Informationsstrukturen
Der folgende Abschnitt beschreibt Eigenschaften und Merkmale von verteilten
Informationsstrukturen. Weiters werden Informationsstrukturen in verschiedene Bereiche
unterteilt, um so dem Leser zentrale Ansatzpunkte zum Entwurf verteilter Strukturen
liefern zu können. In weiterer Folge werden Anforderungen an verteilte
Informationsstrukturen ermittelt, die anhand Beispiele der verteilten Dateiverwaltung
belegt werden.
Die zentrale Architektur ist ein bekanntes und weit verbreitetes System. Neue
Anforderungen, wie im vorigen Kapitel erwähnt, führen zu einem vermehrten Einsatz
von verteilten Konzeptansätzen. Dies beginnt im Hardwarebereich (Zentrale
Rechnerarchitekturen werden vermehrt von vernetzten Rechnerarchitekturen abgelöst)
und endet bei der Ablöse herkömmlicher Software, um verteilte Systemansätze
verwirklichen zu können. Weit verbreitet sind auch verteilte Anwendungen mit einer
Client-Server Architektur, die vor allem in den Anfängen der vermehrten
Netzwerknutzung große und komplexe Netzwerkdienste abgelöst haben. Die
Kommunikationsschicht als Basistechnologie der Softwarearchitektur spielt dabei eine
große Rolle. [Weber 1998]
Die grundlegendsten Elemente verteilter Informationsstrukturen werden bereits auf
Betriebssystemebene in dessen Kommunikationsschicht integriert. Um den Mechanismus
des Kommunikations-Aufbaus vereinfachen und vereinheitlichen zu können, ist es
wichtig, diese Architekturkomponenten in mehrere Schichten aufzuteilen. Daraus folgen
neue Entwicklungen im Bereich netzwerkfähiger Dienste und Applikationen, die eine
Aufteilung der Dienste und Applikationen in eigenständige Untereinheiten durchführen.
Diese werden als so genannte Web-Services im Internet zur Verfügung gestellt. [Stallings
1998]
In der nachfolgenden Übersicht werden zunächst Merkmale und Eigenschaften von
verteilten Informationsstrukturen erläutert, um ein besseres Verständnis für mögliche
Architekturansätze bekommen zu können [Schlichter 2000]:
• Mehrfachexistenz: In sich abgeschlossene Funktionseinheiten können mehrfach
auftreten und so eine Möglichkeit der „parallelisierten“ Datenverarbeitung sein.
• räumliche Verteilung: logische Funktionseinheiten können auf verschiedene
Komponenten einer verteilten Architektur aufgeteilt werden.
• keine Abhängigkeiten: eine Kapselung logischer Funktionseinheiten muss möglich
sein, um sie unabhängig voneinander einsetzen zu können.
• Vereinheitlichung und Integration der Kontrolle: logische Funktionseinheiten sollen
plattformübergreifend10 entwickelt werden, um Komponenten unabhängig zur
verwendenden Betriebssystemumgebung nutzen zu können.
10
platformunabhängig ist eine vom Betriebssystem unabhängige Funktionsweise
Seite 16
Kapitel 3 - Verteilte Informationsstrukturen
• Datentransparenz: durch die Aufteilung der Informationsstrukturen in Untereinheiten
(Userinterface, Kommunikation, Datenverwaltung, etc.) wird für Benutzer eine
Verringerung der Komplexität erreicht.
• standardisierte Schnittstellen: die Datentransparenz wird bei Verwendung von
standardisierten Schnittstellen und standardisierten Protokollen gewährleistet.
• Skalierbarkeit: durch die Aufteilung einer Informationsstruktur in Untereinheiten
erreicht man auch eine bessere Skalierbarkeit des Gesamtsystems. Dabei steht aber die
Skalierbarkeit der Informationsstruktur in indirektem Zusammenhang der
verwendeten Hardwarearchitektur.
Weiters kann eine Architektur untergliedert werden, indem die zuvor definierten
Merkmale und Eigenschaften auch in den Teilbereichen angewandt werden. Eine
Untergliederung erfordert neben der jeweils für sich verteilten Verarbeitung auch eigene
Verwaltungseinheiten im jeweiligen Bereich. Ein Bereich kann dabei durchaus
Hardwareressourcen beinhalten und beschränkt sich dementsprechend nicht nur rein auf
das Verteilten von Daten und Informationen. Die folgende Gliederung einer
Architektureinheit stützt sich auf die Arbeit von [Schlichter 2000]:
• Ressourcen: Dies entspricht der Verteilung der Informationen auf verschiedene
Ressourcen. Das können z.B. mehrere Fileserver, externe Datenbanksysteme oder
andere periphere Geräte sein.
• Last-Verteilung: Informationen (Daten) können aufgrund einer erweiterten
Rechnerarchitektur auf mehrere Prozessoren und mehrere unabhängige
Speichereinheiten effizient verteilt werden.
• Verteilung der Kontrolle: Die Datenverteilung erfolgt auf Betriebssystemebene und
nützt entweder eine mögliche Lastverteilung der entsprechenden Rechnerarchitektur
aus, oder versucht einen Systemaufruf auf mehrere Prozesse aufzuteilen, um so einen
größeren Datendurchsatz zu erhalten.
• Daten: Die Verteilung der Daten auf mehrere Prozessverarbeitungsmechanismen,
impliziert eine mögliche Variante eines verteilten Datenbankkonzeptes. Daten können
von mehreren Datenbankservern redundant gehalten werden, um einerseits die
Datensicherheit gewährleisten und andererseits die Zugriffsgeschwindigkeiten auf
bestimmte Datensätze erhöhen zu können.
• Verarbeitung: Datensysteme können mittels verteilter Anwendungen aufgebaut,
strukturiert und gewartet werden. Das kann z.B. eine Client-Server-Anwendung sein,
in der mehrere Clients und mehrer Server zu einem gemeinsamen
Datenverwaltungssystem zusammengefasst werden.
Seite 17
Die Untergliederung der Architektur in Teilbereiche entspricht einem verteilten
Architekturansatz. Da der verteilte Ansatz nicht nur Vorteile mit sich bringt, sondern
auch einige Problemstellen und Nachteile besitzt, werden nun die wichtigsten
Problembereiche verteilter Informationsstrukturen dargestellt. Die Nachteile von
verteilten Informationsstrukturen liegen bei einigen wenigen zentralen Punkten
[Schlichter 2000]:
• Netzwerk: Das Verteilen von Informationen ist abhängig von der Kapazität und
Zuverlässigkeit der Netze. Es ist zusätzlich eine Kommunikationslogik11 erforderlich,
die entsprechende Fehlerbehandlungsalgorithmen beinhaltet.
• Sicherheit: Es besteht ein erhöhtes Sicherheitsrisiko, da durch die Verteilung von
Komponenten das System mehr Angriffspunkte bietet. Das System wird
verwundbarer.
• Komplexität: Mit der Verteilung steigt auch die Komplexität in der
Kommunikationsschicht. Ebenfalls wird auch das Testen eines verteilten Systems
schwieriger und komplexer.
Nachdem die Merkmale und Eigenschaften von verteilten Informationsstrukturen,
diverse Bereiche der Kontrolle und Verwaltung sowie Problemstellen aufgezeigt wurden,
werden nun wesentliche Anforderungen an verteilte Architekturen erläutert.
3.3.1.
Anforderungen an verteilte Informationsstrukturen:
Entsprechend der Problemstellungen werden an verteilte Informationsstrukturen
verschiedene Anforderungen gestellt. Diese Anforderungen sollen als ReferenzAnforderungen für den Entwurf verteilter Softwarekomponenten gelten. Der Entwurf
eines verteilten Informationssystems wirft somit im Gegensatz zu Einzelrechnersystemen
neue und mehrere Probleme auf und liefert auch entsprechend neue Anforderungen. In
der nun folgenden Auflistung werden Referenz-Anforderungen an eine verteilte
Informationsarchitektur erläutert, die generell für den Entwurf von verteilten
Softwarekonzepten gelten [Weber 1998]:
• Transparenz: Die verteilte Informationsstruktur soll sich dem User als ein
Gesamtsystem präsentieren. Dem User soll die Struktur „hinter“ dem System
verborgen bleiben. Ein User erhält so transparenten Zugriff auf lokale und entfernte
Ressourcen (Zugriffstransparenz). Aufgrund der verborgenen Struktur weiß der
Benutzer nicht, wo sich die Ressourcen befinden (Ortstransparenz). Die Ressourcen
werden über entsprechende Namensdienste angesprochen. Der Name einer Ressource
oder eines Objekts darf keine Informationen über den Ort enthalten. Dementsprechend
können Ressourcen auch „verschoben“ werden, ohne die Zugriffsmechanismen
verändern zu müssen (Migrationstransparenz). Zusammenfassend wird die Zugriffsund Ortstransparenz als Netzwerktransparenz betrachtet. Benutzer können auf
replizierte Objekte zugreifen, als ob sie nur einmal vorhanden wären
(Replikationstransparenz). Entsprechend der Architektur können auch mehrere User
gleichzeitig auf eine Ressource zugreifen ohne sich gegenseitig zu beeinflussen
(Nebenläufigkeits- oder Paralleltransparenz). Aufgrund der Replikate wirkt sich ein
Ausfall einer Teilkomponente nicht auf die Konsistenz des Gesamtsystems aus. Der
Zugriff auf die Daten und Ressourcen bleibt erhalten (Fehlertransparenz). Bei
11
Kommunikationslogik integriert Schnittstellen, Übertragungsprotokolle, Fehlerbehandlung, Datensicherheit, etc.
[Schlichter 2000]
Seite 18
Kapitel 3 - Verteilte Informationsstrukturen
Einhaltung der Leistungstransparenz ist eine Verbesserung der Performance über eine
dynamische Anpassung des Systems an Lastgegebenheiten möglich. Dies impliziert
auch eine mögliche Erweiterung oder Wartung (Skalierungstransparenz) des Systems,
ohne Einfluss auf die Architektur des Systems oder der Komponenten zu nehmen.
• Skalierbarkeit, Flexibilität, Dynamik: Die beliebige Erweiterbarkeit des Systems
entspricht auch der Wartbarkeit eines Systems. Die erweiterte oder veränderte
Architektur soll weiterhin für den Benutzer als auch für die Software
(Informationsstruktur) transparent bleiben. Es soll daher beim Entwurf eines Systems
auf zentrale Komponenten verzichtet werden. Diese könnten im Zuge der Erweiterung
einen Engpass darstellen und so unverhofft zu Problemen führen. Mit der Zunahme
der Skalierbarkeit (Erhöhung des Kommunikationsaufwandes) können analog zur
zentralen Verwaltung von Daten ebenfalls Probleme auftauchen.
• Offenheit: Rechnerarchitekturen mit verschiedenen Betriebssystemen und
verschiedener Software müssen die Schnittstellen der Hard- und Software
Komponenten offen legen, um stetig gleich bleibende Zugriffsmechanismen für ein
Gesamtsystem zur Verfügung stellen zu können.
• Zuverlässigkeit, Effizienz: Die Zuverlässigkeit und Effizienz von verteilten Systemen
ist gegenüber monolithischen Systemen weit überlegen, wenn die oben erwähnten
Punkte beim Entwurf berücksichtigt und bei der Entwicklung eines verteilten Systems
eingehalten wurden. Die Steigerung der Effizienz hängt im Allgemeinen von der
Parallelisierbarkeit der Problemstellung und in weiterer Folge vom Entwurf geeigneter
Algorithmen ab.
3.3.2.
Anwendungen für verteilte Datenverwaltung
Nachdem im letzten Abschnitt die Anforderungen an verteilte Architekturen erläutert
worden sind, folgt als Beispiel zur näheren Erklärung verteilter Konzepte ein kurzer
Überblick über mögliche Basiskomponenten von Betriebssystemen (BS). Weiterführende
Informationen über den Entwurf, den Aufbau und dem Design verschiedener
Betriebssysteme sind im Buch „Operating Systems Internals and Design Principles“ von
Stallings nachzulesen [Stallings 1998]. Von besonderem Interesse sind DesignVergleiche verschiedener BS. Viele erläuterten Anforderungen an verteilte
Informationsstrukturen sind in diversen BS-Konzepten zum Teil bereits umgesetzt, bzw.
waren bereits angedacht [Weber 1998]:
• Verteilte Betriebsumgebung über lokalen Betriebssysten: Jeder Rechner besitzt ein
eigenständiges Betriebssystem, das über Rechnernetzwerke miteinander
kommuniziert. Die Kommunikationsschicht liegt über der BS–Umgebung und stellt
die Verbindung zu der Anwendungskomponente dar. Die verteilte
Informationsstruktur ist in diesem Modell auf mehrere Rechner logisch aufgeteilt. In
Abbildung 3.1 wird ein verteilter Systemansatz ohne Unterstützung des
Betriebssystems gezeigt. Das Betriebssystem dient lediglich der Datenverwaltung und
der Kommunikation.
Seite 19
Abwendungs-Komponente
Verteilte Betriebsumgebung
Kommunikation
Verteilte Anwendung
Abwendungs-Komponente
Verteilte Betriebsumgebung
Kommunikation
Lokales Betriebssystem
Lokales Betriebssystem
Rechner 1
Rechner n
Netzwerk
Abbildung 3.1: Verteiltes System ohne Betriebssystemunterstützung [Weber 1998]
• Netzwerkbetriebssystem: Bei einem Netzwerkbetriebssystem ist die Kommunikation
bereits im Betriebssystem integriert. Die Konfiguration entspricht einem Netzwerk
von Anwendungsrechnern. Server stellen Netzwerk Services oder Applikationen zur
Verfügung (z.B. File-Server, Drucker–Management). Jeder Computer besitzt
wiederum ein eigenständiges BS. Die Kommunikation mit Servern oder anderen
Rechnern wird durch die Integration der Kommunikationsschicht in die
Betriebssystemumgebung erleichtert. Dem Benutzer ist dabei jedoch nicht bewusst,
dass sich Architektur des BS aus verteilten Netzwerk-Rechnern zusammensetzt. In
Abbildung 3.2 ist eine vereinfachte Version dieser Architektur (ohne
Serververbindungen) dargestellt.
Abwendungs-Komponente
Verteilte Betriebsumgebung
Verteilte Anwendung
Lokales Betriebssystem
NetzwerkBetriebssystem
Kommunikation
Abwendungs-Komponente
Verteilte Betriebsumgebung
Lokales Betriebssystem
Kommunikation
Rechner 1
Rechner n
Netzwerk
Abbildung 3.2: Netzwerkbetriebssystem [Weber 1998]
• Verteiltes Betriebssystem: In einem verteilten Betriebssystem sind sowohl die
Kommunikationsschicht als auch die Verteilungsmechanismen vollständig in das BS
integriert. Diese Art von Netzwerk-Architektur präsentiert sich als Gesamtheit, d.h.
Zusammenschluss oder Verbund unabhängiger Rechner. Die Architektur erlaubt dem
Benutzer transparenten Zugriff auf bestimmte Ressourcen wie Services, Applikationen
und Systemkomponenten verschiedener Rechner. Der Benutzer weiß in der Regel
nicht wo die Ressourcen sind oder wer die Ressourcen bereitstellt. In Abbildung 3.3
ist ein vereinfachtes Bild der Architektur eines verteilten Betriebssystems dargestellt.
Abwendungs-Komponente
Verteilte Anwendung Abwendungs-Komponente
Verteiltes Betriebssystem
Rechner 1
Rechner n
Netzwerk
Abbildung 3.3: Verteiltes Betriebssystem [Weber 1998]
Seite 20
3.4.
Kapitel 3 - Verteilte Informationsstrukturen
Remote Procedure Call in der Kommunikationsschicht
Im vergangenen Unterabschnitt 3.3.2 bilden die vorgestellten Betriebssystemgrundelemente die Basis für verteilte Anwendungen. Der RPC-Ansatz gilt in der
Kommunikationsschicht als Referenz für den Entwurf verteilter Datenobjekte und der
Entwicklung verteilter Funktionseinheiten. Viele Middlewarelösungen (siehe Abschnitt
4.7) und Spezifikationen von Übertragungsprotokollen (siehe Kapitel 5) setzen auf den
RPC Ansatz auf. Des Weiteren stellt RPC Möglichkeiten zur Verfügung verteilte Dienste
und verteilte Funktionalität zu nutzen. Der RPC Ansatz stellt weiters eine mögliche
Umsetzung des Konzepts der verteilten Informationssysteme auf objektorientierter Ebene
dar.
RPC stellt eine Erweiterung für den Bereich der Kommunikationsschicht in verteilten
Informationsstrukturen zur Verfügung. Das RPC Protokoll soll die Entwicklung von
verteilten Anwendungen erleichtern, indem sich die verteilten Komponenten einer
Anwendung nicht um Netzwerkdetails kümmern müssen. Dadurch ist nicht nur eine
räumliche Verteilung der Funktionalitäten möglich, sondern auch die nötige Kapselung
der Funktionseinheiten oder der funktionalen Objekteinheiten. Die ursprünglichen
Kommunikations- Primitive im Verbindungsaufbau bzw. der Datenübertragung (Ein–
Ausgabe) wie "send" und "receive", wurden durch direkte Funktionsaufrufe mit
Parameterübergabe erweitert. Dabei wird eine entfernte Prozedur oder Funktion so
angesprochen, als ob sie auf dem lokalen Rechner installiert wäre. Die Kommunikation
erfolgt zwischen einem "Client", der die Prozedur anfordert und dem "Server", der die
entsprechende Prozedur oder Funktion zur Verfügung stellt. Abbildung 3.4 zeigt die
Funktionsweise eines RPC Systems. Der Aufruf von Prozeduren auf entfernten Rechnern
erfolgt dabei in synchroner12 Weise. Der aufrufende Client bleibt solange in einem
blockierten Zustand, bis entweder der Server den Funktionsaufruf abgearbeitet hat, oder
ein Fehler aufgetreten ist. Diese zusätzliche Kommunikationsschicht zwischen Client und
Server beinhaltet auch zusätzliche Fehlerquellen. Entsprechend erfordert dies auch die
Implementierung eigener Fehlerbehandlungsalgorithmen. Dies bringt zusätzlichen
"Overhead" und geht zu Lasten der Performance. Ebenfalls zu Lasten der Performance
wirkt sich die Übertragung der Daten über ein Netzwerk aus. Da es keinen gemeinsamen
Speicher-Adressraum für die verteilten Objekte gibt, muss bereits beim Entwurf einer
RPC-Funktion auf diese Problematik eingegangen werden. So ist etwa eine
Sonderbehandlung für Pointerstrukturen notwendig. Beim RPC wird der Call am Client
an einen lokalen Stub13 weitergegeben. Dieser Stub (Prozedur) stellt nun die übergebenen
Parameter mit dem Call zu einer gemeinsamen Nachricht zusammen. Die Nachricht wird
im Client-Stub serialisiert und über das Netzwerk zum Stub des Servers übertragen. Der
Stub des Servers zerteilt die Nachricht entsprechend dem Serialisierungsprotokoll und
gibt den Call (Parameter) an die Serverprozedur weiter. Der Prozess des Serialisieren und
Deserialisieren wird Marshalling14 genannt Der Call wird von der Serverprozedur
abgearbeitet und das Ergebnis in derselben Weise zum Client zurückgesandt. Bei der
12
synchron: Der Client bleibt durch den synchronen RPC Call (Thread) solange blockiert, bis der RPC-Aufruf durch den
zugehörigen Server Thread abgeschlossen ist. Ein asynchroner RPC Aufruf ist eine Erweiterung des synchronen RPC
Calls. Dabei blockt der aufrufende RPC Call den Client nicht mehr, sondern gibt sie Steuerung an den Client für
andere Tasks wieder frei.
13
Stub: sind kleine vorkompilierte Programmroutinen, die das eigentliche Programm (Funktion) teilweise ersetzen. Ein
Stub übernimmt Kommunikationsaufgaben und fungiert als Schnittstelle zwischen Client und Server.
14
Marshalling: sammeln von Daten von Applikationen und nichtzusammenhängenden Sourcen; zusammenfassen dieser
Daten zu einer Message und Bereitstellen der Message inklusive möglicher Sprachkonvertierungen (Protokolle,
Formate, etc.)
Seite 21
Parameterübergabe unterscheidet man grundsätzlich [Weber 1998] [Schlichter 2000]:
• Call by Value: Es reicht bei einfachen Variablen nur den Wert selbst an die RemoteProzedur weiterzugeben. Wenn Datenfelder übertragen werden müssen, müssen alle
Werte des Feldes serialisiert und zu einer Nachricht verpackt werden.
• Call by Reference: Bei Verwendung von Bäumen als Datenstrukturen oder Pointer auf
Arrays genügt es nicht nur die Wurzel oder den Startzeiger einer Datenstruktur zu
übertragen. Die Datenstruktur muss vielmehr als ganzes Wertepaket (Objekt) zur
Remote-Prozedur übertragen werden. Dabei ändert sich aber bei der Übertragung die
Bedeutung von „Call by Reference“ zu „Call by Copy“. Bei der Rückübertragung
muss mit „Call by Restore“ die vorgegebene Datenstruktur neu aufgebaut werden.
Eine andere Möglichkeit wäre, notwendige Parameter dynamisch nachzuladen. Nur in
diesem Fall können dynamische Datenstrukturen tatsächlich realisiert werden.
Abbildung 3.4: RPC - Funktionsweise [Weber 1998]
Nachdem der grundsätzliche Kommunikationsaufbau erklärt wurde, werden
nachfolgend die Aufgaben des Client-Stub und des Server-Stub erklärt [Schlichter 2000]:
• Aufgaben des Client-Stub: Der Client-Stub muss die Spezifikation (Schnittstelle) der
aufgerufenen Prozedur festlegen. Weiters muss der Call (Aufruf der Prozedur) einem
Zielrechner zugeordnet werden. Die Übergabeparameter müssen entsprechend in das
Zielformat (Übertragungsformat) umgesetzt werden. Die Beschreibung dieser
Parameter wird Signatur genannt und beinhaltet auch eventuelle Möglichkeiten, um
auf Fehlerfälle reagieren zu können. Nach dem Aufruf muss der Stub die
empfangenen Daten dekodieren und an den Client zurückgeben. Zum Schluss muss
der Stub noch die Blockierung des Clients aufheben.
• Aufgaben des Server-Stub: Der Server-Stub muss den Call und die Parameter des
Client-Stub dekodieren und die entsprechende Aufrufadresse der Prozedur bestimmen.
Anschließend erfolgt der Prozeduraufruf mit den dekodierten Übergabeparametern.
Der Stub kodiert nach Abarbeitung der Prozedur die Ergebnisse und die
Aufrufkennung und sendet die kodierten Daten über das Netzwerk zum Client Stub.
Grundlegende Eigenschaften eines RPC – Systems werden charakterisiert durch
[Schlichter 2000]:
• eine einheitliche Aufrufsemantik
• ein type-checking
• volle Parameterfunktionalität
• eine Optimierung der Antwortzeit
Seite 22
Kapitel 3 - Verteilte Informationsstrukturen
Das RPC-Modell kann auch als so genanntes OSI15-Schichtenmodell, wie in
Abbildung 3.5 ersichtlich, dargestellt werden und setzt dabei auf das entsprechende
Transportprotokoll auf. Dabei gibt es wieder verschiedene Möglichkeiten der Anbindung
an das Transportsystem [Schlichter 2000].
Client – Server Model
RPC Mechanismus
Serialisierung, Nachrichtenaustausch
Transportsystem (TCP/UDP)
OSI Schicht 7
OSI Schicht 6
OSI Schicht 5
OSI Schicht 4
application layer
presentation layer
session layer
transport layer
Abbildung 3.5: RPC - OSI Schichtenmodell [Schlichter 2000]
Die RPC Transport Anbindung kann in symmetrischer oder asymmetrischer Form
erfolgen. Bei der symmetrischen Datenübertragung werden alle Übergabeparameter in ein
bestimmtes kanonisches Format übersetzt. Das setzt voraus, dass sowohl der Client als
auch der Server eigene Konvertierungsalgorithmen besitzen. Beim asymmetrischen
Verfahren schicken die Clients die Übergabeparameter jeweils in einem eigenen Format.
Der Server muss bei n verschiedenen Clients n verschiedene Konvertierungsalgorithmen
besitzen. Weiters stellt das RPC Protokoll keine Möglichkeiten der sicheren
Datenübertragung (Verschlüsselung bzw. Identifikation) zur Verfügung und bietet keine
Kontrollmöglichkeit bei Ausfall von Server oder Client. D.h. es muss zusätzlich noch
eine Kontrollschicht eingefügt werden, um eine Fehlerbehandlung durchführen zu
können. Der Serverprozess muss im Client-Fehlerfall benachrichtigt werden, der Client
muss bei Serverausfall benachrichtigt werden. [Weber 1998] [Schlichter 2000]
Für die Entwicklung bzw. Festlegung der Signaturen und Schnittstellen wurden
spezielle Schnittstellenbeschreibungssprachen entwickelt. Es kommen so genannte RPCCompiler zum Einsatz, die für verschiedene Konzepte entwickelt wurden. Bei CORBA16
ist es z.B. IDL (Interface Definition Language). Bei der Entwicklung von verteilten
Anwendungen kommen auch RPC Generatoren zum Einsatz. Diese erzeugen die
Schnittstellenparameter und legen die Datentransformation der Stubs fest. RPC
Generatoren erleichtern somit den Entwicklungsprozess durch Reduzierung des
Zeitaufwandes, der Implementierung und die Verwaltung der Teilkomponenten. Weiters
ist die Schnittstellenbeschreibung leichter wartbar, erweiterbar und in der Folge daraus
weniger fehleranfällig. [Schlichter 2000]
Mit dem RPC Protokoll ist es nun möglich, auf einfache Weise Applikationen und
entsprechend verteilte Netzwerkdienste zu implementieren. Die entwickelten RPC
Modelle wie Sun RPC17 oder DCE RPC18 wurden von der ISO zu einem gültigen
Standard (ISO RPC) vereint, jedoch gibt es bis heute keine kommerziell erfolgreiche
Umsetzung des ISO RPC. Zur Definition des ISO RPC wurde auch eine eigene Interface
Definition Notation (IDN) definiert, mit der RPC Applikationen erzeugt werden können.
[Schlichter 2000]
15
OSI: Open Systems Interconnection
CORBA: Common Object Request Broker Architecture, wurde 1991 von der Object Management Group (OMG), einem
Standardisierungsgremium mit mehr als 700 Mitgliedern definiert. Das Kommunikationsprotokoll zwischen Object
Request Brokern (ORB) verschiedener Hersteller, welches den Meldungsaustausch über das Internet ermöglicht, wird
Internet Inter-ORB Protocol (IIOP) genannt. ORBs sind die technischen Implementierungen des CORBA Standards.
17
Sun RPC: von Sun umgesetzt; heute sind zwei gängige Modelle bekannt: ONC RPC - Open Network Computing
(Linux) und TI RPC – transport independent (Solaris), Programmierung über RPCL, drei mögliche AuthentifizierungsSchemata
18
DCE RPC: Distributed Computing Environment, Programmierung über IDL, Authentifizierung über Kerberos (Network
Authentication Protocoll); siehe Abschnitt 4.7.2
16
Seite 23
3.5.
Schlussbemerkung
Der Entwurf und Einsatz von verteilten Informationsstrukturen birgt Vor und
Nachteile in sich. Durch die Aufteilung der Informationsstrukturen in einzelne
Unterbereiche erreicht man einerseits eine bessere Wartbarkeit und Erweiterbarkeit,
zugleich erfordert aber diese Aufteilung auch einen größeren Verwaltungsaufwand und
Anpassungen beim Entwurf der Kommunikationsschicht. Das Ziel beim Entwurf einer
geeigneten Kommunikationsschicht ist nicht immer das Erreichen einer hohen Effizienz.
Sicherheitsaspekte und das Streben einer breiteren Akzeptanz gehen oft zu Lasten der
Datendurchsatzrate.
Bei näherer Betrachtung verschiedener Architekturkonzepte kann man Vorteile und
Problembereiche von verteilten Strukturen erkennen. Minimalanforderungen wie eine
Anwendung soll verteilbar sein, auf verschiedenen Architekturen lauffähig sein und in
mehrere Schichten aufteilbar sein, impliziert auch die Vorgaben, die eine
Kommunikationsschnittstelle erfüllen muss. Ebenso müssen beim Entwurf der
Kommunikationsschicht
Eigenschaften
von
verteilten
Informationsstrukturen
berücksichtigt werden. Dazu gehören die räumliche Verteilung der Information,
Mehrfachexistenz, das Ausschließen von Seiteneffekten, Abbildung diverser
Transparenzeigenschaften,
Skalierbarkeit
und
Verwendung
standardisierter
Schnittstellen. Neben diesen vielfältigen Eigenschaften, die zum Teil auch
Anforderungen
an
moderne
Informationsstrukturen
sind,
soll
eine
Kommunikationsschicht zusätzlich noch erweiterbar und zuverlässig sein.
RPC als Basistechnologie liefert wichtige technische Erkenntnisse die zum Entwurf
von Kommunikationsschnittstellen in verteilten Systemen notwendig sind. Die
Einführung eines Schichtenmodells unterbindet direkte Funktionsaufrufe durch die
Kapselung funktionaler Einheiten in Stubs. Das Schichtenmodell erweist sich vor allem
für Applikation von Vorteil, da sich diese nicht mehr um Basisdienste wie Transport bzw.
Netzwerkdetails kümmern müssen. Werden in den jeweiligen Schichten wiederum
standardisierte Datenaustauschmechanismen verwendet, können Anforderungen wie
Sicherheit und Offenheit einfach realisiert werden.
Um den abstrakten Begriff verteilte Informationsstrukturen zu konkretisieren, wird im
nächsten Kapitel untersucht, wie verteilte Informationsstrukturen bzw. Architekturen in
verteilten Anwendungen umgesetzt werden können. Speziell werden auch gängige
Middlewarelösungen untersucht, die wichtige Aufschlüsse bezüglich der verwendeten
Technologien liefern. Im Kontext der vorliegenden Arbeit werden eingesetzte
Übertragungsmechanismen untersucht und in weiterer Folge eine geeignete Auswahl zur
weiteren Untersuchung getroffen.
Seite 24
Seite 25
Kapitel 4
4.
Verteilte Anwendungen
4.1.
Einleitung
In den vorangegangenen Kapiteln wurden grundlegende Begriffsbestimmungen erklärt
sowie Methoden zur verteilten Informationsverwaltung beschrieben. Dieses Kapitel
beschäftigt sich mit Problemen und Lösungsvorschläge der verteilten
Informationsverarbeitung. Steigendes Informationsaufkommen, Migration, Verfügbarkeit
und Transparenz sind auch Problembereiche, die beim Entwurf von Anwendungen stets
zu berücksichtigen sind. Die Entwicklung in der Softwarebranche geht einher mit der
Entwicklung in der Hardwarebranche. Zentralistische Systeme werden vermehrt durch
Client-Server Strukturen abgelöst. Durch die Erhöhung der Rechenleistung wurde auch
die Software immer komplexer. Nimmt man als Beispiel Office-Produkte, so besitzen
diese sehr viele Funktionen die im allgemeinen Gebrauch nur selten benötigt werden oder
gänzlich unbekannt sind. Die Wartung und Erweiterung komplexer Software gestaltet
sich entsprechend schwierig. Aus diesem Grund wird vermehrt auch versucht Software in
Module zu unterteilen und bei entsprechenden Möglichkeiten diese Module auch zu
verteilen. Wird die Software als Modulkonzept (das aufteilen in Module impliziert keine
zwingende Verteilung der Module) ausgelegt, müssen auch die Mechanismen der
Datenübertragung und die Auffindung von Diensten und Informationen entsprechend den
Anforderungen angepasst werden.
Ziele verteilter Anwendungen sind entfernte Funktionalitäten zu nutzen oder entfernte
Daten lokal oder quasi-lokal (remote) verarbeiten zu können. Eine Verteilung von
Information hat nicht immer eine Verteilung der anwendbaren Funktionen zur Folge.
Umgekehrt gilt dasselbe. Zentrale Funktionalitäten greifen einerseits auf verteilte
Information zu und andererseits werden Funktionen verteilt, um möglichst nahe an den
Datenbeständen zu sein (siehe unter anderem auch Architektur des xFIND-Suchsystems
in Abschnitt 6.5).
Am Beginn dieses Kapitels werden Topologien verteilter Anwendungen vorgestellt,
um mögliche Verteilungsmechanismen für Anwendungen charakterisieren zu können.
Zur unterstützenden Erklärung einiger Topologie-Ansätze werden mögliche Lösungen,
Daten zu verteilen, anhand verschiedener Beispiele verteilter Dateisysteme, dargestellt.
Der Informationsaustausch in verteilten Systemen soll, wie bereits mehrmals erwähnt, mit
standardisierten Möglichkeiten realisiert werden. Dazu gehören transaktionsbasierte
Ansätze und die Berücksichtigung objektorientierter Technologien um eventuell auch
eine Widerverwertbarkeit von Softwaremodulen gewährleisten zu können.
Das Problem der automatisierten Identifizierung von Diensten wird von den bisher
vorgestellten Methoden (z.B. RPC) nicht abgedeckt. Im Hinblick auf die Erweiterbarkeit
der Kommunikationsschicht des xFIND-Suchsystems bezüglich Services (oder auch
Seite 26
Kapitel 4 - Verteilte Anwendungen
Web-Services) wird die herkömmliche Client-Server Technologie dem Peer-to-Peer
Ansatz gegenübergestellt und analysiert.
In weiterer Folge wird eine Auswahl an Middleware-Technologien vorgestellt, um
Aufschlüsse für die Untersuchung der Kommunikationsschicht und deren unterstützten
Übertragungsprotokolle zu erhalten. Als Basismodell wird dabei näher auf DCE
eingegangen, das in seiner Ursprungsform grundlegende Anforderungen aus dem Bereich
verteilte Informationsstrukturen abdeckt. Aus den modernen Ansätzen wie .NET, ONE
oder J2EE werden wichtige Erkenntnisse für die darauf folgenden Kapitel
Transportprotokolle (Kapitel 5) und verteilte Suchsysteme (Kapitel 6) gewonnen. Zum
Abschluss des Kapitels wird ein Einblick in die Webservice Architektur gegeben. Mit
Hilfe dieser Technologie ist es möglich, standardisiert Dienste anzubieten und zu finden.
4.2.
Topologien verteilter Anwendungen
Topologieformen finden in technischen Bereichen ein großes Anwendungsfeld.
Ausgehend von vier Basis-Typen, werden in weiterer Folge Hybrid-Systeme vorgestellt.
Sollen beim Entwurf von Software Informationen verteilt verarbeitet werden, kommen
topologische Betrachtungen schon in der Designphase der Softwareentwicklung zur
Anwendung. In weiterer Folge leiten sich auch entsprechende Übertragungsmechanismen
von der zugrunde liegenden Topologie des verwendeten Systems ab.
Der Begriff Topologie im Kontext der Informationsverarbeitung bedeutet laut Duden
„die Anordnung und Vernetzung von einzelnen Computer und Terminals innerhalb eines
Datenverbundes“. Zurzeit sind vier gängige Topologien gebräuchlich, die auch für
Anwendungen im Bereich des Internet Anwendung finden: Zentrale, dezentrale,
hierarchische und Ring basierte Systeme. Diese Topologien treten nicht nur in ihrer
eigenständigen Form auf, sondern auch in diversen Kombinationen, den so genannten
Hybrid-Systemen. Topologieüberlegungen können in verschieden Bereichen der
Informationsverarbeitung Einfluss nehmen: physikalisch (Hardwarearchitektur), logisch
(programmtechnisch),
verbindungsorientiert
(Informationsfluss),
organisatorisch
(funktionell). Eine gute Übersicht verschiedener Topologien bietet Tabelle 4.1. In dieser
Gegenüberstellung der Eigenschaften der vorgestellten Topologien stellen die Knoten in
den Graphen einzelne Computer bzw. Anwendungen dar. Die Kanten im Graphen
(Verbindungen bzw. Links) stellen Datenkanäle dar. Sie sind nicht gerichtet und stellen
den Informationsfluss dar. Dieser Abschnitt orientiert sich an den Arbeiten von [Minar
2001] [Minar 2002].
Name
Zentral
Dezentral Hierarchisch
gut
gut
schlecht
schlecht
schlecht
gut
schlecht
schlecht
gut
gut
vielleicht
schlecht
Ring
ZentralRing
ZentralDezentral
ZentralZentral
gut
gut
schlecht
gut
gut
gut
gut
gut
schlecht
gut
gut
gut
schlecht
partiell
gut
gut
partiell
schlecht
gut
partiell
partiell
schlecht
schlecht
gut
Typ
Wartbarkeit
Kohärenz
Erweiterbarkeit
Fehlertoleranz
Skalierbarkeit
Sicherheit
Partiell
Partiell
Partiell
Partiell
gut
Schlecht
Tabelle 4.1: Übersicht über Topologien verteilter Anwendungen nach [Minar 2001][Minar 2002]
Seite 27
In der nachfolgenden Auflistung werden vier gängige Topologien einander gegenüber
gestellt und in einer allgemeinen Betrachtungsweise vorgestellt. Weiters werden drei
hybride Systeme vorgestellt, welche die Vorteile der vier Basistypen vereinen. Bei der
Gegenüberstellung soll die verbindungsorientierte Ebene im Vordergrund stehen:
• Zentrale Topologie: Zentral basierte Systeme stellen nach wie vor die am häufigsten
eingesetzte Topologieform dar. Der große Vorteil liegt in der Einfachheit dieser
Topologie. Alle Daten werden an einer zentralen Stelle gehalten und gewartet. Es gibt
keine Probleme bezüglich der Konsistenz oder der Kohärenz diverser Replikate. Der
Vorteil alle Daten zentral speichern zu können ist auch zugleich der größte Nachteil
der zentralen Topologie. Fällt der Server aus, kann kein Client auf die Daten
zugreifen. Die Erweiterbarkeit dieses Systems ist gering und neue Ressourcen können
nur an einer zentralen Stelle eingefügt werden. Zentral verwaltete Systeme gelten im
Allgemeinen als schlecht skalierbar. Die Skalierbarkeit zentraler Systeme ist jedoch
leicht messbar und steht zumeist in unmittelbaren Zusammenhang mit der
Performance des Systems. Die Skalierbarkeit und die Performance des Systems kann
nur erhöht werden, in dem die zentrale Stelle erweitert wird, bzw. mehr Ressourcen
zur Verfügung gestellt bekommen.
Beispiel: Typische Anwendungen sind Client-Server Architekturen (aus Sicht der
Software) die in Datenbankanwendungen, Internet-Diensten und anderen einfachen
verteilten Anwendungen eingesetzt werden (z.B. Suchaufbau in Napster19 oder der
Anmeldevorgang von Instant-Messaging Diensten wie z.B. ICQ20). Viele Clients
kommunizieren mit einem Host bzw. einer Hostdatenbank. Im Gegensatz zu den
genannten
Vorteilen
gibt
es
auch
einen
entscheidenden
Vorteil.
Sicherheitsvorkehrungen können einfach realisiert werden.
• Dezentrale Topologie: Dezentrale Topologien besitzen in den meisten Fällen
gegensätzliche Eigenschaften zu zentralen Systemen. Die verstreute Anordnung lässt
vermuten, dass dezentrale Systeme schwer zu verwalten und unsicher sind. Der größte
Vorteil von dezentralen Systemen ist deren gute Erweiterbarkeit. Auch hat der Ausfall
einer Teilkomponente nur geringe bis keine Auswirkung auf das Gesamtsystem
(Erreichbarkeit, Datentransfer). Sie neigen deshalb fehlertoleranter und unangreifbarer
gegenüber Rechtsstreitigkeiten zu sein. Die Skalierbarkeit von dezentralen Systemen
lässt sich nur schwer messen. Wenn der Kommunikationsaufwand mit der Größe des
Systems stetig zunimmt, spricht man auch von einem schlecht skalierbaren System.
Beispiel: Beispiele für den Einsatz dezentraler Topologien wären Internet Routing21,
Gnutella22, und Freenet23. In der Theorie wird behauptet, dass ein Netzwerk umso
leistungsfähiger wird, desto mehr Server eingesetzt werden. In der Praxis zeigt sich
jedoch, dass eine Steigerung der Serveranzahl auch mehr Kommunikationsaufwand
erzeugt. Dies liefert einen Overhead um Datenbestände kohärent halten zu können.
• Hierarchische Topologie: Hierarchische Systeme gehören geschichtlich gesehen zu
den ältesten eingesetzten Systemen im Internet. Aus heutiger Sichtweise werden
hierarchische Topologien als ausgezeichnete verteilte Systeme angesehen.
Entsprechend dem Top-Down Prinzip entspricht der topologische Graph einer
19
Napster: http://www.napster.com/
ICQ: http://web.icq.com/
21
Internet Routing Protokoll: http://www.faqs.org/ftp/rfc/rfc1264.txt [RFC 1264]
22
Gnutella: http://www.gnutella.com
23
Freenet: http://freenetproject.org
20
Seite 28
Kapitel 4 - Verteilte Anwendungen
Baumstruktur. Hierarchische Systeme sind leicht wartbar, da die Verbindungen bzw.
dessen Aktionen klar definiert sind. Teiläste der Bäume dürfen nicht entarten (Baum
geht in die Breite, kann zu zentralem System entarten), ansonsten können Ausfälle von
Teilknoten zu Problemen führen. Mit entsprechenden Caching-Mechanismen kann
man auf effiziente Weise Datenkohärenz erreichen. Hierarchische Strukturen sind in
der Regel gut erweiterbar. Die Ebene legt zumeist die Regeln bezüglich der
Datenverwaltung fest. Hierarchische Systeme sind fehlertoleranter als zentral
gesteuerte Systeme, mit der Ausnahme der Wurzel der Baumstruktur. Je mehr Knoten
ein System besitzt, desto schwieriger wird es auch Sicherheit im Gesamtsystem
gewährleisten zu können. Der größte Vorteil von hierarchischen Systemen ist die
überragende Skalierbarkeit des Systems. Für jede Ebene kann man durch hinzufügen
von Knoten die Teilperformance erhöhen und Lasten besser verteilen.
Beispiel: Eines der am weitest verbreiteten und bekanntesten Systeme ist das Domain
Name-Service (DNS24) im Internet zur Bestimmung von Host-IP-Adressen bzw. zum
Abbilden von Host-Namen auf Host-IP. Die Hierarchie folgt einem Top-Down Prinzip
mit Root Name-Server für die Top-Level Domain Hosts bis zu den Third-Level
Servern die die jeweiligen registrierten Informationen ihrer Domain kennen. Weitere
Beispiele für den Einsatz hierarchischer Topologien wären NTP25 und Usenet26. Eine
gute Skalierbarkeit beweißt das schon erwähnte DNS System, das in 15 Jahren von ein
paar tausend Hosts auf mehrere hundert Millionen Hosts weltweit skaliert werden
konnte. Das exponentielle Wachstum des Internet beruht auch auf der einfachen und
offenen Struktur hierarchischer Systeme.
• Ring Topologie: In einem Ring basierten System sind alle beteiligten Hosts
unmittelbar in einer geschlossene Kette miteinander verbunden. Um die Überlastung
eines einzelnen Hosts zu vermeiden wird stattdessen ein Host-Cluster eingesetzt. Dies
entspricht einem Load-Balancing und in weiterer Folge verfügen Ring Topologien
über eine größere Ausfallssicherheit gegenüber zentralen Topologien. Viele Vorteile
zentraler Systeme treffen auch auf Ringtopologien zu. Wartbarkeit, Datenkohärenz
und Sicherheit sind die großen Stärken. Ebenso wie zentrale Systeme sind auch
ringartige Systeme nur schwer erweiterbar.
• Hybride Systeme: Verteilte Anwendungen lassen sich nicht immer auf die vier
vorgestellten Grundtypen abbilden. Bestimmte Anforderungen erfordern eine
Kombination der Grundtypen. Knoten verfügen dabei typischerweise über mehrere
Funktionalitäten die der Topologie entsprechende Interaktionen hervorrufen. Hybride
Systeme entstehen auch durch Zusammenführen bestimmter Teile von Systemen. Man
will damit die Vorzüge der Einzelsysteme nutzen, ohne dabei deren Nachteile in Kauf
nehmen zu müssen. Dass das aber nicht gelingt ist offensichtlich. Vielmehr kommt es
auf die richtige Mischung an und Kompromisse zwischen Skalierbarkeit, Sicherheit
etc. zu finden. Nachfolgend werden nun drei hybride Topologien vorgestellt:
~ Zentral – Ring: Hier erweist sich der Einsatz einer Ringstruktur als zentrales
Element vorteilhaft, um Lastverteilung und Ausfallssicherheit zu ermöglichen. Diese
Vorteile erkauft man sich mit der Replizierung von Datenbeständen. Die Erzeugung
und Aufrechterhaltung (Kohärenz) der Redundanzen erfordert entsprechenden
Aufwand. Das Gesamtsystem vereint so die Vorteile zentraler und ringbasierter
24
DNS: http://www.ietf.org/rfc/rfc1035.txt [RFC 1035]
NTP: http://www.ntp.org [RFC 1305]
26
Usenet: http://www.usenet.org [RFC 822] [RFC 850] [RFC 977] [RFC 1036] [RFC 1123] [RFC 1153] [RFC 2076]
25
Seite 29
Systeme. Die Einfachheit und die Robustheit dieser Kombination werden auch im
vielfachen Einsatz bei hoch frequentierten Web Servern im Internet und
Datenbankservern bestätigt. Viele Clients können so Daten eines Serververbundes
anfordern, ohne große Performanceeinbusen befürchten zu müssen. Ein weiterer
wichtiger Aspekt ist die gute Skalierbarkeit. Reicht die Performance nicht aus, wird
das Ringsystem um Komponenten erweitert.
~ Zentral – Dezentral: Systeme, die dieser Kombination genügen, folgen meist dem
Prinzip, dass Knoten dezentral miteinander im Verbund stehen und gleichzeitig auch
als zentrale Anlaufstelle auftreten. Diese Kombination bietet den Vorteil guter
Erweiterbarkeit bzw. Fehlertoleranz. Die partielle Zentralisierung liefert dem System
eine bessere Datenkohärenz als ein rein dezentrales System, aber die Wartbarkeit und
Sicherheit wird dadurch nicht erheblich verbessert. Noch immer sind verschiedene
Hosts für sich und deren Content selbst verantwortlich. Zu beachten ist dabei, dass
zentrale Knoten nicht notwendigerweise auch der Einstiegspunkt in die Struktur
darstellen. Der größte Vorteil, der sich aus diesem hybriden System ergibt, ist die
überragende Skalierbarkeit des Systems.
Beispiel: Der Email Versand per Internet fällt in diesen Bereich und skaliert für
mehrere hundert Millionen Benutzer immer noch zufrieden stellend. Gerade im
Bereich der Peer-to-Peer Anwendungen bietet dieser hybride Ansatz ungeahnte
Möglichkeiten. JXTA27 mit seiner World Peer Group und Gnutella machen sich so
genannte „Supernodes“ zu Nutze, über die Identifikation, Suche, und andere Dienste
laufen. Der Datenaustausch erfolgt dann meist von Client zu Client auf direktem
Wege.
~ Zentral – Zentral: Bei diesen Systemen wird versucht, die Repräsentationsschicht
von der Funktionalen- bzw. der Datenschicht zu trennen. Dies ermöglicht eine
getrennte Weiterentwicklung der verschiedenen Einzelsysteme. Ebenso fällt es
dadurch leichter andere Systeme (Dienste) an das Gesamtsystem anzukoppeln. Es
macht also durchaus Sinn entsprechende Architekturen einzusetzen um einerseits
Performanceverbesserung zu erreichen und um das System besser erweitern zu
können. Die schlechte Skalierbarkeit bleibt dabei zumeist als Nachteil dieses hybriden
Systems erhalten.
Beispiel: Ein Server in einer zentralen Topologie kann auch selbst wieder als
Ausgangspunkt einer zentralen Architektur sein. Man denke dabei an so genannte
„Multi-Tier“ Architekturen, wo Requests von einem Server angenommen werden und
diese an die Middleware (siehe Abschnitt 4.7) und an weitere Applikationen (siehe
Kapitel 6), die durchaus auf anderen Hosts laufen können, weiterleiten. Eine weitere
interessante Möglichkeit wäre die Anbindung von Web Services über entsprechende
Gateways.
Zum Entwurf der passenden Topologie gehört auch eine entsprechende Abschätzung
bezüglich der Anforderungen, wie Erweiterbarkeit und Skalierbarkeit einer verteilten
Anwendung. Ein dezentrales System ist nicht von vornherein besser oder schlechter als
das einfache zentrale System. Wählt man die Skalierbarkeit als Kriterium, dann wird man
relativ schwer ein passendes Modell finden, da dieses wiederum nur schwer messbar bzw.
zu bewerten ist. In der Theorie bietet sich das dezentrale Modell an, in der Praxis jedoch
kann man eine gute Skalierbarkeit jedoch nur erreichen, wenn auf andere Vorteile
teilweise verzichtet wird. Der Entwurf Hybrider Systeme kann durchaus einen möglichen
27
JXTA: http://www.jxta.org (Abschnitt 5.10)
Seite 30
Kapitel 4 - Verteilte Anwendungen
Lösungsweg bieten, zumal hybride Systeme die Vorteile einzelner Topologien vereinen.
Der Nachteil hybrider Systeme ist mit Sicherheit deren Komplexität. Während
bestehende zentrale Systeme oder Zentral-Ring basierte Systeme häufig im Einsatz sind,
bieten dezentrale Systeme und deren Kombinationen mehr Entwicklungspotential.
Das xFIND-Suchsystem (siehe Abschnitt 6.5) kann je nach Anordnung der
Systemkomponenten in den Bereich Zentral-Dezentral oder in den Bereich ZentralZentral eingeordnet werden. Die derzeitige Verknüpfung der Systemteile erfolgt starr
aufgrund vorgegebener Konfigurations-Dateien. Eine Erhöhung der Skalierbarkeit ist
entsprechend
nur
mit
größerem
Administrationsaufwand
verbunden.
Sicherheitsmechanismen in der Datenübertragung wurden bisher nicht berücksichtigt. Da
vor allem das Entwicklungspotential der Hybrid-Systeme recht groß eingeschätzt wird,
werden auch in weiterer Folge Systeme dieser Kategorien näher untersucht.
Die vorgestellten Topologien sind einfache und nützliche Werkzeuge, um
Architekturen verteilter Anwendungen darstellen und entwerfen zu können. Ausgehend
von den vier Grundtypen der erläuterten Topologien, folgen in den nächsten Abschnitten
Erklärungen zu Funktionsweisen verteilter Anwendungen Es wird dabei auf
Basisbestandteile verteilter Anwendungen wie Transaktionen, Datentransfer und
Kommunikation (RPC, siehe Abschnitt 3.4) eingegangen und in weiterer Folge werden
Eigenschaften von verteilten Anwendungen erklärt. Hybride Topologien sind
Ausgangspunkt für moderne Middleware-Ansätze, die in die allgemeine Betrachtung von
Abschnitt 4.7 einfließen.
4.3.
Transaktionen
Die Übertragung von Daten und in weiterer Folge der Informationstransfer wird durch
verschiedene Mechanismen zur Verfügung gestellt. Die Übertragung der Daten aus Sicht
des OSI-Schichtenmodelles wird in verschiedenen Strukturebenen realisiert.
Fehlererkennung bei der Datenübertragung wird je nach Bedarf den einzelnen Schichten
überlassen. Zum Einsatz kommen einfache Fehlererkennungs-Strategien oder aber auch
Fehler korrigierende Verfahren. Die Fehlererkennung bzw. die Fehlerkorrektur allein ist
im Zuge der modernen Datenverarbeitung jedoch zuwenig. Wenn ein Fehler auftritt kann
das unter Umständen weit reichende Folgen auf verschiedene Systembereiche haben.
Wünschenswert wäre eine Art Benachrichtigung oder Synchronisation verschiedener
Systembereiche. Diese Anforderung wird aber in jedem Fall in der Applikationslogik
umzusetzen sein. Für reine Übertragungsprotokolle scheint diese Forderung zu komplex
zu sein. Im Hinblick auf diese Arbeit ist jedoch auch dieser Aspekt recht interessant, da
verteilte Systeme durchaus in der Lage sein sollten, diese Anforderungen zu erfüllen.
Eine Möglichkeit diese Anforderungen umzusetzen, ist mit dem Einsatz von
Transaktionen gegeben. Eine Transaktion hat eine spezielle Bedeutung im Bereich der
Computerwissenschaften. Eine Transaktion wird als eine Reihe oder Abfolge von
Datentransfer
Mechanismen
bezeichnet.
Dies
könnten
Datenbank
Manipulationsoperationen sein sowie Mechanismen, in denen ein Datenaustausch
zwischen Komponenten erfolgt. Dabei wird als Transaktion die Gesamtheit dieser
Abfolge von Datentransferoperationen bezeichnet. [TechTarget 1999c]
Zum Beispiel könnte man eine Warenbestellung (über das Web) als Transaktion
sehen. Ein Konsument bestellt eine Ware, indem er ein entsprechendes Formular ausfüllt
und absendet. Das Bestellsystem überprüft in den nächsten Schritten die Verfügbarkeit
der bestellten Produkte anhand von Datenbankabfragen, berechnet Preis und Lieferzeit,
Seite 31
sowie Zahlungsmodalitäten. Das System stellt die Abfrage-Ergebnisse zu einer
Antwortseite zusammen und retourniert sie dem Konsumenten. Erst wenn der Konsument
die Antwortseite bestätigt (zahlt, etc.) und er auf diese Bestätigung eine gültige
Rückmeldung vom System erhält, ist die Transaktion abgeschlossen. Tritt in dieser
Abfolge ein Fehler auf, Übertragungsfehler, Clientfehler, Serverfehler, logistische Fehler
etc., müssen alle zuvor getätigten Datenbankmanipulationen wieder korrigiert werden
(roll back). Um Transaktionen verwalten und überwachen zu können, werden so genannte
Transaktionsmanager oder Transaktions-Monitore eingesetzt. Diese Programme
verwenden ein so genanntes Two-Phase-Commit (2PC) Protokoll. [TechTarget 1999a]
[Schlichter 2000]
Eine verteilte Transaktion ist die Gesamtheit aller nicht lokalen Transferoperationen
innerhalb einer Transaktion. Eine verteilte Transaktion bedient sich dabei verschiedener
Dienste und Einrichtungen. Eine verteilte Transaktion muss der ACID28 Eigenschaft
genügen [Chen 1995]. Atomicity funktioniert nach dem alles oder nichts Prinzip. Es
werden entweder alle Daten gesichert bzw. übertragen oder gar keine. Consistency
(Konsistenz) muss nach jeder Transaktion gewährleistet sein. Es darf kein undefinierter
Zustand auftreten. Eine Transaktion führt ein System von einem konsistenten Zustand
wieder in einen konsistenten Zustand über. Transaktionen die unabhängig voneinander
ausführbar sind (parallel, ohne Abhängigkeiten) genügen der Isolations-Eigenschaft. Ist
eine Transaktion abgeschlossen, sind die Daten dauerhaft gespeichert und durch
Systemfehler nicht zerstörbar (Durability – Permanenz - Haltbarkeit). Davon
ausgenommen sind Hardwarefehler wie Festplatten Crashs etc. Das ACID Konzept einer
Transaktion wird im ISO29 Standard ISO/IEC 10026 beschrieben, wo jede der vier
genannten Eigenschaften mittels Benchmark Tests überprüft werden kann. Das
Transaction Processing Service (TPS) wird von Transaktions-Monitoren oder
Transaktions-Manager verwendet. [TechTarget 1999c] [Schlichter 2000]
Das 2PC Protokoll erlaubt es, in einem verteilten System Transaktionen zu
synchronisieren, eine Sicherstellung abzugeben wenn eine Transaktion erfolgreich
getätigt worden ist und einen Rollback-Mechanismus im Fehlerfall einer Transaktion
auszulösen. Der Transaktionsmanager koordiniert alle Transaktionen der beteiligten
Computer, indem er die Transaktions-Requests verteilt. Jeder teilnehmende Server
verwaltet für sich selbst eine Transaktions-Logdatei und sendet ein „Ready-To-Commit“
Signal an den Transaktionsmanager. Erst wenn der Transaktionsmanager von allen
beteiligten Servern das „Ready-To-Commit“ Signal bekommen hat, gilt die Transaktion
als abgeschlossen. Der Transaktionsmanager benachrichtigt nun alle beteiligten Server,
28
29
ACID: Atomicity, Consistency, Isolation, Durability
ISO: International Organisation for Standardization:
ISO/IEC 10026-2:1998
Distributed Transaction Processing -- Part 2: OSI TP Service
ISO/IEC 10026-3:1998
Distributed Transaction Processing -- Part 3: Protocol specification
ISO/IEC 10026-4:1995
Distributed Transaction Processing: Protocol Implementation Conformance Statement
(PICS) proforma
ISO/IEC 10026-5:1998
Distributed Transaction Processing -- Part 5:
Application context proforma and guidelines when using OSI TP
ISO/IEC 10026-6:1995
Distributed Transaction Processing -- Part 6: Unstructured Data Transfer
ISO/IEC 13244:1998
Open Distributed Management Architecture
ISO/IEC 14750:1999
Open Distributed Processing -- Interface Definition Language
ISO/IEC 14752:2000
Open Distributed Processing -- Protocol support for computational interactions
ISO/IEC 14753:1999
Open Distributed Processing -- Interface references and binding
ISO/IEC 14769:2001
Open Distributed Processing -- Type Repository Function
ISO/IEC 14771:1999
Open Distributed Processing -- Naming framework
ISO/IEC 14834:1996
Distributed Transaction Processing -- The XA Specification
Seite 32
Kapitel 4 - Verteilte Anwendungen
dass die Transaktion abgeschlossen ist. Die Server können ihre Logdateien abschließen
und gelockte Ressourcen wieder freigeben. Im Fehlerfall können dann die Server anhand
ihrer eigenen Logdateien selbständig mit dem Rollback das System wieder in einen
konsistenten Zustand bringen. Die drei wesentlichen Signale im Two-Phase-Commit
Protokoll sind BEGINN, COMMIT und ROLLBACK im Fehlerfall. [Bjorklund 1997]
[TechTarget 1999b]
Weiters baut das Transaction Processing Service auf CCR30 und ACSE31 auf.
Aufgrund verschiedener Synchronisationsmöglichkeiten erlaubt das CCR Service
Applikationen bestimmte Vorgänge (funktionale Abläufe) als atomar zu betrachten. Diese
Vorgänge müssen wiederum der ACID Eigenschaft genügen. CCR verwendet dabei das
„Three-Phase-Commit“ Paradigma, das drei Teilnehmer zu einer Gemeinschaft vereint.
Dabei übernimmt ein Teilnehmer Kontrollfunktionen und die beiden anderen stellen die
Transaktionspartner dar. Der Kontrolleur besitzt Aufgaben wie die Transaktionspartner
zu benachrichtigen, dass sie ihre Transaktionsbereitschaft anbieten, Transaktionspartner
auffordern eine Transaktion zu beginnen, Transaktionspartner auffordern ihren Rollback
Mechanismus für eine Aktion zu starten, oder einen Wiederherstellungs- Mechanismus
bei Datenverlust in Folge von Kommunikationsproblemen oder Programmfehlern
durchzuführen. Die Transaktionspartner müssen ihre Transaktionsbereitschaft dem
Kontrolleur mitteilen, den Kontrolleur benachrichtigen wann ein Rollback Mechanismus
beendet worden ist, oder einen Wiederherstellungs- Mechanismus bei Datenverlust in
Folge von Kommunikationsproblemen oder Programmfehlern zu starten. [IFLANET
1995]
ACSE ist ein Service das Applikations-Gemeinschaften gründen und auflösen kann.
Diese Gemeinschaften werden auch als Applikations-Service Elemente bezeichnet. Diese
Service Elemente können auch untereinander in verbindungsloser (Connection-Less)
Weise oder in verbindungsorientierter (Connection-Oriented) Weise kommunizieren. Der
verbindungslose Modus besteht aus einem einfachen Daten Service, deren Requests nicht
bestätigt werden. Im Fehlerfall gehen Daten ohne Benachrichtigung der Teilnehmer
verloren. Der verbindungsorientierte Modus besteht aus zwei bestätigten Diensten
(Establishment und Release), die mittels Request und Response ihre Daten übertragen
bzw. abgleichen und einem unbestätigten Service (Abort). Mit diesen drei Diensten ist es
möglich, applikationsabhängige Daten wie Namen, Adressen, Kontext auszutauschen,
eine Authentifizierung durchzuführen, Requests anzunehmen oder abzulehnen.
[IFLANET 1995]
Im nächsten Abschnitt werden Modelle erklärt, welche Daten verteilt halten und
verwalten können. Dabei handelt es sich nicht um Datenbankmodelle, sondern um
bestehende Technologien im Bereich verteilter Dateisysteme. Anhand dieser
Technologien, soll dem Leser ein erster Einblick auf bestehende Lösungen sowie auf
Teilproblematiken wie Namensvergabe, Replikation und Transparenz gegeben werden.
30
CCR: Commitment, Concurrency, and Recovery (CCR) service (ISO 9804 and 9805)
Das ACSE Service ist im ISO 8649 Standard definiert, das ACSE Protokoll ist im ISO 8650 Standard spezifiziert.
31
ACSE: Association Control Service Element (definition: ISO 8649; specification: ISO 8650)
Seite 33
4.4.
Verteiltes Dateisystem
Verteilte Dateisysteme sind weit verbreitet, besitzen eine große Akzeptanz und setzten
bewährte Technologien ein. Weitere Vorteile sind deren Datensicherheit und die
Verwendung standardisierter Kommunikationsschnittstellen. Des Weiteren verfügen sie
über entsprechende Identifikationsmechanismen die auf verteilte Applikationen
anwendbar sind. Der Autor möchte deshalb in diesem Abschnitt einen kurzen Überblick
über verschiedene Möglichkeiten der verteilten Datenspeicherung geben. Da es eine
große Anzahl verschiedener Spezifikationen und entsprechende Implementierungen gibt,
wird im Rahmen dieser Arbeit lediglich eine Auswahl von interessanten Modellen
erwähnt. Einen guten Überblick erhält man auch in [Mullender 1993].
4.4.1.
Network File System NFS
Dieses wurde von Sun für Unix Systemumgebungen entwickelt. NFS ist eines der
bekanntesten und am weitest verbreiteten verteilte Dateisystem. Das NFS verteilt zwar
selbst keine Daten, sondern bietet die Möglichkeit über eine entsprechende Client-Server
Architektur auf Datenbestände von verschiedenen Speichereinheiten zugreifen zu
können. Die Zugriffe auf einen entfernten Datenbestand bleiben so für den Benutzer
Transparent (Location). NFS erlaubt entsprechend der Rechtevergabe für die Objekte den
schreibenden und lesenden Zugriff. Die Zugriffsrechte beschränken sich allerdings auf
lokal existierende Benutzer und Gruppen, was die Anbindung von Dateisystemen
außerhalb des Administrationsbereiches des NFS Systems unmöglich macht. Diese
Einschränkung verbietet einen global geschützten Zugriff auf verteilte Datenbestände auf
Basis von NFS. [Neubauer et al. 1998]
Backup in einem NFS System funktioniert über diverse Backup-Prozeduren der
vernetzten lokalen Dateisysteme. Ein Backup im NFS System ist so wiederum als
Gesamtheit der Einzelbackups zu sehen. Es entstehen keine zusätzlichen Kosten
bezüglich des Verwaltungsaufwandes, da das Backup eigenständig von dem jeweiligen
System durchgeführt wird. Aus diesem Grund ist auch eine komplette Rekonstruktion des
NFS Datenbestandes möglich. [Neubauer et al. 1998]
Wie schon erwähnt basiert das NFS auf einer Client-Server Architektur. Die
Kommunikationsschicht bildet das NFS Protokoll. Dieses wurde im [RFC 1094]
spezifiziert. Das NFS Protokoll setzt auf RPC Aufrufen auf und ist prinzipiell an kein
Transportmedium oder Transportprotokoll gebunden. Jedoch implizieren die RPC
Aufrufe eine vordefinierte Transportarchitektur. Dies schließt wiederum den Einsatz
verschiedener Transportprotokolle nebeneinander aus. Weiters wird das Quality of
Service32 der RPC Implementierung überlassen.
4.4.2.
Andrew File System
Das Andrew File System (AFS) baut auf der Basis Technologie einer weltweit
verteilten Client-Server-Architektur auf. Das ASF soll sich so gegenüber dem User als
eine große virtuelle Festplatte oder einem gigantischen Verzeichnis, das sich aus
Unterverzeichnissen auf der ganzen Welt zusammensetzt, präsentieren. Entwickelt wurde
das AFS an der Carnegie Mellon University33 und wird von Transarc Corporation34
32
Quality of Service (Dienstgüte): Zusammenfassung verschiedener Kriterien, die die Güte eines Dienstes im Netz
hinsichtlich Geschwindigkeit und Zuverlässigkeit beschreiben. Weiters gilt dies für die Bereitstellung einer garantierten
Dienstgüte und die Fähigkeit eines Datennetzes eine entsprechende Dienstgüte anfordern zu können.
33
Carnegie Mellon University: http://www.cmu.edu
Seite 34
Kapitel 4 - Verteilte Anwendungen
weiterentwickelt und kommerziell vertrieben. Der Zusammenschluss (mounten) von
mehreren AFS Servern erlaubt einen transparenten Zugriff (Orts- und
Zugriffstransparenz) auf die gespeicherten Daten. Des Weiteren bietet das AFS System
auch eine Erweiterung der Ortstransparenz für den User selbst. Die Eindeutigkeit der File
Namen und Filegruppen ist unabhängig vom Speicherort und Zugriffsort des Users
(globaler Filename). Dies macht den Filetransfer mittels verschiedenster Protokolle (ftp,
kermit, etc.) überflüssig und so ist es in einem AFS möglich, File-Sharing mit
individuellen AFS Usern bzw. mit ausgezeichneten Gruppen von AFS Usern zu betreiben
[OSF 1991a]. Diese Form des File-Sharing ermöglicht ein gemeinschaftliches Arbeiten
an verschiedenen Dokumenten. Weiters ist ein gemeinsamer Zugriff auf verteilte
Softwarekomponenten möglich sowie der Zugriff auf dezentrale Anwendungssoftware
und Datenbankbestände. Bestimmte Untereinheiten des AFS Systems werden mit volume
bezeichnet. Die Datenübertragungsprotokolle sind für Datenübertragung in Wide-AreaNetwork (WAN) ausgelegt. Client-Caching Mechanismen reduzieren die Netzwerk- und
Serverbelastung. Die Datenübertragung selbst erfolgt über AFS RPC. Um die
Übertragungseffizienz zu steigern, werden die Daten bei der Übertragung in RPC Streams
gepackt. [OSF 1991b] [Transarc et al.]
Für die Datensicherheit ist im AFS System ein auf Kerberos35 basierender
Authentifizierungsmechanismus vorgesehen. Entsprechend muss sich ein User vor der
Nutzung der AFS Dienste am AFS System anmelden. Ist ein User ordnungsgemäß am
System angemeldet, steuern AFS Access Control Lists (ACLs) den Zugriff auf die Daten
und Ressourcen. Diese ACLs werden für jede Ressource eigenständig verwaltet und
geben Usern und Gruppen differenzierte Möglichkeiten auf Datenbestände und andere
Ressourcen (periphere Geräte) zuzugreifen. Als Beispiele der Rechteverwaltung für
verteilte Ressourcen über ACLs können die Erlaubnis Dateien auszudrucken oder
Datenbestände in Datenbanken zu bearbeiten genannt werden. [OSF 1991d]
AFS Datenbankbestände und Applikationen werden mehrfach auf File Servern
repliziert36 um einerseits Ausfallssicherheit und Zuverlässigkeit des Systems
gewährleisten zu können und andererseits die Serverlast oder auch die Netzwerklast
verteilen zu können. In Abbildung 4.1 ist eine mögliche AFS Struktur ersichtlich. Die
grau skizzierten Bereiche werden als Volume bezeichnet. Ähnlich einem Directory
Service (z.B. X.50037, LDAP38) in verteilten Computer Systemen wurde auch die
hierarchische Namensvergabe gewählt. [OSF 1991c] [Transarc 1996]
34
Transarc Corporation: http://www.transarc.com
Kerberos ist ein Authentifizierungsprotokoll für Netzwerkumgebungen und wurde am MIT entwickelt für strenge
Authentifizierung in Client/Server Anwendungen unter Verwendung von secret-key cryptography. Siehe auch
http://web.mit.edu
36
Eine Gruppe von Servern und Clients wird als cell bezeichnet.
37
X.500: ISO/IEC 9594-1:1993 Standard. Siehe auch http://www.dante.net/np/ds/osi/9594-1-X.500.A4.ps
38
LDAP: Lightweight Directory Access Protocol (v3) [RFC 2551]
35
Seite 35
Abbildung 4.1: Struktur in einem AFS System mit eindeutiger Namensgebung [Transarc 1996]
Eine Weiterentwicklung des AFS stellt das DFS (Distributed File System) von der
Open Software Foundation (OSF39) im Rahmen des Distributed Computing Environment
(DCE) dar. Das OSF/DCE System spezifisiert eine Reihe von Diensten- wie Directory
Service, Security Service, Backup Service und anderen Diensten-, angelehnt an Standards
und Quasistandards (siehe auch Abschnitt 4.7.2). Einige wesentliche Unterschiede
zwischen AFS/DFS Systemen zu NFS werden in der nachfolgenden Tabelle 4.2
dargestellt. [Transarc 1996]
AFS/DFS
File Server und Clients einer logischen Einheit bilden einen
Verbund (cell).
Globale Namensvergabe für alle Ressourcen.
Die Administration
erfolgt über Sammlungen von
Datenbeständen (volumes).
Übertragungsprotokolle sind zustandsbehaftet.
Datei besitzt Kenntnis vom Client.
Filereplizierung ermöglicht Lastverteilung.
Gute Performance in Wide-Area-Netzwerken.
System ist gut skalierbar.
Administration von jedem Client möglich.
User definierbare Gruppenrechte.
Wechselseitige Authentifizierung bei Systemprozessen
und Datenbanken. Stets Verwendung von sicheren RPC.
Keine eignen Fileserver notwendig zur Anbindung
verschiedener Rechnerarchitekturen unter Verwendung
verschiedener BS.
NFS
Jeder File Server wird eigenständig verwaltet.
Keine konsistente und allgemein gültige Namensvergabe.
Administration erfolgt für individuelle Datenbestände.
Übertragungsprotokoll ist zustandslos, keine Lock
Operationen möglich.
Keine Möglichkeiten der Lastverteilung.
Ineffizient in Wide-Area Konfiguration.
Arbeitet effizient in kleiner bis mittlere Konfiguration.
Administration über Telnet oder von ausgezeichneten
Maschinen.
Gruppenrechte werden vom Systemadministrator
vergeben.
Verwendung von Sicheren und unsichern RPC.
Zugriff von UNIX fremden Systemen nur über spezielle
Clients möglich, oder über die Anbindung an geeignete
File Server (Samba).
Tabelle 4.2: Unterschiede zwischen NFS und AFS/DFS – Systemen [Transarc 1996].
Die beiden dargestellten Möglichkeiten verteilter Dateiverwaltung stellen die
momentan gängigsten Modelle dar und decken von ihren Grundprinzipien den größten
Bereich anderer Entwicklungen ab. Weitere Entwicklungen wären das MDFS40, EDFS41,
CDFS42 die von [Kon 1996] ausführlich beschrieben bzw. miteinander verglichen wurden
39
OSF: http://www.opengroup.org
MDFS: Microsoft Distributed File System;
http://www.microsoft.com/ntserver/nts/downloads/winfeatures/NTSDistrFile/default.asp
41
EDFS: ECHO Distributed File System; ftp://ftp.cag.lcs.mit.edu/dm/papers/birrell:echo.ps.gz
42
CDFS: CODA Distributed File System; http://www.coda.cs.cmu.edu
40
Seite 36
Kapitel 4 - Verteilte Anwendungen
und SFS43 das in [Gütl 2002] kurz beschrieben wird. Schon aus den Konzepten der beiden
vorgestellten Systeme NFS und AFS geht hervor, dass es in Zukunft aufgrund der
schnelllebigen Informationswelt Informationsstrukturen geben muss, die leicht skalierbar,
einfach wartbar, ortsunabhängig, und migrierbar sein müssen.
4.5.
Objektorientiertes verteiltes System - Komponentenarchitektur
Die in den vorangegangenen Abschnitten vorgestellten verteilten Systeme, basieren
zumeist auf einfache funktionale Ansätze in der Datenübermittlung. Diese funktionalen
Ansätze werden nun durch die der Integration des Objektmodells in ihrer Performanz,
Anpassungsfähigkeit und im weitesten Sinne auch in der Funktionalität erweitert. Der
folgende Abschnitt soll einen kurzen Einblick in Konzepte und den Entwurf von
verteilten Systemen auf objektorientierter Ebene liefern. Des weiteren wird versucht,
anhand von Anforderungen an verteilte Objektsysteme und deren Eigenschaften, diese zu
charakterisieren.
Die rasante Entwicklung im Bereich der verteilten Systeme führt zu immer
komplexeren monolithischen Softwarearchitekturen, die entsprechend viele Probleme
aufwerfen (z.B. Widerverwendbarkeit,). Die momentanen Anforderungen an ein
verteiltes System setzten jedoch auf kleine, selbständige Client-Server Lösungen
(vermehrt in Peer-to-Peer Technologien entwickelt), die auf einen Objektbasierten Ansatz
beruhen.
Die
Festlegung
und
die
Verwendung
standardisierter
Kommunikationsschnittstellen sind dabei ein wichtiger Aspekt. Sind diese Schnittstellen
bekannt und werden diese auch dem festgelegten Standard entsprechend eingehalten, ist
eine separierte Weiterentwicklung, die Migration und der Einsatz von Teilkomponenten
in heterogenen Systemen möglich. Die Zusammenfassung von Teilkomponenten zu
einem Framework erleichtert auch die Administration und Wartung. Diese
Zusammenfassung bestimmter Teilkomponenten (auch von verschiedenen Herstellern)
wird auch als Componentware bezeichnet. Die Vorteile der Softwareentwicklung mittels
Componentware liegen vor allem in der hohen Anpassungsfähigkeit der Teilmodule und
deren raschen Entwicklungszeit. [Fähnrich 2001]
Grundgedanken des Objektorientierten Ansatzes und die Entwicklung von
Teilkomponenten sind die mögliche Verwendung von Standard-Komponenten
unterschiedlicher Hersteller zum Einsatz in einem Gesamtsystem wie auch eine
Widerverwertbarkeit von Softwaremodulen. Dies deckt sich mit den Anforderungen an
verteilte Systemdienste, bzw. stellt erste Lösungsansätze für den Problembereich
Steigerung der Akzeptanz zur Verfügung. Weiters verlagert sich die Entwicklung weg
von der Programmierung zu einer Montage verschiedener Komponenten. Eine Definition
von Softwarekomponenten gibt Szyperski wie folgt an:
„Softwarekomponenten bezeichnet die Zusammenfassung von Modulen, die streng
kontextabhängig mit fix vordefinierter Spezifikation des Interface entwickelt werden.
Softwarekomponenten können unabhängig voneinander eingesetzt werden und stellen
Grundelemente der Softwareentwicklung dar“ [Szyperski 1998] 44.
Grundlegende Eigenschaften von Architektur-Komponenten sind eine funktional und
technisch abgeschlossene Einheit, deren unabhängige Entwicklung, das Anbieten bzw.
43
44
SFS: Semantic File System; http://www.objs.com/survey/OFSExt.htm
“A software component is a unit of composition with contractually specified interfaces and explicit context
dependencies only. A software component can be deployed independently and is subject to composition by third party”
[Szyperski 1998].
Seite 37
die Suche nach Diensten und die Kommunikation über definierte Schnittstellen. Ein
weiterer wichtiger Aspekt bei der Entwicklung von Softwarekomponenten ist die
Granularität (entspricht der Differenziertheit und Komplexität) der abgeschlossenen
Einheit (Endprodukt). Über den Grad der Granularität einer abgeschlossenen Einheit ist
eine Qualitätsbeurteilung des Softwareprodukts möglich. Komponenten mit geringer
Granularität besitzen wenige Schnittstellen und geringe Funktionalität. Sie sind leicht
gegebenen Anforderungen anzupassen, erfordern aber einen hohen Verwaltungsaufwand,
da mehrere Komponenten benötigt werden, um die Anforderungen zu erfüllen.
Komponenten mit hoher Granularität besitzen eine Vielzahl von Schnittstellen und
umfangreiche Funktionalität. Der Verwaltungsaufwand ist geringer, jedoch können
Anpassungen aufgrund der größeren Funktionalität komplex und aufwändig werden.
Komponentensoftware können, wie schon erwähnt, kategorisch unterteilt werden
bezüglich der Granularität. In Abbildung 4.2 wird ein Überblick über
Komponentenbasierte Softwareentwicklung in Zusammenhang mit der Granularität45 der
Architektur-Komponenten gegeben. Dieser Überblick zeigt auch den Zusammenhang
zwischen Abstraktion bzw. Unterteilung und dem Schichtaufbau der KomponentenArchitektur. [Fähnrich 2001]
Abbildung 4.2: Granularität in Komponentenbasierter Softwareentwicklung [Fähnrich 2001]
Wie schon einleitend erwähnt bezeichnet man die Zusammenfassung von
Einzelmodulen als Softwarekomponente (Componentware bzw. Applikation). Die
Module selbst kann man als eigenständige Objekte auffassen. In der folgenden Auflistung
werden Eigenschaften und Anforderungen von verteilten Objekten bzw. Module
festgelegt, um eine mögliche Basis zur Erstellung von Applikationen und
Softwarekomponenten bereitstellen zu können. Anhand dieser Eigenschaften kann auch
überprüft werden, welche Möglichkeiten der Erweiterung es für das vorliegende xFINDSuchsystem gibt. [Schmaranz 2001]:
• Transparenz: Transparenzeigenschaften können weiters unterteilt werden in:
~ Netzwerktransparenz: Die Applikation weiß nicht, ob das referenzierte Objekt lokal
vorhanden ist oder von einem anderen System zur Verfügung gestellt wurde.
~ Protokolltransparenz: Die Applikation muss sich nicht mehr darum kümmern, wie
ein Objekt angesprochen wird. Diese wichtige Anforderung wird dabei an die
Adressierung von Objekten gestellt, um bei einem möglichen Systemwechsel
45
Granularität: ist der Grad der Untergliederung in einzelne Module
Seite 38
Kapitel 4 - Verteilte Anwendungen
(Protokolländerung)
auch
wiederum
eine
gültige
Objektreferenzierung
bewerkstelligen zu können.
~ Schematransparenz: Es darf bei der Adressierung von Objekten kein
Adressierungsschema des Zielsystems gespeichert werden. Dies ist aus Performanceund Skalierungsgründen eine notwendige Anforderung.
~ Instanztransparenz: Eine Adresse muss für Applikationen verschiedener Systeme
und zu verschiedenen Zeiten stets auf das gleiche Objekt verweisen.
~ Transparente Replikation: Adressen müssen unabhängig vom jeweiligen Objektort
sein um einerseits transparente Replikate von Objekten erzeugen zu können und um
andererseits bessere Skalierbarkeit und Performance bieten zu können. Dies setzt
wiederum spezielle Synchronisationsmechanismen zwischen den replizierten Objekten
voraus.
~ Plattformtransparenz: Applikationen sollen Objekte ansprechen können, die auf
verschiedenen Zielplattformen laufen (Unix, Windows, Apple, etc.) und in
verschiedenen Implementierungen vorliegen (Java, C++, etc.). Diese Forderung
impliziert die Ausnützung der jeweiligen Vorteilte von Hardware und der darauf
laufenden Software. In Java geschriebene Programme unterstützen z.B. dynamisches
Classloading zur Laufzeit. C++ Programme sind direkt für ihr Zielsystem kompiliert.
Um der Anforderung der Plattformunabhängigkeit gerecht werden zu können, bedarf
es der Festlegung und Verwendung von High-Level Protokollen. Objekte
unterschiedlicher Architekturen unterhalten sich dann über so genannte Wrapper
Objekte, die ihrerseits die High-Level Protokolle implementieren und so die
Schnittstellen des eigentlichen Objektes festlegen.
~ Applikationstransparenz: Eine Applikation, die ihrerseits aus Objekten besteht, soll
nicht das Endstadium in der Programmentwicklung sein, sondern selbst wiederum als
Objekt referenzierbar sein. Die Betrachtung einer Applikation als Objekt führt so zur
Erzeugung kleiner funktionaler Einheiten, die Teil eines Gesamtsystems sind. Die
Komplexität des Gesamtsystems (Programm) teilt sich so auf die Komplexität der
Bestandteile auf. So muss jedes Objekt für sich den Eigenschaften und Anforderungen
genügen.
• Stabilität: Die Stabilität ist neben der Anforderung bezüglich der Transparenz von
Adressen eine wichtige Eigenschaft in verteilten Objektsystemen. Wird der Zugriff
auf ein Objekt verändert, z.B. löschen eines Objektes oder Adressänderung auf Grund
eines Ortswechsel, muss klar definiert sein, wie Adressen als Objektreferenzierung
weiterhin Gültigkeit besitzen. Adressen müssen robust gegen Verschiebung (auch
löschen) und robust gegen unbeabsichtigten Austausch sein (ein beabsichtigter
Austausch wäre das Modifizieren eines Objektes).
• Verteiltheit: Ein Objekt repräsentiert sich als logische Einheit, das aus vielen
Teilobjekten von verschiedenen Systemen gebildet werden kann. Dabei kann es auch
in den verschiedenen Systemen vorkommen, dass Daten nicht zentral gehalten
werden, sondern wiederum verteilt im System liegen. Das Objektsystem selbst muss
geeignete Mechanismen vorsehen, um der Anforderung bezüglich der Betrachtung
eines virtuellen verteilten Objekts als logische Einheit gerecht werden zu können.
Entsprechend dieser hochgradigen Verteiltheit von Objekten werden auch spezielle
Anforderungen
an
Sicherheitsund
Zugriffmechanismen
gestellt.
Zugriffsmechanismen müssen dabei auch die Steuerung von Datenreplikaten
bewerkstelligen. Um eine gute Lastverteilung bewerkstelligen zu können, soll der
Zugriff auf die Daten bzw. die Replikate möglichst geographisch nahe zum
Netzwerkknoten erfolgen.
Seite 39
• Objektbegriff: Als Objekt in einem verteilten Objektsystem bezeichnet man eine
Einheit die über eine eindeutige Adresse referenzierbar ist. Ein Objekt hat die Aufgabe
Inhalte zu kapseln. Inhalte können Daten im herkömmlichen Sinne sein (Datenbanken,
Filesystem, etc.) oder aber auch verschiedene externe Ressourcen. Aus der Forderung
der Applikationstransparenz folgt, dass Objekte zu einer Objekthierarchie
zusammengefügt werden können. Dabei ist jedes Teilobjekt der Objekthierarchie
eindeutig über eine entsprechende Adresse referenzierbar. Ein Objekt kann über
beschreibende Metadaten charakterisiert werden. Entsprechend den zuletzt
beschriebenen Eigenschaften müssen Objekte auch Möglichkeiten (Interface) bieten,
einfach auf Inhalte und den Metadaten zugreifen zu können. Der Zustand von
Objekten ist abhängig von dessen Aufgabe bzw. von dessen Kontext. Objekte können
statisch Eigenschaften besitzen, d.h. rein nur Daten speichern, liefern oder
modifizieren, oder aber auch aktiv sein. Aktive Objekte führen verschiedene
eigenständige Aktionen in Abhängigkeit des Auftraggebers aus. In diese Kategorie
fallen z.B. mobile Agenten diverser Suchmaschinen. Objekte müssen auch
Möglichkeiten bieten, ihre Funktionalität bzw. deren Verwendung abfragen zu
können. Dies ist insbesondere bei aktiven Objekten von großer Wichtigkeit.
• Navigation im Objektraum: Die Transparenz- und Stabilitätseigenschaft auf der einen
Seite und die Eigenschaften von Objekten auf der anderen Seite sagen nichts über die
Problematik aus, wie man zu den Objekten gelangt, bzw. wie Objekte gefunden
werden können. Die entscheidende Frage ist also, wie man die Adresse von einem
Objekt erhält und wie man von diesem Objekt aus weitere Objekte befragen bzw.
referenzieren kann. Zurzeit gibt es zwei gängige Navigationsmöglichkeiten im
verteilten Objektraum.
~ Hierarchische Navigation: Bei der hierarchischen Navigation erfolgt der Zugriff auf
Objekte über einen definierten Einstiegspunkt. Von diesem aus gelangt man nach dem
Top-Down Prinzip zu dessen logischen „Kindern“, usw. Dabei ist die Reihenfolge der
Aufrufe entsprechend der Hierarchie vorgegeben.
~ Graphennavigation: Eine Navigation in diesem Sinne erfolgt über direkte
Referenzen. Ziele werden direkt angesprungen. Dabei stehen die Objekte nicht
unmittelbar miteinander in wechselseitiger Beziehung. D.h. es ist der Weg „zurück“
zum Ausgangspunkt unter Umständen nicht eindeutig.
Um von beiden oben genannten Navigationsmöglichkeiten profitieren zu können,
müssen Objekte an bestimmte Relationen gebunden werden. Über eine bidirektionale
Relation ist der Weg in der Graphennavigation auch rückverfolgbar. Objektorientierte
Datenbankmodelle verfolgen dieses Ziel mit ähnlichen Modellen. Das Linksystem in
Hyperwave46 etwa definiert immer eine „Parent to Children“ Beziehung als
gemeinsame Relation beider Objekte. Des Weiteren verhindern bidirektionale
Relationen sogen. „dead Links“. Das sind Referenzen die ins “Nichts” führen.
Relationen sollen auch Metainformationen halten können. Eine Klassifizierung von
Objekten und in weiterer Folge die Suche ist so über diese Relationen möglich. Aus
diesem Grund ist es auch wichtig, dass Relationen nicht typisiert sind. Diese Ansätze
bieten auch verschiedene Möglichkeiten der Navigation. Statische Varianten können
so um dynamische Varianten (aktive Objekte) erweitert werden.
Bei all den vorgestellten Navigationsvarianten darf aber nie im Adressraum selbst
navigiert werden. Würde man eine systemgebundene Adressierungsstruktur mit einer
logischen Navigationsstruktur vermischen, kommt es mit großer Wahrscheinlichkeit
46
Hyperwave: http://www.hyperwave.com
Seite 40
Kapitel 4 - Verteilte Anwendungen
zu Inkonsistenzen. Die Skalierbarkeit der Adressierung geht so auf Kosten der
Navigation verloren.
• Einbettung und Kombination von Fremdsystemen: Eine große Problematik ergibt sich
bei der Einbettung von Fremdsystemen und deren Datenbeständen. Meist ist eine
Reorganisation des Datenbestandes von Nöten. Diese Migration des Datenbestandes
verursacht neben dem hohen Verwaltungsaufwand auch enorme Kosten. Aufgrund
dieser Tatsache ist die Akzeptanz, Datenbestände an neue Systeme und
Systemumgebungen anzupassen, sehr gering. Deshalb neigt man meist zur Schaffung
neuer Systemumgebungen, die den Anforderungen des alten Systems entsprechen.
Diese Neuentwicklungen widersprechen aber der Widerverwendbarkeit von Objekten
und Softwarekonstrukten. Die Neuentwicklungen gehen oft auch auf Kosten der
Funktionalität.
Verschiedene Anforderungen von unterschiedlichen Systemen zu kombinieren
erfordern standardisierte Modelle. Diese Modelle müssen auch Änderungen der
Anforderungen in Betracht ziehen. Als Beispiel wäre hier die Anforderung ein
Filesystem mit Datenbankabfragen bzw. deren Datenbestände mit den
Metainformation, die über eine externe Suchmaschine klassifiziert werden, zu
kombinieren. Meist wird als Lösung diese Anforderung auf ein bestimmtes
Datenbankmodell abzubilden, angeboten. Die Erweiterbarkeit des Datenbankmodelles
ist dann jedoch beschränkt, da das Modell zumeist nur von einem Anbieter gewartet
und erweitert wird. Günstig wäre es die Funktionalität anderer Systeme nutzen bzw.
diese in das bestehende System integrieren zu können.
• Skalierbarkeit: Skalierbarkeit impliziert eine komfortable Erweiterbarkeit des
Gesamtsystems. Dabei dürfen die bereits aufgezeigten Anforderungen bezüglich
Transparenz, Stabilität, Verteiltheit und Navigation nicht verloren gehen. Aspekte der
Skalierbarkeit von verteilten Objektsystemen sind:
~ gleichzeitige Benutzer: Das Objektsystem muss eine „vernünftige“ Anzahl von
gleichzeitigen Benutzern bedienen können.
~ Aufenthalt des Benutzers: Der Zugang zum System darf nicht nur über einen
bestimmten Einstiegspunkt ermöglicht werden.
~ Replikation von Content: Contentreplikate sind bei hohem Nutzungsgrad zur
Verringerung der Netzwerklast erforderlich. Dabei ist darauf zu achten, dass eine
Änderungsweitergabe erfolgt. Darum müssen alle Replikate mit dem Originalobjekt
synchronisiert werden. In diesem Zusammenhang ist auch an die Möglichkeit des
verteilten Sperrens von Daten (Daten werden manipuliert) zu denken.
~ Objektverwaltung: Die Verwaltung der Objekte und der Relationen bzw. der
Adressen darf nicht auf Kosten der Performance gehen. Diverse Algorithmen zur
Verwaltung müssen robust gegenüber der Veränderung der Objektanzahl und
gegenüber der Veränderung der Größe von Objekten sein.
~ Serververwaltung: Die Serveranzahl eines Systems und deren Kombination dürfen
keinen Engpass bezüglich der Skalierung bewirken. Ebenso ist beim Entwurf der
Serverstruktur (Topologie) darauf zu achten, dass die Kommunikation bei der
Replikation und der Synchronisation möglichst gering gehalten wird.
Es gibt zurzeit noch kein System, das alle oben erwähnten Eigenschaften und
Anforderungen erfüllt. Es gibt stattdessen Lösungen zu den verschiedenen
Teilproblematiken. Jedoch ist nicht gewährleistet, dass Teillösungen auch eine adäquate
Lösung für ein Gesamtsystem ergeben. Lösungen in Teilbereichen könnten wiederum mit
Lösungen anderer Teilbereiche im Widerspruch stehen. Da der Zusammenschluss von
Seite 41
Teillösungen nicht unmittelbar zum Ziel führt, muss man Kompromisse eingehen, d.h.
die Vor- und Nachteile der Teilsysteme ermitteln, miteinander vergleichen und
entsprechende Anpassungen bezüglich des Zielsystems vornehmen. [Schmaranz 2001]
Verbesserungen in der Architektur des xFIND-Suchsystems sind zwar nicht Teil
dieser Arbeit, jedoch spielen auch viele Eigenschaften bei der Erweiterung bezüglich
beim Entwurf der Kommunikationsschicht eine wichtige Rolle. Etwa die Einhaltung
Protokolltransparenz zielt darauf ab, standardisierte Schnittstellen anzubieten, um beim
Einsatz von Übertragungsprotokollen möglichst flexibel zu sein. In weiterer Folge ist
man dadurch auch unabhängiger von der zu verwendeten Hardwareumgebung
(Plattformtransparenz). Was bisher im Architekturansatz von xFIND gänzlich
unberücksichtigt blieb, ist das automatische Auffinden von möglichen Diensten oder das
Anbieten von Ressourcen. Mechanismen die durch Navigation im Objektraum
(Graphennavigation) beschrieben wurden, werden teilweise von Systemen wie JXTA als
dynamische Varianten umgesetzt.
Ein passendes Zitat als Abschluss der Abstrakten Betrachtungen formulierte Antoine de
Saint-Exupery (1900-1944) mit: Perfektion ist nicht erreicht, wenn nichts mehr
hinzugefügt werden kann, sondern wenn nichts mehr übrig ist, was man weglassen kann.
Nachdem Konzepte und Eigenschaften bzw. Anforderungen von objektorientierten
verteilten Systemen vorgestellt wurden, wird nun näher auf eine zukunftsträchtige
Technologie (Peer-to-Peer) eingegangen, die insbesondere den Anforderungen bezüglich
Transparenz, Verteiltheit und Skalierbarkeit Rechnung trägt.
4.6.
Client-Server versus Peer-To-Peer
Die bisher vorgestellten Softwarearchitekturen legen zumeist das Client-Server
Prinzip als Grundlage fest. Eine Erweiterung dieser einfachen Architektur bezüglich
Kommunikation und Verwaltung stellt der Peer-to-Peer (P2P) Ansatz dar. Im Gegensatz
zu reinen Client-Server-Lösungen, wo die Zuordnung der Software zu Client und Server
auch die Rollenverteilung festlegt, fällt diese Zuordnung bzw. die Rollenverteilung im
P2P-Ansatz. In der Informationsauffindung spielt diese Rollenverteilung eine wichtige
Rolle. Die Ergebnismenge ist abhängig von den zur Verfügung stehenden Diensten. Es ist
auch nicht klar, wer die Information schlussendlich findet bzw. in weiterer Folge wer die
Ergebnisse liefert. Gleiche Suchanfragen können zu unterschiedlichen Ergebnissen
führen, in Abhängigkeit der eingesetzten Dienste und der Rollenverteilung im Netzwerk.
Bei P2P-Architekturen werden die Komponenten als „Applikationen“ bezeichnet, die
unter gewissen Voraussetzungen als gleichberechtigt angesehen werden können. Diese
Betrachtung der Softwarekomponenten setzt auf ein stetes Geben und Nehmen
verschiedenster Dienste. Um ein besseres Verständnis für diesen Abschnitt zu
bekommen, wird zuerst nochmals die Client-Server Technologie in Bezug auf die
Kommunikationseigenschaften erklärt. Diesen Erklärungen folgen Erläuterungen zu P2P
als Technologischer Ansatz. Dem Leser werden dabei spezielle Eigenschaften bzw.
charakteristische Anforderungen des P2P-Ansatzes näher gebracht.
Reine Client-Server-Architekturen bieten nur einen streng hierarchischen
Datentransport-Mechanismus. Ein Client fordert Daten mittels eines Servercalls von
einem bestimmten Server an. Dieser reagiert auf die Anfrage des Client, sammelt die
Daten, stellt die Daten zur Verfügung und sendet diese dem anfragenden Client als
Antwort in einem definierten Format. In dieser strengen Hierarchie gibt es spezielle
Server, die Anfragen entgegen nehmen und Antworten verschicken. Clients können nur
Seite 42
Kapitel 4 - Verteilte Anwendungen
Anfragen stellen und müssen auf Antworten des Servers warten. Bei dieser
Vorgehensweise ergeben sich bereits die ersten Probleme. Die Zuverlässigkeit und
Geschwindigkeit hängt zumeist von der Verfügbarkeit eines Servers oder eines
Serververbundes ab. [Möller 2001c]
P2P-Modelle hingegen vereinen oft beide Möglichkeiten, treten einerseits als Server
und andererseits als Client auf. In weiterer Folge können Peers lediglich auch nur
Vermittler sein, die anhand bestimmter Entscheidungskriterien Anfragen an weitere
Dienste weiterleiten. Dabei lassen sich schon die Vorteile des P2P Konzepts ableiten:
Bessere Skalierbarkeit, da die Anzahl der Peers nicht festgelegt bzw. beschränkt ist und
bessere Wartbarkeit durch kleinere Softwarekomponenten bzw. deren Unabhängigkeit.
Dadurch ist eine bessere Verteilung von Ressourcen möglich. [Möller 2001c]
Durch den Einsatz der Peers in einer verteilten Umgebung ist auch eine Entkopplung
der Übertragungsschicht von der funktionalen Schicht möglich. Dadurch wird wie schon
erwähnt die Anpassung an zusätzliche Dienste erleichtert und die Erweiterung der
jeweiligen Schicht vereinfacht. Mögliche Erweiterungen können einerseits zum leichteren
Datenaustausch als Konsument oder Dienstleister beitragen, andererseits bieten
Erweiterungen sowohl in der Kommunikationsschicht als auch in der Applikationslogik
neue Anwendungsmöglichkeiten. Z.B. funktionale Erweiterungen in Suchsystemen bieten
die Möglichkeit, Informationen verteilt zu sammeln bzw. zu verarbeiten. Weiters ist auch
Ressourcensharing in Bezug auf Rechenleistung mittels P2P Technologie möglich. Dabei
steht aber immer wieder die Informationsfreiheit im Widerspruch zum Schutz geistigen
Eigentums. Diese Problematik führte auch zum Zusammenbruch vom Filesharing Tool
„Napster“47. Abwandlungen von Napster und Erweiterungen im Bereich der
Transportprotokolle führen zu getarntem Datentransfer. Es werden so genannte
steganographische48
Protokolle
eingesetzt,
um
einerseits
Zensuren
und
Abhörmechanismen zu umgehen und um andererseits Zugriff auf geschützte Bereiche
(Firewall)
zu
erlangen.
Der
Ansatz
steganographische
Protokolle
als
Sicherheitsmechanismus in der Übertragungseinheit einzusetzen, fällt somit für die
Erweiterung der Übertragungsschicht des xFIND-Suchsystems völlig aus. Es geht nicht
darum, Daten mittels Trägerdateien zu verschleiern, sondern „echte“
Verschlüsselungsstrategien bei der Übertragung sensibler Daten einzusetzen. [Möller
2001d] [Puder et al. 2000]
Im Gegensatz zu Client-Server Anwendungen sind momentane P2P-Lösungen nur
schwer administrierbar. Der Grund liegt im „Wesen“ eines Peers selbst. Ein Peer wurde
entwickelt, um gleichberechtigt und autonom handeln zu können. Da diese entsprechend
der Einsatzmöglichkeit auch verteilt über das Internet vorliegen, erfolgt auch die
Administrierung dezentral und liegt im Verwaltungsbereich des jeweiligen Anbieters.
Ansätze, Peers auch zentral verwalten und administrieren zu können, gibt es bereits. Im
Open Source Projekt JXTA49 (siehe auch Abschnitt 5.10) werden sogen. „Peer47
Napster: System auf Basis P2P zum Austausch von MP3 Musikdaten; www.napster.com
Steganographie: Ein steganographisches Verfahren verheimlicht, daß überhaupt geheime Daten existieren. Der
Gedanke dahinter: Wo niemand geheime Daten vermutet, wird sie auch niemand suchen. Steganographie-Software
versteckt die geheime Datei in einem anderen Dokument. Als so genannte Trägerdateien dienen in der Regel meist
Bilder, Sound-, Video- oder Textdateien. Dieses Verfahren kann nicht nur zum Schutz von Daten benutzt werden
sondern wird auch zur Kenntlichmachung von Urheberrechten verwendet. Wer von der Verschlüsselung nichts weiß,
nutzt die betreffende Trägerdatei ohne Einschränkungen mit der passenden Anwendung. Nur wer über die
Verschlüsselung informiert ist und zudem den Zugriff auf den verwendeten Kodierungs-Schlüssel hat, kann die in der
Trägerdatei enthaltenen Informationen entschlüsseln und für sich nutzbar machen. [Glossar 2003]
49
JXTA steht für juxtapose. JXTA wurde von SUN entwickelt und als Open Source Projekt freigegeben;
http://www.jxta.org
48
Seite 43
Monitoring Hooks“ eingesetzt, um Peers zentral verwalten zu können. Die Aktualität der
Daten ist abhängig von der notwendigen Synchronisation. Mehr Replikate bewirken eine
größere Ausfallsicherheit das Gesamtsystem. Jedoch führt dies auch zu größerem
Aufwand bei Änderungsweitergaben und bei schlechten Abgleichmechanismen
unweigerlich zu einer Erhöhung der Netzwerklast. [Möller 2001c] [Möller 2001d]
Um Sicherheit in P2P-Anwendungen gewährleisten zu können, müssen im Gegensatz
zu Client-Server-Anwendungen größere Anstrengungen unternommen werden. Durch das
Bereitstellen mehrerer Dienste ist auch die Verwundbarkeit gegenüber Angriffen
ungleich höher. Das Problem liegt in der dezentralen Verwaltung der Anwendungen.
Jedes Peer-Produkt ist selbst für die Sicherheit in seiner Applikation verantwortlich und
muss auch entsprechend Vorkehrungen treffen. Indem diese Verantwortung nicht von
Zentraler
Stelle
aus
gesteuert
wird,
müssen
P2P-Systeme
sichere
Synchronisationsmechanismen vorsehen, oder in als gesichert geltenden
Vertrauensnetzen arbeiten. Die Echtheit der Daten bzw. deren Verifizierung lässt sich
durch an Namen gebundene Prüfsummen verwirklichen (siehe z.B. Webs of Trust50 oder
Freenet51). Ebenso bewirken digitale Signaturen weiteren Schutz vor Hackerangriffen.
Ein weiteres Sicherheitsrisiko birgt der Missbrauch vieler Peers als Ausgangspunkt für
einen verteilten Denial of Service. Tausende Requests, Suchanfragen, Suchergebnisse
können damit Zielrechner zum Absturz bringen. [O’Reilly 2001] [Möller 2001c]
[Freismuth 2002]
Dieser Abschnitt hat gezeigt, dass im Gegensatz zum recht unflexiblen Client-Server
Prinzip der P2P Ansatz gerade in verteilten Systemumgebungen Vorteile bringt. Den P2P
Ansatz aber zur Gänze auf das xFIND-Suchsystem abzubilden, wäre sicherlich keine
adäquate Lösung. Das xFIND-Suchsystem besteht in seiner Architektur bereits aus
einzelnen unabhängigen Komponenten. Das Problem bisher ist die recht starre
„Verdrahtung“ der Komponenten. So sind auch die Verwaltung, die Skalierbarkeit und
die Erweiterbarkeit mit größerem Administrationsaufwand verbunden. Anforderungen
wie „ich biete an“, „ich suche“, „sichere Verbindung“, „synchrone Verbindung“, „wer
kann was“ sind teilweise in bestehenden P2P Lösungen umgesetzt. Es gilt nun die
jeweiligen Mechanismen zu analysieren um Lösungsvorschläge für das xFINDSuchsystem zu finden. Beim Auffinden der Lösungen soll aber immer auch ein Vergleich
mit bestehenden standardisierten Technologien durchgeführt werden. Deshalb bietet der
nächste Abschnitt einen Überblick über Middleware-Technologien um eine geeignete
Vorauswahl von standardisierten Übertragungstechniken treffen zu können.
4.7.
Middleware als Basiskomponente für verteilte Anwendungen
Jede Applikation nutzt verschiedene Ressourcen eines Rechners. Das jeweilige
Betriebssystem bietet den Zugriff auf die Rechenleistung des Prozessors, den Speicher,
den Bildschirm, den Drucker oder andere Dienste im System. Die Verwaltung dieser
Ressourcen kann entsprechend für die meisten Applikationen gleich gestaltet werden.
Das Betriebssystem bietet den Zugriff auf die Ressourcen über entsprechende
Schnittstellen an. In einer verteilten Systemumgebung kommen zusätzlich noch weitere
Aufwände für die Applikationen hinzu. Sie müssen Dienste bereitstellen, sie müssen mit
50
Webs of Trust: Benutzer sind anonym bzw. pseudonym und bewerten Dienste nach ihrem Ermessen. Anhand des
Pseudonyms (bekannt) oder der Bewertung eines Peers erfolgt der Datenaustausch trotzdem auf eigene Gefahr;
http://www.w3.org/Consortium/Offices/Germany/sieben.html
51
Freenet: http://freenetproject.org
Seite 44
Kapitel 4 - Verteilte Anwendungen
anderen Applikationen kommunizieren, sie müssen Daten dynamische verteilen können
und Applikationen müssen unabhängig voneinander wartbar sein. All diese
Anforderungen müssten speziell in jeder Applikation umgesetzt werden. Um diesen
Aufwand zu minimieren, bzw. den Entwurf verteilter Applikationen zu erleichtern wurde,
die „Middleware“ entwickelt.
Dieser Abschnitt soll dem Leser bestehende Technologien bzw. Vorschläge aus dem
Bereich Middleware vorstellen. Für den Autor der vorliegenden Arbeit steht aber die
Analyse von Standardwerkzeugen und standardisierten Übertragungsprotokollen im
Vordergrund. Die vorgestellten Technologien stellen keinen Anspruch auf
Vollständigkeit. Es wird lediglich eine spezielle Auswahl dargestellt, die einerseits
Basisfunktionalitäten für weitere Entwicklungen darstellen und andererseits MiddlewareLösungen konkurrierender Entwicklerfirmen bzw. Gremien sind.
Zu Beginn wird jedoch ein allgemeiner Überblick über die Grundfunktionalitäten und
Anwendungsbereiche von Middleware-Lösungen gegeben. Dieser allgemeinen
Betrachtung folgt eine Auflistung von ausgewählten Middleware-Technologien. Die
Reihenfolge dieser Einteilung gibt auch Zusammenhänge bezüglich Entwicklungsschritt
der Technologie und Firmenstrategien vor. Zu Beginn wird DCE (4.7.2) als allgemeiner
Ansatz zum Entwurf verteilter Anwendungen unter Verwendung standardisierter
Werkzeuge und Technologien analysiert. In weiterer Folge werden die Entwicklungen
COM (4.7.3; Datenaustausch über OLE), DCOM (4.7.4; Öffnung des COM Ansatzes für
weitere Plattformen) und .NET (4.7.5; Framework für webbasierte Dienste mit der
Unterstützung verschiedener Programmiersprachen) von Microsoft eingehend betrachtet.
Im Gegensatz zu den Ansätzen von Microsoft wird mono:: (4.7.6) als Open Source
Implementierung des .NET Ansatzes vorgestellt. Zur weiteren Analyse werden JavaLösungen von SUN die Multi-Tier Architektur J2EE (4.7.7) und ONE (4.7.8;
Spezifikation eines Frameworks zur Ausnützung offener Kommunikationsstandards)
diskutiert.
4.7.1.
Allgemeine Betrachtung
Nachfolgende Absätze orientieren sich an Arbeiten von [Lamersdorf 1996] [Puder et
al. 2000] und [Nehmer et al. 1998].
Middleware bezeichnet man allgemein als Kommunikationssoftware. Die Middleware
siedelt sich als Zwischenschicht (Softwareschicht) zwischen der Betriebssystemebene
und der Applikationsebene an. Diese Zwischenschicht ist eine Art Dienstleister, der
einerseits den Zugang zu den Betriebssystemdiensten bereit stellt und andererseits auch
die Verteilung von Applikationen auf mehrere Rechner im Netzwerk ermöglicht. Diese so
genannte Middlewareschicht stellt eine Sammlung verschiedener Technologien und
Dienste dar, die auf verschiedenen Plattformen zur Verfügung stehen. Wesentlich bei
Entwicklungen verteilter Systeme und dem Einsatz einer Middlewaretechnologie ist, dass
die Migration bereits bestehender Daten möglichst effizient und kostengünstigst
bewerkstelligt werden kann.
Durch die Integration von Applikationskomponenten in die Middleware kann der
Entwickler unabhängig von der spezifischen Kommunikations-Infrastruktur verteilte
Systeme entwerfen. Middleware als Bindeglied zwischen der Systemplattform und den
Anwendungen soll einerseits auf Standard-Schnittstellen und -Protokollen in der
Transportschicht (z.B. TCP/IP, ISO-OSI-Stack) aufsetzen sowie andererseits auch
standardisierte Benutzerschnittstellen wie DCE-RPC zur Vereinheitlichung von
Benutzoberflächen ermöglichen. Aufgaben, wie die Verwaltung von Transaktionen (siehe
Seite 45
Abschnitt 4.3), die Synchronisation (siehe Abschnitt 4.5), die Namensvergabe(siehe
Abschnitt 4.2) und die bereits erwähnte Kommunikation (siehe Abschnitt 3.4) in
verteilten heterogenen Systemumgebungen gehören zu den Grundanforderungen von
Middleware-Lösungen. Die folgende Auflistung ergänzt die eben erwähnten
Grundanforderungen um mögliche allgemeine Verteilungsbasierte Dienste:
• Kommunikations-Dienste: RPC, Message Queuing, elektronische Post, elektronischer
Datenaustausch
• System-Dienste: Event Notification, Konfigurationsmanagement, SoftwareInstallation,
Fehler-Erkennung,
Recovery-Koordination,
Authentifizierung,
Verschlüsselung, Zugriffskontrolle
• Informations-Dienste: Directory Server, Log Manager, File und Record Manager,
Anbindung
an
relationales
Datenbanksystem
bzw.
Objektorientiertes
Datenbanksystem, Repository Manager
• Ablaufkontroll-Dienste: Masken- und Grafikverarbeitung, Drucker-Verwaltung,
Hypermedia-Verbindungen, Multimedia-Aufbereitung
• Berechnungs-Dienste: Sortieren, mathematische Berechnungen, Internationalisierung,
Datenkonversion,
Die nachfolgenden Abschnitte beschreiben verschiedene Middleware Plattformen und
Technologien. Es wird dabei, wie schon zu Beginn dieses Abschnittes erwähnt,
besonderen Wert auf die verwendeten Kommunikationsmechanismen gelegt. Weiters
wird immer wieder der Aspekt der Standardisierung berücksichtigt.
4.7.2.
DCE
1988 gründeten über 400 Firmen die Organisation Open Software Foundation (OSF52).
Ziel der OSF war es, Lösungen für verteilte Systeme zu evaluieren, zu standardisieren
und eine Sammlung von Werkzeugen und Diensten zur einfachen Entwicklung verteilter
Anwendungen zur Verfügung zu stellen. Mitglieder wie Sun Microsystems, DEC und HP
forcierten bereits standardisierte Teilbereiche wie NFS, DNS, und RPC Komponenten.
Die OSF hat 1990 aus den evaluierten Systemen das Distributed Computing Environment
(DCE) entwickelt und 1992 erstmals vorgestellt. Großer Wert wurde dabei auf
Standardisierung zur breiten Unterstützung und Akzeptanz verschiedener
Softwarehersteller gelegt. Die OSF bietet auch selbst eine Referenzimplementierung an,
die in der aktuellsten Version 1.2.2 vorliegt und von der OSF kostenlos für Forschungsund Lehrzwecken zur Verfügung gestellt wird. [Lamersdorf 1996]
DCE ist eine “Cross-Platform”, die einen integrierten Satz an Diensten zur
Entwicklung und Wartung von verteilten Anwendungen zur Verfügung stellt. Als Basis
dient eine Architektur bzw. Kommunikationsumgebung, die einen einfachen
Informationsfluss in sämtliche Richtungen gewährleistet. Dabei wird auch versucht, die
Komplexität des Systems sowohl für die Anwendungsentwickler und Systemverwalter als
auch für die Endbenutzer möglichst transparent zu halten. Die DCE-Architektur ist ein
Referenzmodell bestehend aus einem Satz von acht Technologien. Diese reichen vom
Einsatz grundlegenden Technologien wie der Betriebssystemanbindung bis hin zu der
Anbindung an verschiedene Konsumentendienste (Anbindung an Applikationsebene).
Sicherheits- und Managementdienstleistungen werden dabei in allen Bereichen angeboten
und sind essentieller Bestandteil der DCE Umgebung. Der Applikationsschicht
52
OSF: http://www.osf.org
Seite 46
Kapitel 4 - Verteilte Anwendungen
präsentiert sich DEC als eine logische Systemeinheit, die in zwei Teilsystemen
organisiert ist, dem DCE Secure Core und den DEC Data Sharing Diensten. Die
Architektur der DCE Umgebung ist in Abbildung 4.3 ersichtlich. Als
Programmschnittstellen (Basisdienste) für Anwendungen stehen im DCE das ThreadService, Remote Procedure Call, Time-, Directory- und Security-Service zur Verfügung.
Als höhere Dienste bezeichnet man in der DCE Umgebung das Global Directory Service,
Distributed File System, Diskless Support und die PC Integration. Diese werden dem
Anwender direkt an der Betriebssystemschnittstelle angeboten. [Nehmer et al. 1998]
[Transarc 1999]
Abbildung 4.3: Architektur der DCE Systemumgebung [Nehmer et al. 1998]
Eine DCE-Umgebung ist entsprechend der Architektur in acht Zellen (grau hinterlegte
Blöcke in Abbildung 4.3) aufgeteilt. Jede dieser Zellen fasst eine Menge von Diensten als
organisatorische Einheit zusammen. Aufgrund dieser Zellenbasierten Aufteilung der
Dienste können etwa Aufgaben, wie z.B. die Namensverwaltung und Zugriffskontrolle,
effizienter realisiert werden als durch Interaktion verschiedener Zellen. Dadurch ist das
Gesamtsystem skalierbar. Durch die Gruppierung der Dienste kann die Effizienz des
Gesamtsystems gezielt optimiert werden. Zum DCE Secure Core gehören Dienste wie
[Transarc 1999]:
• Thread Service: DCE unterstützt Multi-Threaded agierende Anwendungen, so
genannte Portable Implementierungen von leichtgewichtigen Prozessen basierend auf
dem POSIX53 threading Standard
• Remote Procedure Call (RPC): Das DCE-RPC stellt die grundlegendste
Kommunikationseinheit im System dar. Sie erlaubt lokale Prozeduraufrufe (innerhalb
einer Netzdomain), wobei der aufrufende Prozess als Client und der aufgerufene
Prozess als Server bezeichnet werden. Es gibt Möglichkeiten von synchronen und
asynchronen RPC. Die RPC Zelle bietet Transparenz in heterogenen Systemen
bezüglich der Daten Repräsentationen auf verschiedenen Hardwarearchitekturen.
• Directory Services: Das DCE Cell Directory Service (CDS) ermöglicht das logische
Ansprechen von Komponenten über einen eindeutigen Namen innerhalb einer Zelle
(Gruppe von Clients und Server). Dabei werden die logischen Namen auf
physikalische Adressen abgebildet. DCE Zellen können jedoch auch weltweit mittels
DNS über das DCE Global Directory Service (GDS) angesprochen werden.
• Security Service: Das DCE Security Service stellt Mechanismen zur Verfügung, um
die Entwicklung einer sicheren Kommunikation zwischen Client und Server
ermöglichen zu können. Bei der Identifikation erhält ein Benutzer vom PrivilegeServer ein Privilege Attribute Certificate (PAC). Mit diesem PAC wird die
Ausführung von Prozessen auf verschiedenen Rechnern erlaubt. Auch das Ermitteln
des Authorisierungsstatuses von Benutzern und das Versenden von verschlüsselten
53
POSIX: http://www.knosof.co.uk/posix.html
Seite 47
Nachrichten im Netzwerk kann benutzerabhängig ermöglicht werden. Unberechtigter
Zugriff auf Daten einer Übertragung über einen längeren Zeitraum (Client und Server)
kann verhindert werden, indem die Überprüfung des PAC für jedes Datenpaket
verlangt wird. Fünf Sicherheitsklassen erlauben eine Wahl bezüglich Sicherheit und
Performance.
• Distributed Time Service (DTS): Das DCE DTS synchronisiert die Taktgeber der
unterschiedlichen Zellen im Netzwerk. Dabei verfügt jede Zelle über mindestens einen
Time Server.
• Audit Service: Das DCE Audit Service stellt Möglichkeiten zum Erkennen und
Verwalten von kritischen Prozessen in verteilten Anwendungen zur Verfügung. Dabei
können zur leichteren Administration unterschiedliche kritische Prozesse anhand
Klassifikationsmechanismen logisch gruppiert und Status bzw. Prüfberichte mit
gelogged werden.
• Naming Gateway: Das DCE Naming Gateway ermöglicht Windows basierten Clients
das Ansprechen von verschiedenen Servern über das DCE Naming Service, ohne
explizite DCE Software auf den Clients installieren zu müssen.
Neben den DCE Core Services gibt es auch weitere wichtige DCE Data Sharing
Services, die einen leichteren Zugriff auf Datenbestände ermöglichen. Das Distributed
File System (DFS) ist ein leistungsstarkes, gut skalierbares und sicheres System zur
Datenverwaltung. Dabei stehen wiederum Aspekte der Transparenz im Vordergrund, um
dem Benutzer Zugriff auf Daten unabhängig vom Zugriffs- und Speicherort zu
ermöglichen. Im Gegensatz zu gewöhnlichen File Systemen bietet das DFS neben der
Skalierbarkeit auch den sicheren Transfer und die sichere Verwaltung der Daten im
gesamten Netzwerk. Zu den DCE Data Sharing Services gehören [Transarc 1999]:
• Distributed File System Client: Mit dem DFS Client ist ein effizienter Zugriff auf die
Daten mittels „caching“ möglich. Dabei werden über spezielle Protokolle File Updates
transparent an die Clients weitergereicht, so dass allen Benutzern derselbe
Datenbestand zur Verfügung steht.
• Base Files Service: Das BFS stellt Verbindungen zu diversen lokalen Filesystemen
her. Über diesen Dienst werden Datenbestände von DFS Dateisystemen, CD-ROMs
und anderen physikalischen Dateisystemen den DFS Clients zur Verfügung gestellt.
• Enhanced File Service: Das EFS ermöglicht Datenbestände zu replizieren, zu sichern,
zu verschieben ohne den DFS Dienst für die Endbenutzer unterbrechen zu müssen.
Durch die Verwendung von Copy-on-Write Technologie ermöglicht der EFS Dienst
Onlineverfügbarkeit der gespeicherten Daten. Das DFS Web Tool kombiniert
Replikate (eindeutige Namensvergabe) mit Sicherheit und Skalierbarkeit um
wachsende Anfragen von Webdiensten befriedigen zu können. Das EFS erlaubt
weiters den Zugriff auf die Datenbestände über Access Control Lists (ACL) und
verwaltet ein effizientes, log-basierendes physikalische File, mit dem ein schneller
Start der Server möglich ist.
• DCS NFS-to-DFS Secure Gateway: Sichere Anbindung und sicherer Zugang von NFS
Clients zu DFS Daten.
Seite 48
Kapitel 4 - Verteilte Anwendungen
Eine DCE Basis Systemkonfiguration besteht aus Laufzeitbibliotheken, welche die
DCE-Client-Funktionalität bereitstellen. Jede Zelle verfügt über mindestens einen Cell
Directory Service, einen Security Service und einen Distributed Time Service. Das DCE
wurde unter Berücksichtung vieler formaler- und de facto Standards entwickelt. Einige
dieser Standards sind [Transarc 1999]:
•
•
•
•
•
Internet TCP/IP Protokolle
POSIX 1003.4a Thread Management Entwurf und POSIX 1003.6 ACL Entwürfe
CCITT X.500/ISO 9594 Directory Service
Internet DNS und Network Time Protokolle (NTP) Standards
X/Open Directory Service (XDS) und X/Open Object Management (XOM)
Applikationsspezifische Programmierinterfaces
• Internet GSS API
4.7.3.
COM
COM ist eine von Microsoft entwickelte Technologie, die eine Kommunikation
voneinander unabhängig entwickelter Windows-Applikationen ermöglicht. Beliebige
Daten können zwischen verschiedenen Anwendungen, z.B. über die Zwischenablage,
transportiert werden. Auch an eine Erweiterung Dokumentzentrierter Ansätze wurde
gedacht. Das Einbetten einer Excel-Tabelle in ein Word-Dokument wäre als Beispiel zu
nennen. Bei Doppelklick auf eingebettete Objekte startet die zugehörige Applikation
automatisch im Hintergrund. Bewerkstelligt wird dies mit dem Object Linking &
Embedding (OLE) System. Über diese standardisierte Schnittstelle ist eine
Kommunikation zweier unabhängig voneinander entwickelter Applikationen möglich.
Das OLE System wurde in seiner ersten Phase für Dokumentzentrierte Anwendungen
entwickelt.
Die Kommunikationsschicht (Dynamic Data Exchange - DDE) von COM war recht
komplex, langsam und unflexibel. Anforderungen wie die Unterstützung verschiedener
Programmiersprachen, die Einführung eines Objektorientierten Ansatzes und die
Einhaltung von Transparenzeigenschaften, führten zu einer Weiterentwicklung von OLE
auf OLE2, das auf dem Component Object Model (COM) basiert. Mit dem neuen Modell
ist nun eine einheitliche Interaktion beliebiger Komponenten möglich. Ziel des neuen
Modells ist unter anderem auch die Widerverwendbarkeit von Komponenten
bewerkstelligen zu können. Komponenten liegen in binärer Form als dynamische
Bibliothek (DLL) oder ausführbares Programm (EXE) vor. COM standardisiert
Mechanismen und Schnittstellen, wie beispielsweise Klassen zu implementieren und
anzusprechen sind. Die Grundarchitektur basiert auf dem Client–Server Modell, bei dem
das aufrufende Programm als Client bezeichnet wird und der Server eine entsprechende
Funktionalität über eine binäre Bibliothek zur Verfügung stellt. Über die Definition der
Schnittstellen mittels einer eigenen Beschreibungssprache (Microsoft Interface Definition
Language – MIDL) wird auch die Funktionsweise einer Komponente festgelegt [Röder
1999].
Objekte in der „COM-Welt“ stellen ihre Funktionalität über Schnittstellen zur
Verfügung. Für ein COM-Objekt können auch mehrere Schnittstellen definiert werden,
wobei jede Schnittstelle eine bestimmte Gruppe an Methoden zur Verfügung stellt. Ein
direkter Zugriff auf COM Objekte ist nicht möglich. Der Zugriff auf Methoden erfolgt
nur indirekt über eigene Schnittstellenzeiger. Mit diesen Schnittstellenzeigern ist eine
Kapselung der Daten und der Funktionalität möglich. Schnittstellenzeiger verweisen
Seite 49
ihrerseits wiederum auf eine Tabelle von Methodenzeigern (siehe Abbildung 4.4).
Dadurch können auch Funktionen, wie transparentes Routing (auch durch Firewalls),
implementiert werden. In COM gibt es eine universelle Basisschnittstelle IUnknown,
von der alle COM-Klassen abgeleitet werden. COM-Objekte implementieren diese
Schnittstellen und stehen so als Instanzen der Klassen zur Verfügung. COM-Klassen
können auch von mehreren Schnittstellen abgeleitet werden. Schnittestellen garantieren
für erwartetes Verhalten eines Objekts, d.h. dass die Methoden auf funktionale und
semantische Weise, gemäß der Schnittstellen-Definition, implementiert wurden. Die OLE
Unterstützung mit Drag-and-Drop ist ein bekanntes Beispiel für diese Gewährleistung.
[Stal 1998]
Abbildung 4.4: COM Schnittstelle: Schnittstellenzeiger, Methodenzeiger [Stal 1998]
COM Objekte treten in drei verschiedenen Varianten (Server) auf [Stal 1998]:
• In-Process-Server: COM-Objekte liegen als DLL Dateien vor und werden zur
Laufzeit in den Clientprozess geladen. Somit können Funktionsaufrufe vom Client
zum Server auf direktem Weg erfolgen, was ein günstiges Laufzeitverhalten
impliziert.
• Local-Server: COM-Objekte liegen als ausführbare Dateien vor, die in einem eigenen
Prozess laufen. Die Kommunikation zwischen Client und Server erfolgt über
Marshalling, das von einem Proxy/Stub Modul zur Verfügung gestellt wird.
• Remote-Server: COM-Objekte liegen verteilt im Netzwerk. Diese benötigen bei
Ausführung ebenfalls einen eigenen Prozess und entsprechen bereits dem erweiterten
Ansatz DCOM (siehe Abschnitt 4.7.4). Das Proxy/Stub Modul setzt die
Funktionsaufrufe in RPC um und ermöglicht so die Kommunikation zwischen Client
und Server über das Netzwerk.
Abbildung 4.5 zeigt den Aufbau eines COM-Servers und den schematischen Vorgang
bei einem Aufruf eines Interfaces. Im ersten Schritt stellt der Client eine Anfrage mit dem
entsprechenden Identifikator an COM (Create Object). Daraufhin durchsucht COM seine
Registry nach dem entsprechenden Interface und dem zugehörigen Server (Check
Registry). Der COM Classloader versucht nun das COM-Objekt zu referenzieren (Locate
Implementation) indem er den Zeiger auf das Interface an den Client weiterleitet. Danach
ist die Verbindung zwischen Client und Server hergestellt und der Client kann seine
Funktionsaufrufe tätigen [Koch 1998].
Seite 50
Kapitel 4 - Verteilte Anwendungen
Abbildung 4.5: Schematischer Verbindungsaufbau im COM-Objektmodell [Koch 1998]
Der schematische Vorgang funktioniert für den Zugriff auf lokale COM Objekte. Will
man jedoch auch Objekte anderer Prozesse und entfernter Rechner ansprechen, geschieht
dies unter zu Hilfenahme von so genannte Proxies. Dabei stellt ein Proxy die exakt
gleichen Schnittstellen wie die zu referenzierenden Objekte zur Verfügung. Eine Client
Anfrage wird so über den Proxy „getunnelt“ an das eigentliche Objekt weitergeleitet
(Marshalling der Daten, weiterleiten von Anfragen und Antworten). Der Proxy spricht
jedoch das COM Objekt nicht direkt an, sondern verwendet dazu einem dem COM
Objekt vorgeschaltenen Stub. Die Aufgabe des Stub ist der Verbindungsaufbau mit dem
Client und die Datenübertragung (Demarshalling, Aufruf des COM Objekts). Dieser
Ansatz besitzt nun Gültigkeit für Objektreferenzierung am gleichen Server und entfernten
Servern. Der Unterschied liegt in der Kommunikationsschicht zwischen Proxy und Stub.
Sind Proxy und Stub am selben Rechner, werden COM LRPCs (Lightweight Remote
Procedure Calls) eingesetzt, die aufgrund der gemeinsamen Speicherverwaltung zu guten
Performancewerten führen. Wenn Proxy und Stub auf verschiedenen Rechnern laufen,
werden die herkömmlichen RPC Aufrufe verwendet. In Abbildung 4.6 wird der
Zusammenhang zwischen In-Process Server und Local-Process Server bzw. Remote
Prozess Server dargestellt. Die Interprozess Kommunikation über LRPC und RPC
geschieht dabei völlig transparent für den Programmierer [Williams et al. 1994].
Abbildung 4.6: COM Objektreferenzierung mittels Proxy/Stub Technologie [Williams et al. 1994]
Wenn ein Client den Versuch unternimmt, ein COM Objekt zu referenzieren, so muss
er den entsprechenden Identifikator kennen. Alle COM Objekte besitzen eine weltweit
eindeutige Identifikation, den Global Unique Identifier (GUID). Dieser GUID (128-bit
Zahl) wird von einem speziellen Algorithmus, der Parameter wie die aktuelle Uhrzeit,
Ethernet-Adresse und eine Zufallszahl berücksichtigt, generiert. Eine Unterscheidung der
Seite 51
GUID gibt es für Objekt Klassen (CLSID-Class Identifier), Schnittstellen (IDD-Interface
Identifier) und Typenbibliotheken (LIBID-Library Identifier). Nachdem jede GUID für
sich eindeutig ist, gibt es auch keine zwei gleichen Schnittstellen. Erweiterung oder
Änderung einer Schnittstelle bedeuten unweigerlich, dass eine neue Schnittstelle definiert
werden muss. Dies bringt aber auch einen entscheidenden Vorteil mit sich. Clients
können niemals in Konflikt mit bereits bestehenden Objekten geraten. Die Entwicklung
von COM Objekten erfolgt mit der Microsoft Interface Definition Language (MIDL).
Diese wurde vom DCE Standard übernommen (siehe Abschnitt 4.7.2), erweitert, um
COM Schnittstellen, COM Klassen und Typenbibliotheken erstellen zu können. Mit
speziellen IDL-Compilern werden die Definitionen in die gewünschte Zielsprache (z.B.
C++) und anschließend in das binäre Format übersetzt. Die COM Klassen (CLSID)
müssen noch in einer hierarchisch organisierten Datenbank eingetragen werden (Win32 Systemregistry), um lokalisiert bzw. adressiert werden zu können. Das COMLaufzeitsystem kann aufgrund der Relationen in der Registrierdatenbank eine Zuordnung
von COM Objekt zu seiner binären Repräsentation herstellen und den Clients zur
Verfügung stellen. [Williams et al. 1994]
4.7.4.
DCOM
Die COM Entwicklung unterstützte ursprünglich nur die Kommunikation von
Komponenten auf einem Rechner. Mit der Entwicklung von CORBA54 erweiterte
Microsoft den COM Ansatz, um auch Objekte verschiedener Rechner ansprechen zu
können. Alle gängigen Microsoft-Technologien wie OLE, ActiveX oder Dynamic
InterNet Applications (DNA) basieren auf dem COM/DCOM Ansatz. Es wurde auch
versucht, den DCOM Ansatz auf andere Plattformen wie UNIX zu portieren, um wie mit
dem CORBA Standard, plattformübergreifend agieren zu können. DCOM ist Teil der
Win32 Betriebssysteme und unterstützt so eben nur Win32-APIs. In Benchmarktests
stellte sich jedoch heraus, dass DCOM Applikationen weniger performant und schlechter
skalierbar sind, als etwa gleichwertige Applikationen in CORBA. [Stal 1998]
Die DCOM Architektur wird in Abbildung 4.7 dargestellt. Um Objekte auf anderen
Rechnern ansprechen und erzeugen zu können, muss man dem Service Control Manager
(SCM) nur den Rechnernamen und die CLSID der Objektschnittstelle übergeben.
Abbildung 4.7: Architektur des DCOM Ansatzes [MS 1996]
54
CORBA: Common Object Request Broker Architecture, wurde 1991 von der Object Management Group (OMG), einem
Standardisierungsgremium mit mehr als 700 Mitgliedern definiert. Das Kommunikationsprotokoll zwischen Object
Request Brokern (ORB) verschiedener Hersteller, welches den Meldungsaustausch über das Internet ermöglicht, wird
Internet Inter-ORB Protocol (IIOP) genannt. ORBs sind die technischen Implementierungen des CORBA Standards.
Seite 52
Kapitel 4 - Verteilte Anwendungen
Der Mechanismus der Objektreferenzierung wurde bereits im vorigen Abschnitt
detailliert erklärt. Nachdem DCOM lediglich eine Erweiterung des COM Ansatzes
darstellt, wird nun versucht, die wesentlichen Unterschiede bzw. Erweiterungen zum
COM Ansatz in einer kurzen Auflistung darzustellen [MS 1996]:
• Sprachenunabhängigkeit: Dem Programmierer einer DCOM Komponente bleibt die
Wahl der Programmiersprache offen. Unterstützt werden z.B. Java, Microsoft Visual
C++®, Microsoft Visual Basic®, Delphi, PowerBuilder und Micro Focus COBOL.
Dies vereinfacht die Entwicklung von DCOM Komponenten, da bereits bekannte und
im Einsatz befindliche Entwicklungstools verwendet werden können. Ebenso können
bestehende Testumgebungen benutzt werden. Weiters ist auch denkbar, Mechanismen
wie Prototyping zur Softwareentwicklung einzusetzen, indem man erste Prototypen
mit high-level Programmiersprachen entwickelt und DCOM Eigenschaften wie
multithreading und thread pooling in einer weiteren Phase mittels C++ oder Java
integriert.
• Connection Management: Überwachung der Verbindung inkludiert auch ein
Errorhandling bei Ausfall eines Clients, Netzwerk oder Hardewarefehlers. DCOM
verwaltet auch die Referenzzähler der DCOM Objekte. Der ÜberwachungsMechanismus basiert auf einem Ping-Protokoll, indem DCOM periodisch die Clients
nach deren Status befragt. Eine Verbindung in DCOM gilt als abgebrochen, wenn auf
mehr als drei Ping-Anfragen in Folge keine Rückmeldung vom Client erfolgt. In
diesem Fall wird der entsprechende Referenzzähler dekrementiert. Dies impliziert
auch einen verteilten Garbage Collection Mechanismus, der völlig transparent für die
Applikationen abläuft. In DCOM ist eine bidirektionale Kommunikation möglich.
Dabei stehen sich Client und DCOM Objekt gleichermaßen als Provider und
Konsument gegenüber. In DCOM ist auch ein symmetrischer Verbindungsaufbau über
Netzwerkgrenzen möglich. Diese Eigenschaften bieten außer bei der Entwicklung
reiner Client/Server Lösungen auch bei Entwicklungen von P2P Anwendungen
genügend Entwicklungspotential.
• Skalierbarkeit: Verteilte Anwendungen sollen auch bei steigender Anzahl von
Benutzern noch performant ihre Funktionalität zur Verfügung stellen. In DCOM wird
die Skalierbarkeit mit Symmetric Multiprocessing (SMP) und Flexible Deployment
gewährleistet. Bei SMP werden Win32 Architekturkonzepte wie Multiprocessing auf
BS-Ebene ausgenutzt. DCOM teilt die Prozesse auf verschiedene Threads auf, die von
einem Thread Pool generiert werden, der wiederum optimiert zur Unterstützung von
Mehrprozessor Maschinen eingesetzt werden kann. Auch das Thread Management
geschieht völlig transparent für die Entwickler und den Applikationen. Die
Möglichkeit des „Flexible Deployment“ ermöglicht auch die Skalierung auf mehrere
Rechner. Aus Kostengründen ist es durchaus sinnvoller, statt einer teuren
Multiprozessormaschine, mehrere billigere Einzelrechner zu verwenden. Damit man
aber Objekte auch ohne weiteres auf mehrere Rechner verteilt einsetzten kann, müssen
diese auch entsprechend dafür ausgelegt werden. Zugriff auf eine gemeinsame
Datenbank, oder diverse Abgleichmechanismen sind nur zwei wichtige
Anforderungen, damit vernünftig skaliert werden kann. Dies muss bereits in der
Designphase in die Entwicklung einfliesen. Kritische Prozesse, die bei der Skalierung
Flaschenhälse darstellen, können in einer späteren Phase auf einen eigenen Rechner
ausgelagert werden.
Seite 53
Abbildung 4.8: Isolierung Kritischer Prozesse und Auslagerung auf eigene Server [MS 1996]
• Optimize Network Round-Trips: Ein allgemeines Problem in verteilten Systemen stellt
die ungleiche Lastverteilung auf Komponenten dar. Eine gängige Technik, um
ungleiche Lastverteilung zu vermeiden, wäre ein gesteuertes Multiplexing der Client
Anfragen. DCOM versucht diese Technik aufzugreifen, indem das Connection
Management günstige Verbindungen sucht, oder auch neue Objekte im Bedarfsfall
referenziert. Ein „Broker“ verwaltet die Referenzen gleicher Komponenten und
bestimmt deren Benutzerlast. Fordert ein Client ein Objekt von DCOM an, kann über
diesen Brokermechanismus die Referenz mit der geringsten Benutzerlast an den Client
übermittelt werden.
Abbildung 4.9: Lastverteilung mittels Brokermechanismus in DCOM [MS 1996]
Der DCOM Ansatz erlaubt auch die Inkludierung anderer Protokolle, um Objekte und
Komponenten „außerhalb“ der DCOM Welt ansprechen zu können. Ein
entsprechendes
Proxyobjekt
dient
dabei
als
Bindeglied,
um
den
Marshallingmechanismus des neuen Protokolls verwenden zu können. Der Einsatz
von Proxyobjekten und effizienteren Techniken wird oft aus performanten Gründen
gewählt. Ein Beispiel wäre die Anbindung an diverse Datenbanken über
entsprechende Driver.
• Sicherheit: DCOM verwaltet ähnlich zum NT Filesystem Access Control Lists (ACL)
für die Objekte. In diesen ACLs sind die Zugriffsrechte für Benutzer und Gruppen
festgelegt. Die ACLs können mit einem DCOM Konfigurations-Tool (DCOMCNFG)
oder über die Windows Registry verwaltet werden. Ist ein Benutzer am BS
angemeldet, garantiert dies für Authentifizierung. DCOM leitet bei Client Anfrage den
Benutzernamen zum Ziel-Rechner oder zum Ziel-Prozess weiter. DCOM führt die
Authentifizierung anhand des Benutzernamens am Ziel-Rechner durch und überprüft
die Zugriffsrechte auf das Objekt anhand dessen ACL.
Seite 54
4.7.5.
Kapitel 4 - Verteilte Anwendungen
.NET
.NET ist eine Produktentwicklung von Microsoft, die als Plattform strategisch Webbasierte Dienste und Applikationen vereint. .NET stellt eine Weiterentwicklung von
Windows DNA2000 (Distributed interNet Applications Architecture) dar. Ziele von
.NET sind der Einsatz in verteilten Web-basierten Diensten, mit der Unterstützung
verschiedener Programmier-sprachen bei der Produktentwicklung. Die .Net Plattform
berücksichtigt
bei
der
Produkt-Entwicklung
die
Anbindung
von
Betriebssystemkomponenten bis hin zur Anbindung an Backoffice Produkten. Nach einer
Aussage von Bill Gates war die Motivation zur Entwicklung von .NET die Wandlung des
Internets als reine Informationsquelle hin zur Basis von Geschäftsmodellen und
Geschäftsaktivitäten. Die Möglichkeit, den Web-Browser als Transportmittel für den
Informationsaustausch unterschiedlicher Medien nutzen zu können, spielt dabei eine
entscheidende Rolle für den Anwenderbereich. Um aber nicht nur den Web-Browser als
einziges Werkzeug zur Informationsverarbeitung nutzen zu können, versucht der .NET
Ansatz über diverse Benutzerschnittstellen die Anbindung an beliebige Endgeräte zu
ermöglichen. Im Bereich Datentransport setzt .NET auf XML Lösungen auf. [Vawter et
al. 2001]
Die .NET Umgebung basiert auf dem Common Language Runtime (CLR)
Environment. Alle zur Verfügung stehenden Dienste und Komponenten werden im
selben Runtime ausgeführt. Dabei werden neben der Umsetzung von Aspekten der
Transparenz und Sicherheit auch automatische „Garbage Collection“, Exception
Handling und Debugging von verschiedenen Versionen derselben .NET Komponenten
unterstützt. Die Verwendung verschiedener Programmiersprachen im .NET-Ansatz
erlaubt etwa auch Vererbungs-mechanismen von Komponenten verschiedener
Programmiersprachen. CLR ist eine streng typisierte Systemumgebung. Verschiedene
Programmiersprachen werden entsprechend nur dann unterstützt, wenn geeignete
Compiler die Programmcodes entsprechend der CLR- Direktive umsetzen. Die
Entwicklungsumgebung Visual Studio.NET verfügt über vier CLR-taugliche Compiler.
Dabei werden die Programmiersprachen C# (sprich: C sharp), Visual Basic.NET,
JScript.NET und C++ direkt unterstützt. Zusätzlich gibt es Compiler für mehr als 20
weitere Programmiersprachen. [Löwy 2001]
Die Gemeinsamkeit bei der Entwicklung von .NET Komponenten in verschiedenen
Programmiersprachen liegt in der Verwendung gemeinsamer Basisklassen, der CLR
Typisierung und denselben CLR Vorgaben. .NET unterstützt die Verwendung von
„Namespaces“ als Separation von Klassendefinitionen. Ähnlich wie in C++ werden
Unterscheidungen des Namespaces über Präfixe von Produktnamen und Firmenname
realisiert. Der wohl wichtigste Ansatz im Bereich von Componentware, nämlich der
Entkoppelung des Programmcodes über Interfaces, erlaubt in .NET Polymorphie
bezüglich verschiedener Implementierungen eines Interfaces. .Net Applikationen werden
in einem Container zusammengefasst. Dieser Container beherbergt neben Transaktions-,
Messaging- und Security- Services auch eine Middle-Tier Schicht (Business Layer),
welche die eigentliche Logik bezüglich Verwaltung der .Net Objekte enthält. Über Active
Data Objects (ADO.NET) kommuniziert die Middle-Tier Schicht mit externen
Datenbanken. Weiters gibt es eine Anbindung externer Produkte über standardisierte
Web-Services Technologien wie SOAP (siehe Abschnitt 5.8), UDDI (siehe Abschnitt
4.8.1) und WSDL (siehe Abschnitt 4.8.2). Für die Erzeugung von dynamischen
Webseiten wird ASP.NET eingesetzt. Das Entwicklungsmodell zur Erstellung von .NET
basierten Web-Services ist in Abbildung 4.10 dargestellt [Vawter et al. 2001] [Löwy
2001].
Seite 55
Abbildung 4.10: Entwicklung von Web-Services mit .NET Component Ware [Vawter et al. 2001]
Die Umsetzung von Programmcode in ausführbaren Code, wird in der .NETArchitektur in zwei Phasen unterteilt. Im ersten Schritt wird der High-Level Code in
einen generischen Maschinen Code, der intermediate language (IL – anlog zum Java
Bytecode) genannt wird, umgesetzt. Beim erstmaligen Aufruf von Teilen aus dem IL
Code, wird dieser IL Code vom .NET Runtime Environment in einen nativen Code
umgewandelt und exekutiert. Der native Code (binäres Objekt) steht dann für die gesamte
„Lebensdauer“ eines Programms zur Verfügung. Gleiche Programm-Konstrukte aus
verschiedenen Programmiersprachen sollen so zum selben nativen Code führen. Dies
impliziert weiters, das alle .NET „tauglichen“ Programmiersprachen gleich performant
sind und leicht bzw. komfortabel zu entwickeln sind. Unterschiede gibt es lediglich in der
Art und Weise wie der Programmcode erzeugt wird. Eine persönliche Bevorzugung einer
bestimmten Programmiersprache liegt zumeist in Zusammenhang mit der verwendeten
Entwicklungsumgebung und der Kenntnis des Entwicklers.
Im Gegensatz zu COM (siehe Abschnitt 4.7.4) gibt es keine kanonische Basisklasse
(IUnknown) von der alle weiteren Klassen abgeleitet werden. .Net unterstützt keine
Klassenfabriken und keine Objektreferenz-Zähler. Der inkludierte Garbage Collection
Mechanismus erkennt nicht mehr gebrauchte Objekte und entfernt diese aus dem
Speicher. Es existiert keine Schnittstellen-Beschreibungssprache wie IDL. Die
Beschreibung der Schnittstellen wird direkt im Source Code eingetragen. Compiler
übersetzen diese Beschreibung in ein definiertes Format, den so genannte Metadaten
(Typenlibrary). Diese Metadaten beinhalten Information über das Interface, der
Klassenvererbung, der Signatur von Methoden, Datentypen, Events, Membervariablen
und weiterer verwendeten Attributen. Die Metadaten werden gemeinsam mit dem ByteCode in einer Datei gespeichert. [Löwy 2001].
Seite 56
4.7.6.
Kapitel 4 - Verteilte Anwendungen
mono::
mono::55 ist eine Open Source Common Language Infrastructure Implementation der
.NET Entwicklungsplattform, in Unterstützung von GNOME56. Das GNOME Projekt
verfolgt die Idee, fehlende Technologien für die UNIX-Welt anzupassen bzw. für die
UNIX-Welt umzusetzen. Ein weiteres Ziel von GNOME ist die Unterstützung von
sprachenunabhängigen Applikationen. Ziel des mono:: Projekts von Ximian57 ist, die
.NET Plattform auf frei verfügbare Systeme zu portieren. Sämtliche Information zum
mono:: Projekt, wurde von der Homepage http://www.go-mono.com bezogen.
Folgende Technologien sind derzeit in mono:: umgesetzt, bzw. in mono:: inkludiert:
• Einen C#-Compiler, der in Zukunft für weitere Common Language Runtime (CLR)
taugliche Programmiersprachen erweitert wird. .NET unterstützt derzeit folgende
Programmiersprachen: C++, Java Script, Eiffel, Component Pascal, APL, Cobol, Perl,
Python, Scheme, Smalltalk, Standard ML, Haskell, Mercury und Oberon.
• Eine Common Language Infrastructure (CLI) Virtual Machine mit einem Just in Time
Compiler (JIT), der momentan nur für die x86 Architektur erhältlich ist, Garbage
Collector, Class Loader, eine Threading Engine. Das Runtime Environment und das
IO Model ist stark an die Win32 API angelehnt.
• Implementierungen aus der .NET Klassen-Bibliothek und Entwicklungswerkzeuge die
als CLR tauglich gelten.
Das CLR und das Common Type System (CTS) erlaubt den Zugriff auf Byte-Code
verschiedener Implementierungen (Programmiersprachen) von Applikationen und
Bibliotheken. Als Beispiel währe die Verwendung einer C#-Klasse als Subklasse in einer
Applikation, die mit C++ erstellt wurde.
4.7.7.
Java 2 Plattform - J2EE
Die Java 2 Plattform Enterprise Edition (J2EE) ist eine Multi-Tier Architektur, deren
Applikationslogik in mehrere Komponenten aufgeteilt ist. Dabei wird zwischen
funktionalen- und applikationsspezifischen Komponenten unterschieden, die auf
unterschiedlichen Rechnern installiert sein können. J2EE beinhaltet Client-TierKomponenten, Web-Tier-Komponenten, Business-Tier-Komponenten und EnterpriseInformation-System-Komponenten (EIS-Tier). In Abbildung 4.11 werden zwei
Möglichkeiten für J2EE Multi-Tier Applikationen gegeben. Alle J2EE Applikationen
bestehen zumindest aus drei Tier-Schichten. Der Client Schicht, dem J2EE Server und
der Datenbankschicht. Die Erweiterung zum klassischen Two-Tier Ansatz (Client-Server)
stellt die Mittelschicht dar, die ihrerseits als Bindeglied und Vermittler zwischen Client
und Datenbank „multithreaded“ arbeitet. Die J2EE Architektur basiert auf der
Programmiersprache Java. Schon alleine diese Basis soll den Ansatz,
plattformübergreifenden Code zu erzeugen, garantieren. Entwickler schreiben JavaSourcecode. Dieser wird in den Java Bytecode umgewandelt und vom Java Runtime
Environment interpretiert und zur Laufzeit ausgeführt.
J2EE Applikationen bestehen wie schon erwähnt aus mehreren Komponenten. Eine
Komponente ist als eigenständige, abgekapselte funktionale Einheit zu verstehen, die
über geeignete Mechanismen mit anderen Komponenten kommuniziert und den
55
http://www.go-mono.com
GNOME: http://www.gnome.org/
57
Ximian: http://www.ximian.com
56
Seite 57
Datenaustausch durchführt. Zur Kategorie der funktionalen Komponenten gehören WebKomponenten wie Java Servlets, JavaServer Pages und Enterprise JavaBeans auf der
Serverseite. Auf der Clientseite treten applikationsspezifische Komponenten in Form von
Java Applets und anderen nicht Webbasierten Clientanwendungen auf. J2EE
Komponenten werden auf dieselbe Weise wie reine Java Applikationen entwickelt. Im
Gegensatz zum Applikationsansatz müssen einzelne Komponenten der J2EE
Spezifikation genügen und stehen unter der Verwaltung von J2EE Servern. [Bodoff et al.
2002]
J2EE
Application 1
J2EE
Application 2
Application
Client
Dynamic
HTML Pages
Client
Tier
JSF Pages
Web
Tier
Enterprise
Beans
Enterprise
Beans
Business
Tier
Database
Database
EIS
Tier
Client
Machine
J2EE
Server
Machine
Database
Server
Machine
Abbildung 4.11: J2EE Multi-Tier Applikationen [Bodoff et al. 2002]
Ein weitere Motivation für den J2EE Ansatz war die Einführung einer serverseitigen
Java basierten Technologie. Thin Clients58 lagern komplexe und sicherheitskritische
Operation auf Enterprise Java Beans (EJB) aus. Diese Enterprise Java Beans werden auf
der Serverseite ausgeführt und nutzen dabei die Performance des J2EE Servers und deren
Funktionalität (siehe Übersicht Mechanismen und Funktionalität) aus. Ein weiterer
Aspekt in der Entstehungsgeschichte von J2EE war das Anbieten von webbasierten
Diensten (Web-Services). Diese Web-Services sollen nicht nur mit J2EE Diensten
Datenaustausch betreiben können, sondern auch Dienste anderer Plattformen zur
Verfügung stellen und nutzen können. Gerade in diesem speziellen Fall wurde im Bereich
des Business-Layer großen Wert auf standardisierte Übertragungs-Mechanismen Wert
gelegt. SOAP (siehe Abschnitt 5.8), UDDI (siehe Abschnitt 4.8.1), WSDL (siehe
Abschnitt 4.8.2) und ebXML (siehe Abschnitt 5.7) kommen hier als
Übertragungsprotokolle, Definitions- und Beschreibungssprachen zum Einsatz.
Herkömmliche, als „Thick-Clients“ bezeichnete Anwendungen wie Applets und Java
Applikationen, bieten meist ein spezielles User Interface (UI) und können über das
Internet Inter-ORB Protokoll (IIOP) direkt mir dem EJB-Layer kommunizieren.
JavaServer Pages (JSPs) setzen die Daten in HTML, XHTML oder WML taugliche
Informationen um, die wiederum von Web Browser und „Mobile-Clients“ interpretiert
und dargestellt werden. In Abbildung 4.12 ist die Entwicklung von webbasierten
Diensten und der Zusammenhang von Client-Tier, Web-Service Container und der
Datenbankschicht ersichtlich. Gut erkennbar ist, dass spezielle Applikationen auf der
Clientseite (eigenes GUI) über Java Servlets und proprietären Protokollen (JDBC)
einerseits und Applets und Applikationen als Thick-Client über IIOP direkt mit
verschiedenen Datenbanken kommunizieren können [Bodoff et al. 2002].
58
Schlanker Web-Client der keine direkten Datenbankabfragen und andere komplexe Funktionen ausführt.
Seite 58
Kapitel 4 - Verteilte Anwendungen
Abbildung 4.12: Entwicklung von Web-Services mittels J2EE [Vawter et al. 2001]
Bevor Komponenten vom Java Runtime Environment ausgeführt werden können,
müssen diese über einen so genannten Assemblierungs-Prozess in Plattformspezifische
Funktionen umgesetzt werden. Die assemblierten Komponenten werden in J2EE
Container (siehe Abbildung 4.13) integriert und stellen ihre Funktionalität über geeignete
Interfaces zur Verfügung. J2EE eigene Interfaces bieten Mechanismen zum Transaction
Management an, eine Objektreferenzierung über das Java Naming and Directory Interface
(JNDI), remote connectivity und Sicherheitsmechanismen. In der folgenden Übersicht
werden die eben beschriebenen Punkte näher erläutert [Bodoff et al. 2002]:
• Über das J2EE Sicherheitsmodell können nur autorisierte Benutzer Web
Komponenten, Enterprise Beans und System Ressourcen benutzen.
• Das J2EE Zugriffsmodell kapselt über vordefinierte Relationen mehrere Methoden als
eine gemeinsame Einheit und behandelt diese transaktionsbasierend (ACID).
• Mittels JNDI können Komponenten Naming und Directory Services abrufen.
• Der J2EE Remote Connectivity Container verwaltet die Kommunikation zwischen
Client und Enterprise Beans. Dabei kommen Transparenzeigenschaften von verteilten
Applikationen zum Tragen. Der Client kann Methodenaufrufe remote durchführen, als
würden diese in derselben Virtual Machine aufgerufen.
Seite 59
Abbildung 4.13: J2EE Server und Container [Bodoff et al. 2002]
Die J2EE Architektur unterstützt konfigurierbare Dienste in Form von verschiedenen
Implementierungen eines Interfaces. So genannte J2EE Applikations-Container verwalten
aber auch nicht konfigurierbare Dienste wie die Kontrolle von Servletumgebungen,
Datenbankzugriffen, Ressource pooling, Daten Persistenz und Zugriff auf das J2EE API.
J2EE erlaubt auch das Überladen von nicht konfigurierbaren Diensten in eigenen
Applikationen. Dazu müssen die entsprechenden Codesegmente im eigenen EnterpriseBean inkludiert werden und den Anforderungen angepasst werden. So können etwa
eigene Such Methoden erzeugt werden, Connection Pooling zu Datenbanken und Cache –
Mechanismen implementiert werden. Die speziellen J2EE Applikations-Container
gliedern sich aufgrund ihrer Eigenschaften und Kontrollmechanismen in Client-Container
und Server-Container auf. Der J2EE Server beinhaltet das Runtime Environment, den
EJB-Container und den Web-Container. Der EJB-Container verwaltet und führt EJB aus.
Der Web-Container verwaltet Servlet- bzw. Web-Komponenten und generiert JSP Seiten.
Auf der Client-Maschine werden der Application-Client-Container (dieser verwaltet
Client Komponenten) und der Applet Container (verwaltet Applets) installiert. Der
Application-Client-Container unterstützt die direkte Kommunikation mit den EJB. Der
Applet-Container besteht aus einem Webbrowser und dem Java Plugin. In diesen
Container werden Applets integriert und die Kommunikation zwischen Applet und
Servlet verwaltet [Bodoff et al. 2002].
4.7.8.
Open Net Environment - ONE
Open Net Environment (ONE) wurde als offene Softwarearchitektur von Sun
Microsystems entwickelt. ONE stellt keine Applikation oder Sammlung von
Applikationen oder Tools dar, sondern ist eine Spezifikation die unter Mitwirkung von 23
verschiedenen Firmen erstellt wurde. Ziel ist der Entwurf möglichst „schlanker“
Applikationen unter Ausnutzung offener Kommunikationsstandards, Technologien und
Protokollen. Weiters soll mit ONE eine möglichst einfache Portierung bereits bestehender
Systeme (Programme, Datenbanken, Dienste) in ein neues Zielsystem unter
Berücksichtigung der Möglichkeiten der verteilten Architekturkonzepte ermöglicht
werden. Die ONE Architektur beinhaltet ein Entwicklungsmodell, indem Richtlinien zum
Entwurf von Web-Services vorgegeben werden. [SUN 2001]
Die Entwickler von ONE legen keinerlei Einschränkungen beim Entwurf bezüglich
Entwicklungs-Umgebung, Systemplattform und Programmiersprache fest. Jedoch darf
eine Bevorzugung von Java nicht verschwiegen werden, denn Beispielapplikationen und
Beschreibungen sind nur als JAVA Source erhältlich. Beim Entwurf der ONE Architektur
wurden zusätzlich auch einige neue Standards definiert und eingeführt. Diese werden von
Initiativen wie W3C, OASIS, IETF und anderen gefördert bzw. weiterentwickelt. Durch
Seite 60
Kapitel 4 - Verteilte Anwendungen
die Ausnützung bereits bestehender Technologien möchte man eine möglichste breite
Akzeptanz erreichen. Zum Architekturkern gehören XML Initiativen und Standards,
verschiedene Java Technologien und standardisierte Übertragungsprotokolle. Eine
Übersicht über unterstützte Kern-Standards in der ONE Architektur zeigt Tabelle 4.3.
XML Standards
und Initiativen
Java
Technologien
Core
infrastructure
standards
•
Core W3C XML Recommendations (XML, DOM, XML Namespaces, XSLT, XPath, XLink,
and XPointer)
•
Development community XML parser, SAX
•
Presentation formats (XHTML, WML, and VoiceXML)
•
XML schema systems (DTD, XML Schema, RELAX, and TREX)
•
XML messaging systems (XMLP, SOAP, SwA, and ebXML Message Service)
•
XML registries and repositories (UDDI Business Registry, ebXML Registry and Repository,
and OASIS xml.org)
•
XML service description languages (WSDL and ebXML Specification Schema)
•
XML management information interchange frameworks (DMTF CIM and WBEM)
•
B2B XML frameworks (ebXML)
•
XML security systems (W3C XML Signature, W3C XML Encryption, and OASIS SAML)
•
Java 2 Platform, Enterprise Edition (J2EE™), Java 2 Platform, Standard Edition (J2SE™),
and Java 2 Platform, Micro Edition
(J2ME™)
•
Mobile Information Device Profile (MIDP)
•
Java Card™ API, Java Servlet, and JavaServer Pages™ (JSP™) technology
•
Java API for database access (JDBC™ API)
•
Java APIs for XML (Java API for XML Processing, Java API for XML Data Binding, Java
API for XML Registries, Java API for XML Messaging, and Java APIs for XML-based
RPC)
•
Lightweight Directory Access Protocol (LDAP)
•
Secure Sockets Library (SSL)
•
Hypertext Transfer Protocol (HTTP)
Tabelle 4.3: Übersicht der von ONE unterstützten Kernstandards [SUN 2001]
Die ONE Architektur kann als lebendiges System angesehen werden, das stets durch
neue Technologien in seiner Funktionalität erweitert werden kann. Der Entwurf von
Web-Services steht dabei im Vordergrund. Ein Web-Service wird bei der Entwicklung in
verschiedene diskrete Service-Komponenten aufgeteilt, um Inhalte, Applikationslogik,
Transport und Sicherheitsmechanismen voneinander trennen zu können. Der Entwurf von
Web-Services gliedert sich zwei Phasen auf.
Im ersten Schritt werden die diskreten Teile des Services entwickelt. Im zweiten
Schritt werden die als Micro-Services bezeichneten Komponenten zu größeren Einheiten
zusammengefügt (Macro-Services). Die Entwicklung der Micro-Services erfolgt mittels
gängigen Entwicklungsumgebungen, Editoren, Code-Generatoren und anderen Authoring
Werkzeugen. Um die Micro-Services zusammenfassen (assembly) zu können, kommen
„Process-Modelling Tools“, „Workflow Tools“, „Scripting Engines“ und andere
Werkzeuge zum Einsatz. In der zweiten Phase, dem Zusammenbau der diskreten
Komponenten, werden auch Anforderungen bezüglich Sicherheit und Verwaltung
integriert. Nachträglich können die Micro-Services zu jeder Zeit modifiziert,
weiterentwickelt und von neuem in die Macro-Services integriert werden.
Einen funktionellen Überblick der wichtigsten Komponenten einer Web-Service
Architektur und die Möglichkeit der Verteilung der Services, ist in Abbildung 4.14
ersichtlich. Der Block „Service Delivery“ beinhaltet Basiskomponenten wie
Seite 61
Verbindungssteuerung, Nameservice und einen Kommunikationsdienst, damit Benutzer
(z.B. über das Web und Wireless Communication) auf Dienste des Portals zugreifen
können. Jeder einzelne Block wird in einen zugehörigen Container integriert. Die
Container selbst beinhalten das Runtime Environment. Die gesamte Umgebung
(Container) läuft entsprechend auf einer geeigneten Plattform (z.B. J2EE), um
Systemaufrufe des Betriebssystems wie Fileservice, Datenbankanbindung und
Nachrichtendienste nutzen zu können [SUN 2001].
Abbildung 4.14: Web-Service Architektur in der ONE Plattform [SUN 2001]
ONE bietet nicht nur für Neuentwicklungen ein gute Plattform, sondern versucht mit
seiner Architektur auch bereits bestehende Anwendungen und Datenbestände als „Service
on Demand“ einzurichten. Für den Bereich der Integration bestehender Daten und
Applikationen versucht ONE anhand des DART (Daten, Applikationen, Reports,
Transaktionen) Modells einen effizienteren Entwurf von online verfügbaren Diensten zu
erzielen (siehe Abbildung 4.15).
Abbildung 4.15: ONE DART Modell zum effizienten Entwurf online basierter Dienste [SUN 2001]
Seite 62
Kapitel 4 - Verteilte Anwendungen
Über eine entsprechende Datenarchitektur muss ein personalisierter Zugang, unter
Berücksichtigung der jeweiligen Benutzerrechte, von den gewünschten Zielsystemen aus
möglich sein. Applikationen beinhalten die Geschäftslogik. Diese auf Basis Java zu
implementieren, ermöglicht eine gute Skalierbarkeit bei entsprechender Verwendung
eines geeigneten Applikations-Servers. Applikations-Server werden von verschiedensten
Herstellern angeboten. Lediglich einige wenige kommerzielle Produkte bieten wichtige
Features wie Clustering und Lastverteilung. Allein den Online Zugang zu
Datenbeständen über angepasste Applikationen zu entwickeln wäre wohl zu wenig.
Vielmehr kommt es auch darauf an, die Verfügbarkeit und Auslastung von Diensten über
geeignete Auswerteverfahren (Reports) bewerkstelligen zu können. Die Gewährleistung
von Sicherheitsaspekten spielt vor allem im Bereich B2C und B2B eine große Rolle. Die
Einhaltung von Sicherheitsanforderungen können über spezielle transaktionsbasierte
Dienste realisiert werden. [SUN 2001]
4.7.9.
Dino - Dinopolis
Das Dino Projekt (Distributed Interactive Network Objects) ist eine MiddlewarePlattform, die seit 1997 am IICM als Open-Source System für verteilte Component
Software entwickelt wird. Auf der CeBit 1999 in Hannover wurde DINO in der Version
2.0 (Dinopolis) als Core System der Medical Telematics Plattform (MTP) in
Zusammenarbeit mit dem German Aerospace Center (DLR) als weltweit erstes verteiltes
virtuelles Patientendaten Verwaltungssystem vorgestellt. Die folgende Beschreibung des
Dino-Projektes stützt sich auf die Arbeit von [Schmaranz 2002].
Anforderungen wie Unabhängigkeit bezüglich der eingesetzten Technologie und der
eingesetzten Plattform sind bereits in die Designphase von Dinopolis eingeflossen.
Dinopolis ist ein schlankes, erweiterbares Middleware-System, dass verschiedene
Fremdsysteme integrieren, verbinden bzw. miteinander kombinieren kann. Dies kann die
Anbindung an verschiedene Datenbanken und Web-Server sein, oder aber auch die
Integration von diversen Diensten, wie z.B. Kommunikationsdiensten.
Das verteilte Komponenten-Modell wird als Kern von Dinopolis bezeichnet. Objekte
und Komponenten können beliebig im Netzwerk verteilt werden. Es ist ein spezieller
Adressierungsmechanismus vorgesehen, der eindeutige und global gültige ObjektReferenzen verwendet. Der Adressierungsmechanismus ist unabhängig vom
Aufenthaltsort der Objekte bzw. Komponenten, d.h. eine Adresse ist robust gegenüber
Verschiebungsoperationen. Im Dinopolis Modell ist weiters ein frei definierbarer
Linkmechanismus integriert, der n:m Wechselbeziehungen zwischen Objekten bzw.
Komponenten, respektive Teile davon erlaubt. Auch der Sicherheitsaspekt spielt im
Dinopolis Modell eine zentrale Rolle. Das adaptive Sicherheitskonzept in Dinopolis
erlaubt einen Rollenbasierten Zugriff auf die Objekte und Komponenten. Um den Kern
möglichst schlank halten zu können, sind Kern-Module dynamisch nachladbar, bzw. ist
der Kern quasi „on demand“ administrierbar.
Um ein möglichst universell einsetzbares System entwickeln zu können, wurde bereits
in der Designphase ein einfaches weit umfassendes, erweiterbares Objektmodell definiert.
Eigenschaften wie Inhalt, Meta-Daten, Wechselbeziehungen Operationen und Services
geben klare Trennlinien in der Objektdefinition vor. In der folgenden Auflistung werden
die wichtigsten Objekteigenschaften zusammengefasst:
• Jedes Dinopolis Objekt ist im System eindeutig adressierbar.
• Ein Dinopolis Objekt kann aus mehreren Dinopolis Objekten zusammengesetzt
werden
Seite 63
• Ein Dinopolis Objekt kapselt Inhalte. Als Inhalt werden sowohl passive Daten wie
z.B. Dokumente, als auch aktive wie z.B. „Data Streaming“ bezeichnet.
• Für jedes Dinopolis Objekt können spezifische Meta-Daten festgelegt werden. MataDaten werden im Dinopolis Projekt repräsentiert als baumartige Container Strukturen
mit hierarchischen Schlüsseln und streng typisierten Wertemengen. Die Hierarchie ist
nicht vordefiniert, d.h. eine Erweiterung der Schlüssel und der Wertemengen (Typen)
ist für jedes Objekt möglich.
• Für ein Dinopolis Objekt sind willkürliche n:m Wechselbeziehungen definierbar. Es
können ganze Objekte als „Entity“ referenziert werden, oder aber auch nur spezifische
Teile davon (z.B. Content, Meta-Daten).
• Operationen bilden frei definierbare Funktionen für ein Dinopolis Objekt ab.
• Im Gegensatz zu Operationen bilden Services Funktionen ab, die eine
Userinteraktivität erfordern.
• Ein entsprechend standardisiertes Interface bietet Zugang zu Dinopolis Objekt
Eigenschaften.
Nachdem die Eigenschaften eines Dinopolis Objekte festgelegt wurden, zeigt
Abbildung 4.16 die Struktur eines einfachen Dinopolis Objektes. Ein Dinopolis Objekt
selbst kann laut Definition aus mehreren Dinopolis Objekten gebildet werden. Die
Kombination mehrerer Dinopolis Objekte wird einerseits über die Definition von n:m
Wechselbeziehungen ermöglicht, andererseits kann der Verbund von Objekten auch
programmtechnisch (objektorientierte Programmiersprachen vorausgesetzt) über
verschiedene Vererbungsmechanismen hergestellt werden.
Abbildung 4.16 Ein einfaches Dinopolis Objekt [Schmaranz 2002]
Die Vererbung von Objekteigenschaften ist jedoch nicht die einzige Möglichkeit um
interne Verbunde herzustellen. Mechanismen wie „inclusion“, „delegation“ und
„hooks“59 sind einfach modellierbar. Eine genauere Beschreibung welche Kombinations
Möglichkeiten es gibt, ist in Kapitel 8 von [Schmaranz 2002] nachzulesen.
59
Begriffe wie Inclusiuon, Delegation und Hooks, sind in diversen Design Patterns definiert [Anmerkung des Autors]
Seite 64
Kapitel 4 - Verteilte Anwendungen
Die sorgfältige Analyse des Datenflusses und des Kontrollablaufs von verschiedenen
Use-Cases, in Zusammenhang mit den Anforderungen und Eigenschaften eines Dinopolis
Objektes, führte zum Entwurf einer modularen System Architektur. Das Ziel beim
Entwurf der Architektur war es, wie schon zu Beginn erwähnt, ein möglichst schlankes
und maximal erweiterbares System zu kreieren. Weitere Projektvorgaben wie
Plattformunabhängigkeit und Programmiersprachenunabhängigkeit sind entsprechend
berücksichtigt worden. Die Dinopolis Systemarchitektur, wie sie in Abbildung 4.17 zu
sehen ist, wurde vom IICM in Zusammenarbeit mit dem German Aerospace Center
(DLR) entwickelt.
Die Pfeile stellen den Datenfluss und den Kontrollablauf dar; die verschiedenen
Kästchen repräsentieren die verschiedenen Module. Die Funktionalität von Dinopolis
wird über diverse APIs zur Verfügung gestellt. Aus Sicht der Softwareentwicklung ist ein
API (Application Programming Interface) der „View“ im „Model-View-Controller“
Paradigma. Im Sinne von Dinopolis als Middleware stellen die APIs deshalb auch keine
Funktionen für die Visualisierung bereit. Das Interessante an den verschiedenen APIs ist
jedoch die Art und Weise, wie auf die Objekteigenschaften und Funktionen zugegriffen
werden kann. Nur über so genannte „Proxies“, die vom Kernel Access Modul zur
Verfügung gestellt werden, ist ein kontrollierter (Security Checks) Zugang zu den
Objektdaten bzw. Funktionen oder Module möglich. Das Kernel Access Modul stellt eine
Art „sichere Barriere“ zum Kernel dar, da sämtliche Requests über das Kernel Access
Modul laufen. Um Multi-User Operationen bewältigen zu können, laufen sämtliche
Applikationen in einem eigenen applikationsspezifischen Kontext ab.
Im strichlierten Bereich in Abbildung 4.17 sind die einzelnen Kernel Module
dargestellt, wobei diese zur Laufzeit und bei Bedarf vom Kernel Modul Management
Tool dynamisch geladen werden. Zusätzlich werden beim Ladeprozess auch
Sicherheitschecks durchgeführt, um mögliche Angriffe von „Vieren“ oder „Trojanischen
Pferden“ vom System Kernel fernhalten zu können.
Das Kernel Management Modul ist verantwortlich für das Laden, Instantieren und
Löschen von Kernel Modulen. Weiters muss auch beim Instantieren und Löschen das
Security Modul verständigt werden. Das Security Modul ist Teil des Kernel und für die
Existenz des Kernels zwingend erforderlich. Für spezielle Applikationen, die
beispielsweise in einer gesicherten Umgebung laufen, kann das Security Modul auch
entsprechend angepasst werden.
Seite 65
Abbildung 4.17 Dinopolis System Architektur [Schmaranz 2002]
So genannte „Embedders“ sind als Hybride Module ausgeführt und trennen den
Kernel Bereich vom Benutzerbereich. Der Pfeil von den Embedders zum Kernel AccessModul beschreibt wiederum den geschützten Datenzugriff durch das Kernel Access
Modul. Im Unterschied zu den Kernel Modulen haben Embedders keinen direkten Zugriff
auf Funktionalitäten innerhalb der Kernels. Embedders können auch als spezielle Driver
angesehen werden, die ein Minimum an notwendigen Funktionen anbieten müssen
(lesender Zugriff). Das Adresshandling selbst bleibt wiederum dem System überlassen.
Für schreibende Zugriffe wird ein eigenes Interface zur Verfügung gestellt. Das
Entwerfen von Embedders kann nach denselben Richtlinien wie zum Entwurf der
Objekte verwendet werden. Durch den Einsatz von Operations, Services, Hooks,
Observern, Delegater und Events können Embedders als voll funktionsfähige Teile in das
Dinopolis System integriert werden.
Das Netzwerk Modul ist zwar als eigenständiges Modul ausgeführt, jedoch ist es fest
in den System Kernel integriert. Als Aufgabe für das Netzwerk Modul sind sämtliche
Verteilungsaspekte in Dinopolis vorgesehen. Eingehende und ausgehende Requests sind
nur über das Kernel Access Modul aufrufbar um wiederum Security Checks durchführen
zu können. Die wichtigste Aufgabe des Netzwerk Moduls ist jedoch die
Aufrechterhaltung der Netzwerktransparenz. D.h. innerhalb von Dinopolis Systemen sind
alle Objekte gleich anzusprechen, egal ob sie physisch lokal oder in externen Dinopolis
Systemen existieren.
Das Bootstrapping und Configuration Modul ist zuständig für die Erstinitialisierung,
quasi dem „Booten“ des Systems. Als erste Aktion wird das Kernel Access Modul
instantiert und danach mittels verschiedener Protokolle die anderen Module geladen. Um
auch die Sicherheit beim Booten gewährleisten zu können, wird zu Beginn ein minimales
Security Modul geladen, dass später vom eigentlichen Security Modul ersetzt wird.
Die Aufgaben des Objekt Management Moduls sind in zwei verschiede
Aufgabenbereiche unterteilt. Interne Verwaltungsaufgaben und quasi „externe“
Verwaltungsaufgaben. Zu den internen Verwaltungsaufgaben gehören das Erzeugen,
Seite 66
Kapitel 4 - Verteilte Anwendungen
Laden, Speichern, Löschen und Verändern der Objekte. Weiters fallen interne
Operationen wie das Verwalten des Objekt-Content, der Meta-Daten und das Verwalten
der n:m Wechselbeziehungen in dessen Aufgabenbereich. Der externe Aufgabenbereich
umfasst alle Operationen die das Verteilen der Objekte in den verschiedenen virtuell
verteilten Dinopolis Systemen vornehmen. Dies unter der Berücksichtigung der
jeweiligen Persistenz der Objekte bezüglich Quelle-Ziel.
Das Adress Management Modul ist ähnlich wie das Objekt Management Modul in
zwei Aufgabenbereiche unterteilt. Der erste Aufgabenbereich kümmert sich wiederum
um die interne, lokale Adressierung und stellt den Zugang zu den physischen
Objektreferenzen her. Weiters bietet das lokale Adress Management Modul die Stubs für
das Globale Adress Management Handling an. Das Globale Adress Management ist im
Gegensatz zum Lokalen Adress Management Modul nicht innerhalb des Kernels
angesiedelt. Es läuft als eigener Netzwerkdienst, da es auf einen für Dinopolis neu
entwickelten, allgemein einsetzbaren globalen Referenzierungsmechanismus basiert. Der
Adressierungsalgorithmus namens DOLSA (Distributed Lookup Service Algorithm) wird
von einer separaten Architektur gesteuert. Weiterführende Informationen können in
Kapitel 7 „The Address Management Module“ von [Schmaranz 2002] nachgelesen
werden.
Das Interrelation Management Modul verwaltet alle möglichen Wechselbeziehungen
zwischen Objekten. Eine Wechselbeziehung ist ihrerseits eine Repräsentation eines
Dinopolis Objektes. Deshalb ist die Beziehung zwischen Objekt Management Modul und
Interrelation Management Modul in Abbildung 4.17 bidirektional dargestellt.
Mit dem Virtual System Management Modul kann man verschiedene Objekte, auch
von externen Systemen miteinander kombinieren. Diese virtuelle Kombination entspricht
einem neuen Dinopolis Objekt und kann entsprechend auch mit denselben Möglichkeiten
bearbeitet werden. Denkbar wäre z.B. die Verknüpfung von Objekten, die Daten aus dem
Filesystem und einer Datenbank (Meta-Informationen) kombinieren und die als
gemeinsame Instanz ansprechbar sind.
Das External System Management Modul verwaltet alle Embedders und deren
Laufzeitumgebung. Diese müssen beim External System Management Modul registriert
sein und können on demand bei Bedarf instantiert werden. Wie bereits erwähnt sind
Requests von Embedders immer auch dem Security Check des Kernel Access Moduls
unterworfen. Embedders werden auch in einem eigenen, unabhängigen Kernel Bereich
ausgeführt, der keinen direkten Zugriff auf den Kernel Bereich zulässt. Somit können
externe Systeme nur über diese Möglichkeit sicher an das System angebunden werden.
4.8.
Web Service Architektur (WSA)
Der Begriff Webservice ist in dieser Form recht allgemein gehalten und beschreibt
Dienste, die über das Web zur Verfügung gestellt werden. Dies kann z.B. ein einfacher
Webserver sein, der nur HTML Seiten liefert (Nachrichtendienst, Börsenkurse, etc.), oder
aber auch ein spezieller Dienst, der über definierte Schnittstellen den Zugriff auf die
gespeicherten Daten ermöglicht. Schon an diesen beiden Beispielen kann man erkennen,
dass der Begriff Webservice oft falsch verwendet wird bzw. missverstanden wird.
Weiters gibt es viele verschiedene Implementierungen auf unterschiedlichen Plattformen,
die zueinander nicht kompatibel sind. Zusätzlich ist das Auffinden von Webservices
meist nicht automatisiert möglich. Darum gab es vom W3C eine Initiative den Begriff
Webservice und die damit verbundene Architektur zu spezifizieren bzw. zu
standardisieren.
Seite 67
Im W3C Vorschlag wird der Begriff Webservice definiert mit: „Ein Webservice ist ein
Softwaresystem, das entwickelt wurde um Interaktionen über ein Netzwerk zwischen zwei
Maschinen abwickeln zu können. Es unterstützt ein spezielles, maschinell verarbeitbares
Interface (WSDL). Verschiedene Systeme können unter Einhaltung der Spezifikation
SOAP-Messages an das Webservice stellen. Typischerweise werden Messages in XMLserialisierter Form mit HTTP oder anderen Web spezifischen Standards übertragen. 60
[Booth et al. 2003]
Der Datenaustausch bei der WSA erfolgt in XML Notation (siehe Abschnitt 5.4).
Durch die Wahl von XML als Transportmedium ist Plattformunabhängigkeit und
Programmiersprachen-unabhängigkeit gegeben. XML ist standardisiert, weit verbreitet
und es gibt viele Werkzeuge um einfach XML Dokumente erzeugen zu können. Eine
einfache Web Service Architektur besteht aus Provider – Broker – Client. Ein Provider
meldet seinen Dienst bei einem Broker an. Um einen gewünschten Dienst zu suchen,
wendet sich ein Client an einen Broker. Dieser dient dabei als Vermittler zwischen Client
und Provider. Ist ein Dienst gefunden, kann vom Provider im ersten Schritt die
Spezifikation der Schnittstellen angefordert werden, und danach der Dienst in Anspruch
genommen werden. Ein Standard zur Registrierung von Webservices bei Brokern ist
UDDI, siehe Abschnitt 4.8.1. UDDI ist ebenfalls in XML definiert und gliedert die
registrierten Einträge wie eine Art Webverzeichnis. Als Schnittstellen Spezifikation in
WSA ebenfalls wird das standardisiert WSDL Format verwendet, siehe Abschnitt 4.8.2.
WSDL beschreibt im wesendlichen das Interface und legt Funktionen bzw. Definitionen
zu Parameter und Rückgabewerten fest. [Booth et al. 2003]
4.8.1.
UDDI
Die Abkürzung UDDI bedeutet Universal Description, Discovery and Integration.
UDDI ist standardisiert und in XML spezifiziert. Mit UDDI können Business Registries
für Webservices aufgebaut werden. Die UDDI Registry unterscheidet zwischen drei
Informationstypen: „White Pages“, „Green Pages“ und „Yellow Pages“. In White Pages
werden Business Informationen gespeichert. Dies können Kontaktinformationen oder
sonstige Unternehmensspezifische Daten sein. Mit Hilfe von White Pages kann man
gezielt nach Unternehmens spezifischen Diensten bzw. Daten suchen. Green Pages
enthalten vorwiegend technische Informationen zu einem Dienst. Dies kann z.B. auch
eine Spezifikation der Schnittstelle des Dienstes sein (WSDL). Green Pages erlauben so
die gezielte Suche nach technischen Merkmalen. In den Yellow Pages werden Dienste
nach standardisierten Taxonomien abgelegt bzw. stellen den Zugang zu den Diensten her.
Abbildung 4.18 gibt einen Überblick über die UDDI Registry und deren Einträgen.
[UDDI 2000]
Abbildung 4.18: UDDI Business Registry [Sleeper 2001]
60
A 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 (specifically 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.
[Booth et al. 2003]
Seite 68
Kapitel 4 - Verteilte Anwendungen
UDDI besteht aus vier Hauptspezifikationen: Die Spezifikation der Datenstruktur von
Registry Einträgen wird mit XML-Schema festgelegt. Die UDDI API Spezifikation legt
fest, wie Einträge in der Registry verwaltet werden (read, insert, delete). Die Replikations
Spezifikation legt fest, wie Registry Einträge verschiedener UDDI-Anbieter miteinander
abgeglichen werden können. Die Spezifikation für UDDI-Anbieter legt Formalismen fest,
die eingehalten werden müssen, um standardisiert einen UDDI Server betreiben zu
können. Weiters wird in Folge zwischen drei verschiedenen Registry-Typen
unterschieden. Öffentliche Registries (Public) sind frei zugänglich und über das Internet
erreichbar. Semi-private Registries bieten über das Extranet (eigens verbundene
Netzwerke) beschränkten Zugriff. Private Registries gelten als Isoliert und sind nur lokal
über das Intranet erreichbar. Eine grafische Übersicht dieser Registry Typen und deren
Interaktionen gibt Abbildung 4.19. [Stencil 2002]
Abbildung 4.19: Konzept möglicher UDDI Register Typen und deren Interaktionen [Stencil 2002]
Das UDDI XML-Schema definiert vier Typen um Dienste in einer UDDI Registry
eintragen zu können. Dies sind Business Information (businessEntity), Service
Information (businessService), Binding Information (bindingTemplate) und Service
Specification Information (tModel). Als erstes Element in eines Registry Eintrages steht
das businessEntity Element. Im businessEntity Element werden einerseits Key
Identifier abgelegt wie z.B. Name, Beschreibung und Kategorien (Yellow Pages),
andererseits sind auch die Definitionen der Dienste (businessService) als
Unterelemente abgelegt. Das businessService ist eine Art Container und gruppiert
Webservices anhand spezifischer Kategorien Als zweite Substruktur der Business
Information ist das bindingTemplate Element. Im bindingTemplate Element werden
die technischen Merkmale eines Webservice vermerkt. Zusätzlich zu den technischen
Merkmalen sind Referenzen zu den jeweiligen technischen Spezifikationen eines
Webservice abgelegt, den tModel Elementen. tModel Elemente stellen eine Art
„technische Fingerabdruck“ des Webservices dar. In der tModel Struktur wird
festgehalten welche Protokolle unterstützt werden, welche Sicherheitsaspekte erfüllt
werden müssen, wie Übergabeparameter definiert sind und welche Rückgabewerte zu
erwarten sind. Einen Überblick über das UDDI Register Schema gibt Abbildung 4.20.
[UDDI 2000] 61
61
Für weiterführende Informationen zu UDDI sei auf folgende Quellen verwiesen:
http://www.uddi.org; http://www.uddi.org/whitepapers.html; http://www.stencilgroup.com
Seite 69
Abbildung 4.20: UDDI Register Schema [UDDI 2000]
4.8.2.
WSDL
Wie bei der Einführung in WSA schon erwähnt, ist WSDL (Web Service Description
Language) eine auf XML basierende Sprache, mit der die Funktionsweise von Netzwerk
Diensten (Webservices) beschrieben werden können. Eine WSDL Beschreibung stellt
eine Art Kochrezept dar, mit der Applikationen automatisiert miteinander kommunizieren
zu können. Die Funktionsweise eines Webservices legt den Datenaustausch zweier
Endpunkte in einem Netzwerk fest. Der Datenaustausch kann einerseits
nachrichtenorientiert sein, oder prozessorientiert. Es wird eine abstrakte Definition der
Operationen bzw. Nachrichten erstellt (types, message, operation, portType) und diese
dann an bestehende Datenformate und Protokolle gebunden (binding, service).
Zusätzlich kann in WSDL eine Beschreibung des Message Formates und des
Übertragungsprotokolles angegeben werden. Grundsätzlich ist die WSDL Spezifikation
offen gegenüber künftigen Nachrichtenformaten und Übertragungsprotokollen. Jedoch
werden in der vorliegenden Form (WSDL 1.1) nur Nachrichten im MIME-Format mit
SOAP (siehe Abschnitt 5.8) oder HTTP übertragen. [W3C WSDL 2001]
Ein WSDL Dokument ist grundsätzlich in mehrere Bereiche aufgeteilt [W3C WSDL
2001] [Cerami 2002]:
• definitions: Es ist das erste Element in einem WSDL Dokument, legt den Namen
des Webservice fest, definiert den Namespace des Dokumentes und beschreibt alle
notwendigen Service-Elemente.
• types: Stellt eine Sammlung von Datentypen zur Verfügung die die Funktionen des
Webservice verwenden. WSDL besitzt keine eigene Typen-Spezifikation, sondern
verwendet bestehende Typensysteme wie XSD.
• message: Beschreibt eingehende bzw. ausgehende Nachrichten bzw. deren Parameter.
• operation: Hier werden die Funktionsköpfe eines Webservice deklariert. Neben dem
Funktionsnamen werden Übergabeparameter und Rückgabewerte beschrieben.
• portType: Ermöglicht die Kombination mehrerer Messages bzw. Operations und legt
den Typ (Übertragungs- Primitiv) fest. Dabei wird unterschieden ob die Nachricht
vom Typ „One-Way“ (Client informiert Server), „Request/Response“ (Client erhält
Rückantwort vom Server), „Solicit/Response“ (Server fordert Information vom Client)
oder „Notification“ (Server informiert Client) ist.
Seite 70
Kapitel 4 - Verteilte Anwendungen
• binding: In diesem Bereich werden die abstrakten Port Typen an konkrete
Übertragungsprotokolle gebunden. Es wird jeweils das Kommunikations- Protokoll
(SOAP), das Träger Protokoll (HTTP) und das Nachrichtenformat (MIME) festgelegt.
• port: Ein Port weist den zuvor definierten Bindings physikalische Netzwerkadressen
zu.
• service: Der Bereich service fasst die port Definitionen zusammen.
• documentation: Es kann in jedem Bereich beliebig oft ein Dokumentation eingefügt
werden.
• import: Es ist möglich WSDL Dokumente modular zu gestalten, indem das WSDL
Dokument in mehrere Teile gesplittet wird. Damit erreicht man einerseits eine
Trennung der Definitionen und die Möglichkeit der Widerverwendbarkeit ist gegeben.
import Statements können wiederum in jedem Teilbereich eingebunden werden.
4.9.
Schlussbemerkung
Grundlegende Basisfunktionalitäten und Eigenschaften von verteilten Systemen wie
Transparenz, Stabilität, Skalierbarkeit, Verteiltheit und Transaktionen sind wichtige
Bausteine verteilter Anwendungen. Das nicht immer alle Vorgaben realisiert werden
können, beruht in der Tatsache, dass einige Bereiche zueinander in Konkurrenz stehen.
Neue Ansätze wie Peer-to-Peer bieten jedoch auch nur Teillösungen, sind aber im
Gegensatz zu Client-Server Modellen im Vorteil bezüglich Skalierbarkeit und
Erweiterbarkeit. Mehrschichtige Architekturen erweitern den reinen Client-Server
Ansatz, indem Sie die unmittelbare Verbindung von Client zu Server auftrennen, und eine
Zwischenschicht anbieten. Diese Zwischenschicht stellt die Bindung von verteilten
Informationen zu verteilten Funktionen her. Der Client muss nicht wissen, wie und woher
er seine Informationen bekommt. Für die vorliegende Arbeit ist aber nicht der Multi-Tier
Ansatz als solcher von Interesse, sondern der Kommunikationsablauf und der
Datenaustausch zwischen den Schichten.
Im Gegensatz zum Multi-Tier Ansatz bietet die P2P Technologie Vorteile aufgrund
reduzierter Funktionalität einzelner Peers. Insbesondere beim Entwurf verteilter
Suchsysteme kann dieser Ansatz durchaus Vorteile bringen, indem verschiedene Peer
Groups spezielle Aufgaben erfüllen; z.B. sammeln von Daten, indizieren der Daten,
erstellen von statistischen Auswertungen, durchführen von Übersetzungsaufgaben. Des
Weiteren bietet der P2P Ansatz Lösungen zum automatisierten Auffinden von Diensten.
Der objektorientierte Ansatz und die Verwendung von Komponenten Architektur bringen
viele Vorteile mit sich. Softwaremodule können einfach und effizient erstellt werden. Die
Widerverwendbarkeit von Komponenten bzw. Modulen verringert die Entwicklungszeit.
Einfachheit und Widerverwendbarkeit bewirken auch eine kostengünstigere Entwicklung.
Die Unterstützung von Standards bringt neben einer breiteren Akzeptanz auch den
Vorteil der steten Weiterentwicklung, wenn auf offene und erweiterbare Protokolle bzw.
Dienste gesetzt wird.
Die untersuchten Lösungen DCE, COM und DCOM gelten als Vorläufer moderner
Middleware Technologien. Diese verwenden eigene Transport und Kommunikationsmechanismen. Die Weiterentwicklung von COM und DCOM mündet in der .NET
Plattform. Die Microsoft-Entwicklung setzt dabei auf offene XML Protokolle (SOAP)
und unterstützt die Registry über Webservices UDDI in Verbindung mit WSDL. Die
J2EE Architektur ist mittlerweile weit verbreitet, da sie einerseits plattformunabhängig ist
und sehr viele Standards unterstützt.
Seite 71
Ebenso setzt J2EE auf SOAP zur Datenübertragung und WSDL bzw. UDDI als
Anbieter für Webservices. Zusätzlich wird noch das B2B Verteilungsframework ebXML
unterstützt. Als Repräsentationsschicht bzw. zur Anbindung an verschiedenste Geräte
wird auch XHTML und WML unterstützt. ONE SUN’s Gegenstück zu .NET von
Microsoft setzt zur Gänze auf XML basierende Standards. Dazu gehören XML
Transportmechanismen wie XML-RPC, SOAP oder ebXML um nur eine kleine Auswahl
zu nennen. Zur Authentifizierung kann LDAP verwendet werden. Ebenso wird wiederum
auf die UDDI / WSDL Webservice Registry gesetzt um Dienste anbieten bzw.
konsumieren zu können.
Aus den Analysen moderner Middlewaretechnologien geht klar hervor, dass der Weg
in der Datenübertragung und in der Kommunikation über XML basierende Technologien
abgewickelt wird. Diese sind erweiterbar, großteils standardisiert und verfügen über eine
breite Akzeptanz. Entsprechend wird im nächsten Kapitel eine Auswahl standardisierter,
XML basierter Protokolle näher untersucht.
Zusätzlich sollen, neben dem Aspekt der Standardisierung auch die Unterstützung von
Sicherheitsaspekten sowie die Art des Datentransfers bzw. welcher Art die zu
übertragenen Daten sein können, untersucht werden. Als Überleitung zum Kapitel 5 steht
jedoch weiterhin das Schlagwort „Standardisierung“. Zu Beginn des folgenden Kapitels
wird der Begriff Standardisierung erläutert. Danach wird eine Reihe von
Übertragungsprotokollen untersucht, die unter dem Gesichtpunkt einer möglichen
Verwendbarkeit als Transportmedium in verteilen Suchsystemen eingesetzt werden
können.
Seite 72
Seite 73
Kapitel 5
5.
Transport Protokolle
Die Ansätze von verteilten Anwendungen und die vorgestellten Technologien des
Abschnittes Middleware aus dem vorigen Kapitel legen oft eigene Transportprotokolle
fest. Eine unglaubliche Vielfalt an Entwicklungen führt auch immer wieder zu
Inkompatibilitäten bei der Kommunikation oder der Anbindung von Fremdsystemen.
Gerade deshalb ist es wichtig, sich auf bestehende Standards zu stützen, um einerseits
eine breite Akzeptanz zu erhalten und um andererseits die Gewährleistung der steten
Weiterentwicklung von Transport- und Kommunikationsschicht zu bekommen. Ziel
dieses Kapitels ist, durch die Analyse verschiedener Kommunikationsprotokolle eine
Auswahl an geeigneten Übertragungs-protokollen für verteilte Suchesysteme finden zu
können.
Werden Standardprotokolle unterstützt, so können auch Fremdsysteme leicht integriert
bzw. angebunden werden. Probleme stellen jedoch immer wieder Erweiterungen
verschiedener Protokolle dar und die Tatsache, dass es aus kommerzieller Sicht besser ist,
die Kommunikationsschicht zu verschleiern. Diese Problematik lässt sich nicht nur
anhand bestehender Systeme im Bereich Instant Messaging aufzeigen, sondern auch
anhand vieler anderer Produkte, die bewusst nicht auf Standards setzen [Anmerkung des
Autors].
In den nun folgenden Abschnitten wird näher auf standardisierte und quasi
standardisierte Transportprotokolle eingegangen. John Larmouth definiert62 in seinem
Buch ASN.1 Complete, Computer Protokolle als „wohl definierte Menge an Nachrichten
mit
definiertem
semantischen
Inhalt
bzw.
Regeln
zur
strukturierten
Nachrichtenübertragung“. Bevor die Funktionsweise der verschiedenen Protokolle
erklärt wird, bildet eine Analyse des Standardisierungs-prozesses den Einstieg in das
Kapitel.
5.1.
Standardisierung
Standardisierungsvorschläge werden durch Organisationen, wie der International
Organisation for Standardization (ISO63) oder durch einige seiner nationalen
Mitgliedskörper wie z.B. der ANSI64 geprüft, genehmigt und gelten dann als anerkannte
allgemein gültige Standards. Industriestandards hingegen werden von diversen Firmen
festgelegt, die zwar durchaus weit verbreitet sein können, aber nicht allgemein anerkannt
62
John Larmouth, Definition des Begriffs Computer Protokoll: “A well-defined set of messages (bit-patterns or increasingly today - octet strings) each of which carries a defined meaning (semantics), together with the rules
governing when a particular message can be sent” [Larmouth 1999].
63
ISO; siehe http://www.iso.ch
64
ANSI (American National Standards Institute); siehe http://www.ansi.org
Seite 74
Kapitel 5 - Transport Protokolle
sind. Gerade im Bereich des Internets, wo es rasante Entwicklungen verschiedenster
Technologien gibt, wird das Wort Standard sehr häufig im Zusammenhang mit dem so
genannten Industriestandard verwendet. Einer der Gründe ist, dass der allgemein gültige
Normierungsprozess in einem sich schnell entwickelnden Bereich, wie z.B. der InternetProtokolle, viel zu langsam sein würde und deshalb den Entwicklungsfortschritt im
Internetbereich bremsen würde. Zwischen „allgemein gültigen Standards“ und
"Industriestandards" gibt es eine breite Palette von so genannte „quasi Standards". Nur
einige Internet-Standards besitzen den Status der allgemeinen Gültigkeit, der bedeutet,
dass sie überall im Internet angewendet werden. Andere Internet-Standards gelten als
quasi Standard und es wird empfohlen sich auch an diese aus Kompatibilitätsgründen zu
halten. Die allgemein gültigen Standards definieren meistens die grundlegenden
Protokolle, die für den Betrieb des Internets unentbehrlich sind. In eigens geschaffenen
Foren werden ausschließlich Technologien, die sich auf den Internet-Bereich beziehen,
geprüft und festgelegt. [Korpela 1999]
Das RFC65 - Forum fällt hierbei in diese Kategorie dieser Foren und wird dabei
zumeist in Zusammenhang mit Internet-Standard verwendet. Dies ist jedoch nur teilweise
korrekt, da RFS’s eine Reihe von Dokumenten beschreiben, die durch das IETF66 geprüft
und offiziell zur Verfügung gestellt werden. Diese Dokumente beschreiben
praxisbezogene Vorschläge, zumeist Protokoll-Spezifikationen. Protokolle sind für die
Interoperabilität der Systeme unumgänglich. Programme, die Daten versenden, müssen
auf bestimmte Vereinbarungen basieren, d.h. das Format der Daten und das Format der
Übertragung muss definiert sein. Nur ein kleiner Teil der RFC-Dokumente sind auch
allgemein als gültiger Standard anerkannt. Das RFC Archiv bietet zusätzlich zu den
allgemein gültigen Internet-Standards eine breite Vielfalt an Themen an. [RFC 2026]
Ein allgemein gültiger Internet-Standard besitzt zusätzlich zu einer RFC-Nummer eine
STD-Nummer67, die sich nicht ändert, selbst wenn sich die RFC-Nummer ändert. Z.B.
wird das IP-Protokoll von [STD 5] definiert. Im RFC liegt das IP-Protokoll zurzeit mit
der Nummer [RFC 791] auf. Eine RFC-Nummer ist zwar eindeutig, jedoch unterliegen
die Protokolle zumeist einem steten Entwicklungsprozess. Sobald ein Dokument zur
Veröffentlichung freigegeben wird, bekommt das Dokument eine entsprechende RFCNummer. Liegt das gleiche Dokument in einer verbesserten oder erweiterten Version vor,
wird es erneut geprüft, mit einer neuen RFC-Nummer versehen und veröffentlicht.
Deshalb muss man bei Recherchen immer die aktuellste RFC-Nummer eines Dokumentes
suchen, um für neue Entwicklungen auch die aktuellste Spezifikation verwenden zu
können [RFC 2026][RFC 3000]. Eine Beschreibung über den Aufbau des RFC-Systems
ist in [STD 1][ RFC 3000] ersichtlich. Weiters ist in diesem Dokument auch eine
Auflistung momentan gültiger Internet-Standard Protokolle enthalten, die die Protokolle
nach folgenden Kriterien sortiert angeben:
•
•
•
•
65
Standard Protokolle sortiert nach STD
Standard Protokolle sortiert nach RFC
Best Current Practice sortiert nach BCP68
Best Current Practice sortiert nach RFC
RFC (Request For Comment)
IETF (Internet Engineering Task Force); siehe http://www.ietf.org/
67
STD steht für Standard, STD ist ein Unterbereich der RFC Serie. Die STD Nummer kennzeichnet speziell für die
Internet Community die als mit „Standard“ bezeichneten RFC-Dokumente aus. [STD 1] [RFC 1311]
68
BCP steht für Best Current Practice, BCP ist wiederum ein Unterbereich der RFC Serie [RFC 1818] [BCP 1]
66
Seite 75
Es gibt im RFC zusätzlich zum STD und BCP auch noch eine weitere ausgezeichnete
Untergruppe namens FYI (For Your Information). Diese kennzeichnen jedoch nur
bestimmte RFC Dokumente im Bereich der RFC Serie. Die FYI Reihe wurde als
Informationszentrale für Dokumente aller Art, die sich auf das Internet beziehen,
festgelegt. Themen des FYIs reichen von historischen Memos bis hin zu Antworten auf
allgemein gestellte Fragen zum Bereich Internet. Entsprechend ist das FYI Archiv auch
für ein breites Publikum bestimmt. Ein FYI Dokument kann von jedermann eingereicht
werden. Im Dokument [RFC 1150] wird näher auf diesen Unterbereich eingegangen. Im
[RFC 2500] (Internet Official Protocol Standards) sind die momentan gültigen Internet
Protokolle aufgegliedert in:
•
•
•
•
•
•
•
•
•
Standard Protocols
Network-Specific Standard Protocols
Draft Standard Protocols
Proposed Standard Protocols
Experimental Protocols
Current Applicability Statements
Non-Standard Protocols
Informational Protocol
Historic Protocols
RFC Dokumente entstehen durch Einreichen neuer Entwürfe in entsprechenden
Gremien. Diese Entwürfe gelten bis zur Annerkennung und Veröffentlichung als
inoffiziell. Die Entwürfe entstehen oft als Ergebnis umfangreicher Entwicklungsarbeit
vieler beteiligter Personen oder Organisationen und bedürfen der Prüfung von RFC
Mitgliedern.
Diese Drafts69 sollen jedoch nicht als Quelle oder Referenz für neue Entwicklungen
verwendet werden, obwohl es durchaus vorkommen kann, dass ein Draft nach kleinen
oder gar keinen Änderungen akzeptiert wird und Gültigkeit erlangt. Jedoch können diese
Drafts durchaus bei Forschungszwecken und Recherchen sehr nützlich sein, zumal sie
meist neuartige Technologien betreffen. Solche Drafts für den Internet Bereich kann man
über die Seite http://sunsite.cnlab-switch.ch/cgi-bin/search/standard/nph-findstd suchen
und abrufen. Die Ziele des Internet Standardisierungs-prozesses sind nach [Korpela
1999]:
•
•
•
•
•
Gewährung technisch hervorragender Leistung
überprüfen bestehender Implementierungen
erstellen freier, kurzer und leicht verständlicher Unterlagen
Offenheit und Gerechtigkeit bezüglich der Antragsteller
Gewährleistung einer schnellen Fertigstellung
Geeignete Verfahren bieten eine angemessene, offene und objektive Grundlage für das
Entwickeln, das Auswerten und das Festlegen von Internet-Standards. In jedem Stadium
des Standardisierungsprozesses wird eine Spezifikation wiederholt besprochen, in z.B.
öffentlichen Sitzungen und/oder in Mailing-Listen. So muss ein Draft mehrfach auf
korrekte Funktionsweise und Interoperabilität durch unabhängige Mitglieder geprüft
werden, bevor der Draft als Internet-Standard angenommen werden kann. In der Praxis
erreicht jedoch nur ein kleiner Teil von Spezifikationen das Niveau als Standard
zugelassen zu werden.
69
RFC-Drafts; siehe http://sunsite.cnlab-switch.ch/cgi-bin/search/standard/nph-findstd
Seite 76
Kapitel 5 - Transport Protokolle
Ein Grund dafür ist, dass der Entwicklungsprozess häufig Verbesserungen und
Änderungen unterworfen ist. Außerdem werden Standardisierungen auch von anderen
Organisationen durchgeführt. Zum Beispiel ist die HTML-Sprachversion 2.0 im [RFC
1866] definiert, aber die Weiterentwicklung der Sprache wird von der Organisation
W3C70 durchgeführt. Das Standardisierungssystem von RFC Dokumenten ist aber nicht
so rigoros wie man es eigentlich von so einer Organisation erwarten dürfte.
Z.B. definiert das [RFC 1036] Dokument aus dem Jahr 1987 Standardprotokolle zum
Austausch von Informationen in USENET Systemen, die für die Funktionalität von
USENET wesentlich sind. Dieses RFC ist aber kein vorgeschlagener Standard gemäß
dem [STD 1]. Die Organisation IANA71 verzeichnet das RFC sogar mit dem Status
„unbekannt“. Abschließend soll noch angeführt werden, welche Organisationen hinter der
RFC Reihe stehen [Korpela 1999]:
•
•
•
•
•
IAB IANA IETF IRTF ISOC -
5.2.
Internet Architecture Board:
Internet Assigned Numbers Authority:
Internet Engineering Task Force:
Internet Research Task Force:
Internet Society:
http://www.iab.org
http://www.iana.org
http://www.ietf.org
http://www.irtf.org
http://www.isoc.org
Allgemeines
Die in der Einleitung angeführte Definition von John Larmouth sieht Computer
Protokolle in erster Linie als Transportmittel, das durch eine vereinbarte Logik Inhalte
zeitlich gesteuert überträgt. Die Spezifikation der Syntax und der Semantik legt implizit
das Datenformat fest. Protokolle besitzen aber weitaus mehr Eigenschaften, als nur dem
Transport zu dienen. Eine grobe Unterscheidung kann zwischen Transport- und
Kommunikationsprotokollen vorgenommen werden. Während Erstere entworfen wurden
um Daten von Ort A zu Ort B zu transportieren, kümmern sich
Kommunikationsprotokolle vorwiegend um das Verbindungsmanagement. Weiters wird
unterschieden ob ein Protokoll verbindungsorientiert oder verbindungslos arbeitet. Daten
können nachrichtenbasierend synchron bzw. asynchron über unidirektionale oder
bidirektionale Verbindungen transferiert werden. In vielen Fällen stehen jedoch
Protokolle in direkter Verbindung zur darunter liegenden Trägerschicht. Entsprechend
sind oft auch die Eigenschaften der Protokolle vorgegeben. Neben Transport und
Kommunikation werden in Protokollen auch spezifische Funktionalitäten abgebildet.
Protokolle dienen als Vermittler (Routing), Informationsbereitsteller, Verteiler
(Broadcasten), oder handeln Sicherheitskriterien zur Übertragung aus bzw. bieten
Möglichkeiten zur Authentifizierung an. [Anmerkung des Autors]
Die nun folgende Analyse ausgewählter Protokolle versucht deren Eigenschaften und
Anwendungsmöglichkeiten herauszufinden. Von besonderem Interesse sind Aspekte wie
die Art und Weise der Datenübertragung, Standardisierungsbemühungen, Erweiterbarkeit
und Akzeptanz.
70
W3C (World Wide Web Consortium); W3C ist ein Forum für Information, Handel, Kommunikation und
Kollektivverständnis im Bereich Internet. Das W3C entwickelt interoperable Technologien (Spezifikationen, Richtlinien,
etc.) um das volle Potential des Internet ausschöpfen zu können; siehe http://www.w3.org/
71
IANA (Internet Assignment Number Authority); IANA ist eine zentrale Stelle zur Verwaltung und Koordination globaler
Internet spezifischer Funktionen und Eigenschaften; siehe http://www.iana.org/
Seite 77
5.3.
Z39.50
Das Z39.50 Protokoll wird vorwiegend im Bereich Information Retrieval in
bibliothekarischen Informationssystemen eingesetzt. Die aktuellste Version des Z39.50
Standards (Information Retrieval Z39.50-1995: Application Service Definition and
Protocol Specification) kann von der Library of Congress (loc72) unter der URL:
http://lcweb.loc.gov/z3950/agency/document.html abgerufen werden. Weiters werden an
dieser Stelle Verweise zum äquivalenten ISO Standard 23950:1998 und Z39.50-1995 von
NISO angegeben. Im ISO/OSI Schichtenmodell ist Z39.50 im „application layer“
(Schicht 7) angesiedelt. [Gottswinter 1996]
Zur Beschreibung des Protokollmodelles wird das abstrakte Konzept des ServiceUser, Service-Provider und Service-Primitive angewandt. Die Architektur basiert auf dem
Client-Server Modell. Dabei werden Teile des Clients als Z39.50 Origin und Teile des
Servers als Z39.50 Target bezeichnet. Der Origin ist eine Instanz des Client und generiert
Anfragen. Der Target stellt eine Instanz des Servers zur Verfügung, der Anfragen
akzeptiert. Der Service-User ist Teil des Clients bzw. des Servers und erzeugt Requests
für den Origin und den Target. Der Kommunikationspfad zwischen Client und Server
wird als Service-Primitive bezeichnet. Das abstrakte Protokollmodell ist in Abbildung 5.1
ersichtlich.
Abbildung 5.1: Darstellung des abstrakten Protokollmodells [Gottswinter 1996]
Eine Service-Primitive stellt eine Interaktion zwischen Service-User und ServiceProvider dar. Es gibt vier Primitiv-Typen: Request, Indication, Response und
Confirmation. Der Datenaustausch kann in sechs Schritten zusammengefasst werden
[Gottswinter 1996]:
1.
2.
3.
4.
5.
6.
Request Primitive von Origin Service-User an Service-Provider
Protokollnachricht von Origin an Target
Indication Primitive von Service-Provider an Target Service-User
Response Primitive von Target Service-User an Service-Provider
Protokollnachricht von Target an Origin
Confirmation Primitive von Service-Provider an Origin Service-User
Das Protokoll ist zustandsbehaftet und nachrichtenbasierend. Es setzt auch eine
permanente Verbindung zwischen Client und Server voraus, wobei die meisten
Implementierungen mittels TCP/IP kommunizieren. Ein Z39.50 Server bietet über drei
Hauptaufgaben seine Dienste dem Client zur Verfügung [Gottswinter 1996]:
• Die Protokollfunktionen verwalten, bearbeiten und behandeln eingehende Requests
und senden Ergebnisse bzw. Antworten als Nachricht an den Client. Dabei werden die
eingehenden Anfragen in Datenbank spezifische Anforderungen umgesetzt.
72
loc (Library of Congress); siehe http://lcweb.loc.gov/
Seite 78
Kapitel 5 - Transport Protokolle
• Kontrollfunktionen des Servers beinhalten neben der Zugriffskontrolle und
Entscheidungshilfen (Verteilungsfunktionen) auch Cache-Mechanismen, um die
Performance des Systems steigern zu können.
• Die Datenbankfunktionen stellen die Kernfunktionalität des Servers dar und führen
neben der Auswertung der Suchanfrage auch die Formatierung (zusammenstellen der
Nachricht) der Suchergebnisse durch.
In der nun folgenden Auflistung werden die in Z39.50-1995 (Version 3) spezifizierten
Dienste kurz beschrieben [Gottswinter 1996]:
• Initialize Service – Initialisierungsrequest: Im Initialisierungsvorgang werden Werte
wie die Protokollversion, die bevorzugte Größe der zu übertragenen Nachrichten, oder
die zu unterstützenden Dienste zwischen Client und Server ausgehandelt.
• Search Service (Suchrequest): Das Suchservice bietet dem Client neben der
Möglichkeit in einer einfachen Suchanfrage mittels eines Suchkriteriums auch eine
Auswahl an möglichen Suchsystemen an. Weiters werden z.B. auch die ÜbertragungsFormate in der Suchanfrage festgelegt. Der Server sendet dem Client als Suchantwort
jedoch nicht die Datenrecords, sondern lediglich die Anzahl der gefundenen
Datensätze. Der Server cached das Suchergebnis, das vom Client aus über einen
bestimmten Namen ansprechbar ist.
• Present Service (Übertragungsrequest): Mit diesem Dienst wird der gezielte Zugriff
auf die Datenrecords am Server ermöglicht. Dabei kann der Client festlegen, welche
Informationen er aus einem Record beziehen möchte oder ob der gesamte Record
übertragen werden soll. Die eigentliche Übertragung der Suchrecords erfolgt in
mehreren Schritten, wiederum nachrichtenbasierend.
• DeleteResultSet Service (Löschrequest): Über diesen Dienst kann der Client
Suchergebnisse am Targetsystem löschen.
• Access Control Service (Authentifizierungsrequest): Das Targetsystem kann über
diesen Dienst den Origin auffordern sich explizit auszuweisen. Dies wird über
Authentisierungskontrolle, Passwortkontrolle und weiteren Mechanismen realisiert.
• Resource Control Service (Statusrequest): Der Server kann über diesen Dienst
Statusmeldungen (Ressourcegrenzen, Unterbrechung einer Aktion) dem Client
mitteilen.
• Trigger Resource Control Service (Triggerrequest): Über diesen Dienst kann der
Client vom Targetsystem einen Statusrequest anfordern (innerhalb einer aktiven
Operation).
• Resource Report Service (Reportrequest): Dieser Dienst ermöglicht es dem Client
Ressource Reports zu bestimmten Aktionen des Targetsystem anfordern zu können.
• Sort Service (Sortrequest): Der Client fordert über diesen Dienst das Tartgetsystem
auf mehrere Suchergebnisse zu mischen bzw. die Suchergebnisse anhand geforderter
Kriterien zu sortieren.
• Scan Service (Iterationsrequest): Dieser Dienst erlaubt es dem Client gezielt
(Startpunkt und Schrittweite) Suchrecords vom Targetsystem anzufordern.
• Extended Search Service (erweiteter Suchrequest): Über diesen Dienst können Task
Packages erzeugt, geändert, gelöscht oder in Aktionen eingebunden werden. Diese
Task Packages definieren eine Reihe von Anweisungen, die bei Bearbeitung der
Aktionen ausgeführt werden.
Seite 79
• Termination Service (Closerequest): Sowohl das Origin-, als auch das Targetsystem
verwendet diesen Dienst zum Beenden aller aktiven Operationen. In weiterer Folge
wird mit diesem Request die Verbindung vom Client zum Server abgebrochen.
5.4.
XML-Grundlagen
XML bedeutet Extensible Markup Language. Diese erweiterbare Sprache wurde nicht
neu definiert, sondern stellt eine Untermenge der SGML Sprache dar, die schon seit 1986
standardisiert ist. Durch die große Akzeptanz von XML wurden viele neue
Anwendungsmöglichkeiten geschaffen. Der wichtigste Aspekt von XML ist die
Vereinheitlichung von Datentransport und Datenspeicherung. Ein weiterer Vorteil von
XML ist die Fähigkeit sowohl von Maschinen als auch von Menschen einfach
verarbeitbar zu sein. XML bildet Daten syntaktisch und logisch in einfachen Strukturen
ab. Einfach erklärt enthält XML Entitäten die auf andere Entitäten verweisen können.
Dabei spielt es keine Rolle ob eine zu referenzierende Entität im Dokument selbst liegt
oder entfernt über das Web zugreifbar ist. Die Syntax von XML gibt bereits die logische
Struktur eines XML Dokumentes vor. Die XML-Syntax beschreibt die Elemente,
Deklarationen, Kommentare und Verarbeitungsweisen der Sprache. Der breiten
Akzeptanz von XML ist es zu verdanken, dass man XML Dokumente bereits sehr einfach
mit speziellen Werkzeugen erstellen kann. [Scribner et al. 2001]
Um die Syntax von XML wiederum einfach validieren zu können, gibt es
verschiedenste Ansätze. Validieren bedeutet den XML-Code einerseits auf korrekte
Syntax zu überprüfen, und andererseits auch logische Strukturen gegenüber Vorgaben zu
testen. Die Syntax von XML Dokumenten kann mit speziellen XML-Parsern überprüft
werden. Logische Strukturvorgaben werden z.B. mit Hilfe von DTD’s oder XMLSchemata überprüft. Die nun folgenden Unterpunkte geben einen kurzen Überblick über
die wichtigsten XML-Grundlagen. Der nachfolgende Überblick orientiert sich zum
Großteil an der Arbeit von [Scribner et al. 2001]. Spezifische Verweise zu
Spezifikationen sind an den jeweiligen Stellen vermerkt.
5.4.1.
DOM
Das Document Object Model (DOM) gehört in die Kategorie der XML-Parser. Beim
DOM Ansatz wird eine XML Datei beim Parsen zur Gänze als Objektbaum in den
Speicher geladen. Eine Validierung der XML-Struktur ist deshalb auch nur zu Beginn
beim Laden der XML Datei möglich. Entsprechend ist auch die gesamte XML Datei zur
Gänze in der Applikation verfügbar. Eine explizite Fehlererkennung und Steuerung ist
nach dem Laden der XML Datei nicht mehr möglich. Entsprechend wird DOM bei
effizienten Verarbeitungsroutinen kaum eingesetzt. Der Vorteil im DOM Ansatz liegt
darin, dass er sehr einfach aufgebaut ist und bereits für Webanwendungen von neueren
Browserversionen (ab IE5.0, ab Mozilla 1.5) Clientseitig unterstützt wird. Eine geparste
und validierte XML Datei wird in DOM als Baumstruktur abgelegt. Jeder XML-Tag wird
als eigener Knoten im DOM-Baum (Node) abgebildet. Als Node-Eigenschaften
(Knotenelemente) werden z.B. Attribute als Liste abgelegt. Zusätzlich ist auch eine
Referenz zu den Kinderknoten gespeichert. Über eine spezielle API ist die Navigation in
diesem DOM Baum möglich. Mit speziellen Methoden kann man weiters auf Textinhalte
und Kommentare zugreifen. Je nach Implementierung des DOM-Ansatzes wird auch die
Manipulation der Knoten, bzw. Unterobjekte erlaubt. 73
73
Document Object Model (DOM) Level 1 Specification: http://www.w3.org/TR/REC-DOM-Level-1
Seite 80
5.4.2.
Kapitel 5 - Transport Protokolle
SAX
Das Simple API for XML, kurz SAX, gehört ebenfalls in die Kategorie der XMLParser. Im Gegensatz zum DOM Ansatz ist SAX ein ereignisgesteuerter Parser. Z.B. wird
bei jedem öffnendem und schließendem Tag ein Ereignis (Treiber) ausgelöst und
verarbeitet (durch einen Handler). Der Treiber ist der eigentliche Parser, der Handler legt
die Programmlogik fest. So kann für die gesamte XML Datei eine eigene Datenstruktur
implementiert werden. Man ist nicht an bestimmte Vorgaben gebunden. Aus diesem
Grund können Performancevorteile erzielt werden, da weniger Ressourcen in Gebrauch
sind. Da für die XML Daten-Repräsentation, wie bereits erwähnt, der jeweilige
Programmierer verantwortlich ist, stehen auch keine allgemein gültigen
Modifikationsfunktionen zur Verfügung. Dafür können diverse Parserroutinen
zielorientiert erstellt werden und erlauben so eine effiziente Abarbeitung des
Datenstromes. Will man hingegen Routinen entwerfen, die leicht erweiterbar sein sollen,
oder unabhängig von der XML-Notation, muss man gegnerische Verfahren einsetzen die
jedoch wiederum zu Lasten der Performance gehen. Zur Datenübertragung ist ein SAX
Parser wesentlich besser geeignet als etwa der DOM Parser, da bereits beim Parsen
entsprechend dem Ereignis verschiedene Callbackfunktionen aufgerufen werden können.
Eine Validierung der XML Daten erfolgt entsprechend zur Laufzeit beim Parsen. Ebenso
wie die Tag-Analyse kann so ein eigenes Error-Handling umgesetzt werden.
5.4.3.
DTD
DTD (Dokument Type Definition) beschreibt eine Grammatik mit der XML
Dokumente validiert werden können. Ein XML Dokument ist wohlgeformt wenn die
korrekte Syntax des Dokumentes durch einen Parser bestätigt wird und wird als gültig
angesehen, wenn das XML Dokument einer DTD-Spezifikation genügt. Die DTD
Grammatik ist an und für sich recht einfach aufgebaut und legt fest, welche Elemente und
Attribute in einem XML-Dokument verwendet werden dürfen. Elemente werden
definiert, indem alle Unterelemente deklariert werden (Inhaltsmodell). Im Inhaltsmodell
wird festgelegt, in welcher Reihenfolge die Elemente auftreten müssen, und die Anzahl
an erlaubten Wiederholungen. Weiters werden alle gültigen Attributdefinitionen eines
Elementes deklariert. Die Definition der Attribute erfolgt jedoch untypisiert. Weitere
Informationen zur Syntax und deren Anwendung kann in der Spezifikation vom W3C
nachgelesen werden.
5.4.4.
XML-Schema
XML-Schemata werden ebenfalls zur Validierung von XML-Daten eingesetzt.
Ähnlich wie bei DTD beschreibt ein XML Schema eine abstrakte Grammatik, die jedoch
mächtiger als die der DTD-Definition ist. Durch eine typisierte Attribut Definition und
der Möglichkeit von Ableitung können komplexe Attribut-Definition erstellt werden.
Neben der Typisierung ist weiters auch ein definiertes Eingabeformat über reguläre
Ausdrücke und ein deterministisches Inhaltsmodell über so genannte „Delimitors“
(minOccurs, maxOccurs) spezifizierbar. Die Spezifikation des XML Schema besteht aus
drei Teilen. Dem Primer, der Definition von Strukturen und der Deklaration von
Datentypen. Das Dokument „XML Schema Part 0: Primer“ beschreibt die formale Syntax
des XML Schemata anhand von kurzen Beispielen.
Das Dokument „XML Schema Part 1: Structures“ beschreibt die formale Syntax eines
XML Dokumentes und den strukturellen Aufbau eines XML Schema. Im Dokument
„XML Schema Part 2: Datatypes“ sind alle verwendbaren Datentypen festgelegt. Es muss
an dieser Stelle darauf hingewiesen werden, dass die Definition des XML Schema im
Seite 81
W3C noch nicht abgeschlossen ist, und deshalb nur bedingt einsetzbar ist. Jedoch
unterstützen bereits jetzt schon die neuesten XML-Parser und Browserversionen die
Validierung gegen XML-Schema. 74
5.4.5.
XSLT - Stylesheets
Mit XSL (Extensible Style Language) können XML-Dokumente z.B. in HTMLNotation umgewandelt werden. Eine XSLT (XSL-Transformation) kann aber nicht nur
XML in HTML umwandeln, sondern eine Transformation in verschiedene XMLspezifische Notationen durchführen. Mit dem Einsatz von XSLT können z.B.
verschiedene Protokoll Versionen miteinander verbunden werden. Dabei wird XSLT als
Art Sprachübersetzer oder Sprachumformer eingesetzt. Die Verknüpfung von z.B. SOAP
mit XML-RPC benötigt lediglich die Erstellung geeigneter XSLT-Dokumente. Wird
XSLT entsprechend zur Validierung von XML Dokumenten eingesetzt, kann im XSLT
Dokument die Validierungslogik umgesetzt werden um in einem DTD Dokument die
Gültigkeit der Element und Attribute überprüft werden. Die genaue Definition von XSLT
ist am W3C erhältlich. 75
5.4.6.
XML Verknüpfungstechnologien: XLink / XPointer / XPath
In XML ist es bisher nicht möglich, Elemente innerhalb eines Dokumentes zu
referenzieren oder aus XML andere Dokumente zu verknüpfen. Mit Hilfe von XLink
lassen sich Elemente und Dokumente multidirektional verbinden. Mit Hilfe einer
speziellen XML-Syntax werden Linkstrukturen erzeugt. Die Angabe des Linktyps
(simple, extended) unterscheidet den Aufrufmechanismus. Weiters wird zwischen
„Inline-Links“ und „Out-of-line-Links“ unterschieden. Inline-Links verweisen direkt auf
eine Ressource. Out-of-line-Links können auf Inhalte verweisen, die Ihrerseits die
Referenz zu einer externen Ressource herstellt. XPointer werden verwendet um
bestimmte Elemente eines XML-Dokumentes ohne Beschränkungen adressieren zu
können. Aus Dokumentensicht gesehen stellen XPointer Möglichkeiten zu internen
Verknüpfungen von Elementen zur Verfügung. Folgende Ressource-Typen können mit
XPointer miteinander verknüpft werden: text/xml, application/xml, text/xml-externalparsed-entity, application/xml-external-parsed-entity. Auch XPath ermöglicht eine
Adressierung von XML-Elementen innerhalb eines Dokumentes oder Teilen eines
Dokumentes. XPath wird implizit von XPointer und XSL Transformationen genutzt. Die
Notation von XPath ist ähnlich regulärer Ausdrücke und erlaubt einen direkten,
typenabhängigen Zugriff auf XML- Elemente. 76
5.4.7.
XHTML
XHTML ist eine XML konforme Spezifikation für den Standard HTML 4.0. XHTML
liegt derzeit in der Version 1.0 vor und wird vom W3C weiterentwickelt. XHTML ist
syntaktisch völlig kompatibel zu anderen standardisierten XML-Sprachen wie z.B.
74
XML Schema Part 0: Primer: http://www.w3.org/TR/xmlschema-0/; XML Schema Part 1: Structures:
http://www.w3.org/TR/xmlschema-1/; XML Schema Part 2: Datatypes: http://www.w3.org/TR/xmlschema-2/
75
XSL Transformations (XSLT): http://www.w3.org/TR/xslt
76
XML Linking Language (XLink): http://www.w3.org/TR/xlink/; XML Pointer Language (XPointer):
http://www.w3.org/TR/xptr/; XML Path Language (XPath): http://www.w3.org/TR/xpath
Seite 82
Kapitel 5 - Transport Protokolle
SVG77, MathML78, SMIL79, RDF80 oder WML81. Dadurch kann XHTML als „Dateninsel“
bezeichnet werden und einfach in anderen Sprachen eingebunden werden. Ebenso einfach
ist es in XHTML andere XML-basierte Sprach-Dateninseln zu integrieren. Ein weiterer
Vorteil von XHTML liegt in der Vereinheitlichung von Script Sprachen. Mit dem DOMModell wird ein einheitlicher Zugriff auf XML-basierte Datenbestände ermöglicht. Der
größte Vorteil von XHTML liegt jedoch in der Erweiterbarkeit der Sprache. So sind
einerseits alle Elemente von HTML 4.0 im Sprachumfang von XHTML enthalten,
andererseits ist es aufgrund der XML Basis der Sprache relativ einfach möglich neue
Elemente oder Sprachkonstrukte zu definieren. [XHTML 2002]
XHTML wird bereits von gängigen Browserversionen unterstützt. Z.B. ab MS IE5.x /
Netscape 6.x wird XHTML auch entsprechend wie HTML 4.0 gerendered. Während die
MS-Browser Versionen das Rendering von XHTML nur in Kombination mit Stylesheets
unterstützen (ansonsten wird der XML Strukturbaum angezeigt), interpretieren die
Netscape-Browser automatisch XHTML-Dateien. Für XHTML wurden auch neue MimeTypes (text/xml oder application/xml) und File-Extensions (.xhtml) eingefügt. Wird
ein Dokument mit der Endung .htm oder .html in einen Browser geladen, dann
versuchen die Browser die Datei mit einem HTML Parser zu rendern. Wird jedoch eine
Datei mit der Endung .xhtml in den Browser geladen, wird der XML-Parser versuchen
das Dokument zu verarbeiten. Die Konsequenz daraus ist, dass ein XHTML Dokument
syntaktisch korrekt sein muss, um auch korrekt angezeigt werden zu können. Die XMLParser zeigen bei Syntaxfehlern lediglich Fehlermeldungen an. Im Gegensatz dazu
versuchen HTML-Parser auch eine syntaktisch nicht korrekte Datei zu rendern. [XHTML
2002]
5.5.
BEEP
BEEP steht für Blocks Extensible Exchange Protocol und beschreibt ein generisches
Protokoll-Framework,
mit
dem
ein
asynchroner,
verbindungsorientierter
Nachrichtenaustausch umgesetzt werden kann. Kernfunktionalitäten von BEEP sind die
einfache Handhabung des Verbindungsmechanismus, der Authentifizierung, eine
einfache Nachrichtenübertragung, eine einfache Fehlerbehandlung und die
Widerverwendbarkeit. Elemente wie Authentifikation, Verschlüsselung oder
Datenkompression werden in einzelne Module verpackt und im Framework zur
Verfügung gestellt. In vielen anderen Übertragungsprotokollen, in denen z.B. TCP/IP als
Trägerschicht eingesetzt wird, müssen sämtliche erwähnten Funktionalitäten stets neu
implementiert werden. Einen guten Vergleich im Designunterschied von BEEP zu
Protokollen wie z.B. HTTP zeigt Abbildung 5.2. [RFC 3080]
77
SVG: Scalable Vector Graphics, Beschreibung 2-dimensionaler Vectorgrafiken; http://www.w3.org/Graphics/SVG
MathML: Mathematical Markup Language, Beschreibung technisch-wissenschaftlicher Inhalte anhand einer
mathematischen Formelsprache; http://www.w3.org/Math
79
SMIL: Synchronized Multimedia Integration Language, Beschreibung von selbst ablaufenden Präsentationen für
verschiedenste Medienelemente wie Text, Bilder, Video und Audio; http://www.w3.org/AudioVideo
80
RDF: Resource Description Framework, Beschreibung von Metadaten zu Dokumenten; http://www.w3.org/RDF
81
WML: Wireless Markup Language, Beschreibungssprache für Displayinhalte von mobilen Geräten, ähnlich wie HTTP
bei Browsern; http://www.wapforum.org
78
Seite 83
Abbildung 5.2: Designvergleich des BEEP Protokolls zu herkömmlichen Protokollen [RR 2002]
BEEP wurde von Marshall Rose im [RFC 3080] spezifiziert und im [RFC 3081] auf
TCP/IP als Trägerschicht abgebildet. Dabei wurden folgende Ziele verfolgt:
Verbindungsorientierung, Nachrichtenorientierung und Asynchronität. Durch die
Asynchronität des Frameworks gibt es keine ausgezeichneten Client oder Server. Ähnlich
zu P2P Protokollen gibt es bei BEEP einen Initiator, der eine Anfrage stellt, und einen
Listener, der die Anfrage beantwortet. Dabei wird die Kommunikation zwischen den
beiden Partnern nicht auf einfache Request-Response Statements beschränkt, sondern
eine asynchrone bilaterale Kommunikation zwischen zwei gleichberechtigten
Endpunkten erlaubt. Dabei wird für jede Kommunikation eine Verbindung aufgebaut,
über diese dann die Nachrichtenübermittlung kodiert erfolgt. Eine Trennung der
Nachrichten erfolgt aufgrund der Verwendung strukturierter Frames. Bei der
Nachrichtenübertragung wird neben der Fehlerbehandlung auch das Multiplexen der
Datenkanäle unterstützt. [RFC 3080] [RFC 3081]
In BEEP sind drei Übertragungsarten spezifiziert: message/replay, message/error
und message/answer. Die beiden ersten Übertragungsarten sind One-to-One
Austauschformate. Antworten werden vom Server jeweils mit einer Replay-Message oder
einer Error-Message beantwortet. Beim dritten Austauschformat One-to-Many wird
entweder Null oder eine bzw. mehrere Antworten zurückgeschickt. Dieses Format ist
z.B. für Suchanfragen oder Streaming von Daten verwendbar. Die Nachrichtentypen
werden mit dem MIME Format spezifiziert. Eine Nachricht wird in ein Frame gepackt,
das nicht notwendigerweise in weitere Frames unterteilt werden muss. Ein Frame besteht
aus dem Frame-Header, der Nutzlast und einem Trailer. Im Header werden verschiedene
Übertragungsparameter festgelegt. Dies sind der Mime-Type, der Kommunikationskanal
(nicht-negative Zahl im Intervall von [0…231-1]), eine Nachrichten Nummer (wichtig für
Replay), ein Fortsetzungsindikator (letztes Frame oder es folgen noch Frames), eine
Sequenznummer für die Identifizierung der Nutzlast (erstes Datenpaket in der Nutzlast)
und einer Größenangabe für die Anzahl an Datenpaketen im Frame. Die Nutzlast besteht
aus einem oder mehreren Datenpaketen, die in Oktetts zusammengefasst werden. Jedes
Oktett ist einer Sequenznummer zugeordnet, wobei das erste Oktett mit der kleinsten
Zahl kodiert ist und im Header des Frames speziell markiert wird. Der Trailer bildet wie
bereits erwähnt den Abschluss eines Frames und wird speziell mit END <CR> <LF>
kodiert. In Listing 5.1 ist ein einfaches Beispiel für eine Anfrage eines Client an einen
Server dargestellt. Dabei wird im Header der Kanal 0 und der Messagenumber 1
festgelegt. Die Nachricht besteht lediglich aus einem Frame. Das erste Datenpaket besitzt
die Sequenznummer 52 und die Nutzlast besteht aus 120 Datenpaketen (Oktetts) [RFC
3080]
Seite 84
Kapitel 5 - Transport Protokolle
MSG 0 1 . 52 120
Content-Type: application/beep+xml
<start number=’1’>
<profile uri=’http://iana.org/beep/SASL/OTP’ />
</start>
END
Listing 5.1: Beispiel einer BEEP Anfrage an einen Server [RFC 3080]
Um eine BEEP Session zu starten, muss ein Verbindungsaufbau über den Kanal 0
erfolgen. Der Kanal 0 ist zuständig für die Sitzungsverwaltung. Über diesen Kanal
werden neben dem Starten und Schließen einer Verbindung auch verschiedene Profile
ausgehandelt. Die Nachrichtenübertragung erfolgt im Klartext. Entsprechend müssen
auch für Authentifizierung und Sicherheit spezielle Profile ausgehandelt werden. Ein
Profil legt fest (Syntax und Semantik), welche Nachrichten über einen Kanal übertragen
werden dürfen. Die Angabe eines Profils wird mit einem URI definiert. BEEP unterstützt
z.B. das TLS82 und SASL83 Protokoll. Ist beim Verbindungsaufbau Transportsicherheit
oder Authentifizierung gefordert, werden alle bisher zum Prozess gehörenden Kanäle
geschlossen und der Verbindungsaufbau erneut unter Verwendung von TLS oder SASL
Protokollen durchgeführt. Weiters kann mit einem speziellen Profil, dem BEEPTUNNEL84, die Weiterleitung von Daten über eine Kette von Proxies erfolgen. Mit
diesem Profil ist unter der Verwendung von TLS oder SASL Profilen (um
Sicherheitsaspekte gewährleisten zu können) das Überbrücken von Firewalls möglich.
[RFC 3080]
Wie man bereits am Beispiel in Listing 5.1 erkennen kann, erfolgt die Notation einer
Message im XML-Format. Es gibt entsprechend auch eine DTD um die XML-Notation
validieren zu können. Es ist z.B. das Kanalmanagement mit einer speziellen DTD85
spezifiziert. Ebenso gibt es für das TLS-Profil eine DTD Spezifikation86, sowie eine DTD
für das SASL-Protokoll87. Aufgrund der XML Notation der Message und der Profile liegt
es auch nahe, BEEP als Trägerschicht für verschiedene XML-Protokolle zu verwenden.
So gibt es bereits Spezifikationen zur Verwendung von XML-RPC in BEEP [RFC 3529]
oder einer Spezifikation zur SOAP Anbindung zu BEEP [RFC 3288]. [RFC 3080]
5.6.
XML-RPC
XML-RPC ist ein einfaches, leichtgewichtiges Protokoll, das RPC-Requests und RPCResponses in ein XML-Dokument serialisiert. Als Transportschicht kann z.B. HTTP
verwendet werden, siehe Abbildung 5.3. Eine XML-RPC Message wird als HTTP-Post
Request vom Client zum XML-RPC Server geschickt. Für den Post Request muss ein
gültiger HTTP-Header angegeben werden, der User-Agent und Host, bzw. als Content
Type text/xml und eine gültige Content Länge beinhaltet. Der Serialisierungsvorgang
der RPC-Anfrage (HTTP -Body, XML) ist dabei relativ einfach. Für jeden
Aufrufparameter einer Methode gibt es ein entsprechendes XML-Element in dem der
82
TLS: Transport Layer Security; Dieses Protokoll ist im [RFC 2246] beschrieben und verschlüsselt Nachrichten mit z.B.
symmetrischen Verschlüsselungsverfahren wie DES (Data Encryption Standard) oder durch Secure Hash Funktionen
wie SHA (Secure Hash Algorithm) oder MD5 (Message Digest Version 5).
83
SASL: Simple Authentication and Security Layer; Dieses Protokoll ist im [RFC 2222] beschrieben und legt Methoden
zur sicheren Authentifizierung für verbindungsorientierte Protokolle fest. SASL basiert auf Kerberos Version 4.
84
BEEP-TUNNEL : http://iana.org/beep/tunnel
85
http://xml.resource.org/profiles/BEEP/beep.dtd
86
http://xml.resource.org/profiles/TLS/tls.dtd
87
http://xml.resource.org/profiles/sasl/sasl.dtd
Seite 85
Parametertyp und dessen Wert abgebildet werden. Als Parameter können z.B. Skalare,
numerische Werte, Strings, Datumsformate, List Strukturen oder andere komplexe
Datenstrukturen übergeben werden. Spezielle Tags (Elemente) kennzeichnen einen
Methodenaufruf. Als einleitender Tag kapselt <methodCall> den gesamten
Methodenaufruf. Der Methodenname wird innerhalb des Tags <methodName> angegeben.
Als kleines Beispiel veranschaulicht die XML-Notation eines XML-RPC Calls in Listing
5.2 die Einfachheit der Serialisierung. Die Spezifikation88 von XML-RPC ist nur wenige
Seiten lang und auf der Homepage von Userland erhältlich. [Userland]
Abbildung 5.3: XML-RPC Datenfluss [Userland]
<xml version="1.0"?>
<methodCall>
<methodName>examples.getStateName</methodName>
<params>
<param>
<value><i4>41</i4></value>
</param>
</params>
</methodCall>
Listing 5.2: Beispiel eines serialisierten XML-RPC Aufrufes [Userland]
5.7.
ebXML
ebXML wird als Electronic Business XML bezeichnet. Protokolle von ebXML
werden vorwiegend in der Industrie als Nachrichtenübermittler eingesetzt. XML dient
hier wiederum als Trägermedium um verschiedene Geschäftssysteme miteinander
verbinden zu können. Ziel von ebXML ist es, Dienste verschiedener Systeme nutzen zu
können. Als Daten werden vorwiegend Nachrichten in definierter Form übertragen.
Eigenschaften von ebXML sind eine zuverlässige Nachrichtenübertragung und
Fehlerbehandlung, sowie Nachrichten-Routing, Unterstützung von Sicherheitsaspekten,
bestimmen von Quality of Services und Plattform-unabhängigkeit. Die ebXML
Architektur sieht eine zentrale Registry vor, bei der notwendige Informationen über die
Geschäftspartner gespeichert sind. Diese Informationen sind über spezielle Dokumente
(Collaboration Protocol Profiles) abrufbar. Dienste und Geschäftsprozesse von
Unternehmen werden über spezielle Strukturen abgebildet. In diesen Strukturen sind
technische Informationen über Nachrichten- und Transportprotokolle, sowie
Netzwerkadressen der Dienste und allgemeine Kontaktinformationen eines
Unternehmens enthalten. Als eigentlicher Dienst (Geschäft) wird der Austausch von
Dokumenten angesehen. [Hofstetter et al. 2003]
Die Transaktion der Daten kann dabei zwischen zwei Geschäftspartner (Binary
88
http://www.xmlrpc.com/spec
Seite 86
Kapitel 5 - Transport Protokolle
Collaboration) oder mehreren Geschäftspartnern (Multipart Collaboration) erfolgen. Der
Dokumentenaustausch erfolgt nach einem gesicherten Handshake Prinzip und wird über
das Message Service (ebMS) abgewickelt. Das ebMS basiert auf SOAP mit Attachments
im MIME Format. Ein Vorteil des ebMS ist, dass grundlegende Eigenschaften bereits
standardisierter Mechanismen genutzt werden, um so offen für Erweiterungen zu sein.89
[Hofstetter et al. 2003]
5.8.
SOAP
Das Simple Object Access Protokoll (SOAP) definiert ein "leigthweight" Protokoll
zum vereinfachten Informationsaustausch zwischen verteilten Informationsstrukturen.
Der Datenaustausch erfolgt dabei strukturiert und typisiert zwischen Applikationen.
SOAP ist keine eigene Programmiersprache, sondern definiert einfache Ausdrücke die
mittels XML zum Datenaustausch dienen. Entsprechend ist es einfach als
Kommunikationspfad z.B. das HTTP Protokoll zu nützen. SOAP definiert ein Framework
in dem festgelegt wird, wie eine "Message" auszusehen hat, wie diese "Message" zu
handhaben ist und was optionale bzw. vorgeschriebene Parameter sind. Weiters legt
SOAP Regeln für die sichere Datenübertragung mittels serialisieren fest und gibt
Möglichkeiten vor Remote Procedure Calls zu verwenden. Vorrangige Ziele im Design
von SOAP sind die Einfachheit und die Erweiterbarkeit des Protokolls. [Scribner et al.
2001]
SOAP Nachrichten, Mitteilungen und Funktionsaufrufe sind wohlgeformte,
serialisierte, XML-kodierte Datenpakete, die unidirektional vom Sender zum Empfänger
gerichtet sind. SOAP ist ein Netzwerkprotokoll und als solches in einer Multilayer
Architektur einsetzbar. SOAP ist laut seiner Spezifikation auch nicht an eine bestimmte
Übertragungstechnologie gebunden. Als Transportschicht kann z.B. HTTP oder BEEP
eingesetzt werden. SOAP ist hierbei als Netzwerkprotokoll anzusehen und nicht als
Architektur für verteilte Objekte. Der Vorteil der Bindung an HTTP liegt in der Tatsache,
dass auch auf Objekte und Informationen hinter Firewalls zugegriffen werden kann. Der
Nachteil an diese Anbindung ist, dass mit SOAP über HTTP keine bidirektionale
Kommunikation (Callback) möglich ist. [Scribner et al. 2001]
Eine SOAP Anwendung identifiziert empfangene Nachrichten anhand des SOAP
"Headers", überprüft alle als "zwingend" deklarierten Attribute. Im Fehler Fall, wird ein
SOAP Fehler generiert und die Nachricht abgelehnt. Die als optional deklarierten
Attribute werden an dieser Stelle der Identifikation ignoriert. Im nächsten
Identifikationsschritt wird überprüft, ob die aktuelle Applikation die "letzte Instanz"
(höchste Instanz) des Zieles für die entsprechende Nachricht ist. Ist dies nicht der Fall,
werden die vorher beschriebenen Identifikationsschritte (Attribute) aus der Nachricht
entfernt und die Nachricht erst dann an die nächste Instanz weitergeleitet. SOAP
serialisiert Daten und keine Objektreferenzen. Dies kann unter Umständen zu
Inkonsistenzen des gleichen Objekts an verschiedenen Orten führen, da es keine
geeigneten Synchronisationsmechanismen gibt. [Scribner et al. 2001]
Die so genannte SOAP „Nutzlast“ ist in einem eigenen SOAP Bereich eingebettet.
Dieser SOAP Bereich ist selbst wiederum Teil der Nutzlast des jeweiligen
Transportprotokolles. Der Nutzlastbereich von SOAP besteht aus dem optionalen SOAPHeader und dem SOAP-Rumpf, der die serialisierten Daten und Funktionsaufrufe enthält.
Im Header gibt es mehrere Elemente die Metainformationen zu einem Funktionsaufruf
89
Für weiterführende Informationen zu ebXML sei auf folgende Quelle verwiesen: http://www.ebxml.org
Seite 87
speichern. Die Daten werden als Kombination von XML-Elementen und Attributen
festgelegt. Wird SOAP auf das statuslose HTTP-Protokoll aufgesetzt, ist die
Grundvoraussetzung einer guten Skalierbarkeit bereits vorgegeben. Natürlich wird durch
die Einführung der XML-Notation des Funktionsaufrufes ein Overhead erzeugt, Keys
müssen geparst werden, Daten entsprechend extrahiert werden, jedoch hält man sich
dabei an einen erprobten und sehr weit verbreiteten Standard. Dieser Overhead liegt
jedoch allen Textbasierten Übertragungsprotokollen zugrunde. Dafür erhält man den
Vorteil einer breiten Unterstützung und großen Interoperabilität. Entsprechend fallen
auch bei Anbindungen an Fremdsysteme geringere Aufwände bei der Konvertierung der
Daten an. Das SOAP Protokoll bietet keine Möglichkeit zur Statusverwaltung von
Objekten. Weiters ist in SOAP nicht festgelegt wie die Speicherbereinigung von
verteilten Systemen (Objekten) abläuft. SOAP spezifiziert Übertragungsprotokolle und
kümmert sich nicht um objektorientierte Architekturkomponenten. D.h. Garbage
Detection und Garbage Collection muss vom Objekt bzw. von der Anwendung die das
SOAP Protokoll implementiert selbst durchgeführt werden. SOAP sieht in seiner
Spezifikation keine eigenen Sicherheitsmechanismen vor. Vielmehr verlässt sich SOAP
dabei auf seine Trägerschicht. Bei HTTP etwa über die Verbindung mit HTTPS, SSL
oder sicheren Sockets. Damit kein ungehinderter Datenfluss durch Firewalls stattfinden
kann, empfiehlt SOAP im Header das Attribut SOAPAction festzulegen. Anhand dieses
Attributes können Firewalls SOAP-Methodenaufrufe filtern oder zur Gänze ablehnen.
[Scribner et al. 2001]
Vorteile von SOAP sind nicht zuletzt deren Unabhängigkeit, Flexibilität und
Erweiterbarkeit, sondern auch eine breite Interoperabilität durch den Einsatz
standardisierter
Definitionsmechanismen.
SOAP
unterstützt
z.B.
die
Schnittstellenvalidierung durch XML-Schemata (siehe Abschnitt 5.4.4). Schemata sind
als XML-Beschreibungssprachen anzusehen. Mit Schemata können auf neutrale,
programmiersprachenunabhängige Weise Schnittstellen, Typen und diverse Funktionen
definiert werden. Als Komponentenbeschreibungssprache (Component Description
Language) unterstützen Schemata sowohl primitive als auch benutzerdefinierte
Datentypen. Um komplexere Informationsstrukturen abbilden zu können, wird der
Einsatz von Aliase, Schnittstellenvererbung, Arrays und Strukturdefinitionen ermöglicht.
SOAP schreibt nicht zwingend vor Schemata einzusetzen, jedoch erleichtert es vor allem
die Validierung der Daten. Von Prinzip aus könnte man auch Dokumenttypdefinitionen
(DTDs, siehe Abschnitt 5.4.3) aus XML verwenden. Jedoch erlauben diese keine
Konstrukte, keine Vererbung oder die Definition komplexerer Datentypen. Mittels XSLT
(Extensible Style Language Transformation, siehe Abschnitt 5.4.5) können XMLFormate einfach in ein entsprechendes Zielformat umgewandelt werden. Mit XSLT kann
HTML-Code für Webinhalte erzeugt werden, oder als „Übersetzer“ zwischen
verschiedenen SOAP Protokollversionen (z.B. SOAP v0.9, SOAP v1.2) oder
Protokolltypen (z.B. XML-RPC, XMOP, ebXML) eingesetzt werden. [Scribner et al.
2001]
Um einen Datenaustausch zwischen zwei Systemen ermöglichen zu können, müssen
zu übertragende Argumente normalisiert werden. Zeiger auf Daten bzw. Objekte müssen
dereferenziert und in eine Normalform gebracht werden. Dieser Prozess wird allgemein
als Marshalling oder Serialisierung bezeichnet. Nachdem die normalisierten Daten zum
Zielsystem übertragen wurden, werden die Argumente mittels Deserialisieren in den
neuen Adressbereich übernommen. SOAP serialisiert Daten, Objekte und Funktionen
mittels XML-Statements. Serialisieren kann man jedoch nur Werte, nicht aber
Referenzen. In Abbildung 5.4 ist beispielhaft ein Objektmethodenaufruf in SOAP
Seite 88
Kapitel 5 - Transport
ransport Protokolle
grafisch dargestellt. Hier wird beispielhaft ein Druckaufruf an ein externes System
weitergeleitet. Das Lokale System serialisiert Druckdaten in ein XML-Dokument und
übergibt den normierten Datenstrom an das HTTP-Protokoll. Die HTTP-Pakete werden
mittels TCP/IP über das Internet übertragen und vom Zielsystem in der umgekehrten
Reihenfolge interpretiert. Die SOAP Implementierung löst die XML-Nutzlast aus dem
HTTP-Datenstrom heraus und führt die Deserialisierung durch. [Scribner et al. 2001]
Prozessadressraum des Aufrufers
(lokales System)
Abbildung 5.4: Objektmethodenaufruf in SOAP über HTTP [Scribner et al. 2001]
Das verwenden von Namensräumen in SOAP erweist sich als vorteilhaft, wenn man
gleichzeitig Zugriff auf Objektdaten und Schnittstellenmethoden benötigt. Ein
Namensraum wird über bestimmte Bezeichner abgebildet. Diese Bezeichnet, auch als
URI (Uniform Resource Identifier) genannt, verweisen auf eine bestimmte Entität oder
Ressource im Web. Eine URI ist global eindeutig und wird in unterschiedlichen
Ausprägungen wie z.B. URN (Uniform Resource Name) oder URL (Uniform Resource
Location) verwendet. Während über eine URL bestimmte ortsabhängige Ressourcen im
WWW angesprochen werden können, verweisen URN auf Ressourcen und Objekte
unabhängig vom Ort. Elemente eines XML-Namensraumes werden über URIs
angesprochen. Die Deklaration eines Namenraumes in XML erweitert Element und
Attributnamen zu voll qualifizierten Bezeichnern. Voll qualifizierte Bezeichner vermeidet
Namenskonflikte auch ermöglicht die Wiederverwendung von Bezeichnergruppen. Ein
Namensraum wird deklariert, indem ein Namensraum-Präfix mit einem URI verknüpft
wird. Über dieses Präfix werden nun Attribute und Elemente mit dem Namensraum
verbunden. [Scribner et al. 2001]
Eine SOAP Nachricht besteht aus drei spezifischen Bereichen. Dem Umschlag
(envelope), einer optionalen Nachrichtenkopf (header) und dem Nachrichteninhalt
(body). Das Element envelope stellt das Wurzelelement einer SOAP Nachricht dar und
kapselt die XML-Daten in serialisierter Form. Der optionale header wird verwendet, um
Seite 89
zusätzliche Metadaten (Transaktionsdaten, Authentisierungsdaten, Sicherheitsdaten, etc.)
bezüglich der Nachrichtenübertragung angeben zu können. Wird ein header angegeben,
muss dieser als erstes in der SOAP Nachricht deklariert werden. Zusätzlich ist die
Einführung eines separaten Namensraums für den header vorgeschrieben. Der SOAP
body enthält die serialisierten Methodenaufrufe, Ergebnisse oder transportiert
Fehlerinformationen. Für jeden Methodenaufruf wird ist ein eigenes Element vorgesehen.
Methodenparameter und Rückgabewerte sind Unterelemente der Methodennamen. Ein
SOAP Fehler ist eine spezielle Nachricht, die einen Fehlercode und eine
Fehlerbeschreibung enthält. In SOAP wird zwischen einfachen und zusammengesetzten
Datentypen unterschieden. Einfache Datentypen sind Integer bzw. Fließkommawerte,
Strings, Boolean etc. Einfache Datentypen werden zum einen direkt aus der XML
Definition übernommen, zum anderen sind in SOAP selbst einfache Datentypen definiert.
Zusammengesetzte Datentypen (Akzessoren) werden als Verbunde (Structs) oder Arrays
abgebildet. Während ein Array eine Liste gleicher Datentypen speichert, kann mit einem
Verbund eine Sammlung unterschiedlichster Datentypen aufgebaut werden. Akzessoren
sprechen ihre Elemente mit Referenzen an. Diese müssen beim Serialisieren erzeugt
werden. Mit der XLink bzw. XPath Technologie kann Referenzierung abgebildet werden.
[Scribner et al. 2001].
5.9.
Jabber
Jabber stellt eine Sammlung offener XML basierter Protokolle im Bereich Instant
Messaging zur Verfügung. Mit diesen Protokollen werden mittels XML-Streaming RealTime
Messaging,
Notifizierung,
Datei-Transfer,
Chat-Option,
Authentifizierungsverfahren und Invisibility-/Unavailibility-Modes ermöglicht. Der
Sicherheitsaspekt wird dabei auch nicht außer Acht gelassen. Die Kommunikation kann
über verschlüsselte Verbindungen laufen. Die Transportprotokolle werden von der Jabber
Software Foundation gewartet und weiterentwickelt. Mehr als 1500 Jabber Mitglieder
arbeiten an der Weiterentwicklung der Jabber Communication Plattform und anderen
laufenden Jabber Projekten. Projekte wie Whiteboarding, Anbindung an andere
Nachrichtendienste wie SMS und die Erweiterung der Protokolle zur Unterstützung
mobiler Geräte sind Pläne für die Zukunft. Über verschiedene Plugins (Gateways) wird
das Jabber Protokoll erweitet, um auch mit Benutzer aus anderen Instant Messaging (IM)
Anwendungen wie ICQ-, AIM-, MSN, Yahoo kommunizieren zu können. [Saint-Andre
2002]
Die Architektur entspricht einer Mischung aus Client-Server und P2P Kombination.
Die Benutzer verfügen über einen Client, mit dem sie sich an einem (kein bestimmter)
Jabber Server anmelden. Die vielen verteilten Server tauschen die Nachrichten mit einem
"XML-Stream" untereinander aus und leiten diese zum Empfänger weiter. Die Clients
können aber auch direkt mit anderen Jabber Clients kommunizieren. Der
Verbindungsaufbau vom Jabber-Client zu einem IM-Dienst erfolgt immer nach
folgendem Prinzip: Der Jabber-Client meldet sich bei einem Jabber-Server an, dieser
leitet dann die Nachricht über ein entsprechendes Gateway an den IM-Dienst weiter. Mit
Stand Dezember 2001 gab es laut Jabber mehr als 50.000 Jabber-Server und mehr als
200.000 Jabber Benutzer. Im engeren Sinne ist Jabber also nichts anderes als ein XMLRouter. Dafür sprechen auch die Server Routing Protokolle bzw. Dienste die Jabber
bietet. Folgende Dienste werden von der Jabber Communications Plattform angeboten
[Jabber 2001a]:
• XML Routing: Im Gegensatz zum herkömmlichen Datentransfer im Internet laut
Seite 90
Kapitel 5 - Transport Protokolle
Abbildung 5.5 erfolgt die Nachrichtenweiterleitung in Jabber mittels XML-Streaming
(Abbildung 5.6) auf bidirektionale Weise. Ähnlich zum Internet Emaildienst über
SMTP erfolgt die Zustellung über das Netzwerk mittels DNS in optimierter Weise,
damit eine möglichst gute Auslastung des Systems auch Übertragungen in Real Time
zulässt.
Abbildung 5.5: Herkömmlicher Datentransfer im Internet, Seriell, fest verbunden [Jabber 2001a]
Abbildung 5.6: Jabber Datentransfer: XML-Streaming, asynchron, lose gekoppelt [Jabber 2001a]
• Instant Messaging Dienst: Dienste wie Chat, Text Conferencing oder Roster
(personalisierte Mitgliederlisten), werden unter Einhaltung verschiedenster
Sicherheitstechnischen Aspekten ermöglicht. Dazu gehören Client-Server
Verbindungen mittels SSL, die Unterstützung von Sicherheits-Profilen (Privacy online
Präsenz nur für ausgewählte Benutzer, Nachrichteneingang sperren, etc.) und
Verbindungen über spezielle Ports mittels Outbound Requests (Firewall siehe
Abbildung 5.7). Die Jabber-Architektur bietet Multiple Logins, User Search, Offline
Store, Offline Request und History.
Abbildung 5.7: Jabber in Zusammenhang mit Firewall geschütztem Zugriff [Jabber 2001a]
Verschiedene
Skaliermöglichkeiten
bieten
genügend
Ansatzpunkte,
um
die
Seite 91
Performance des Gesamtsystems steuern zu können. In der folgenden Aufzählung werden
die Möglichkeiten kurz beschrieben [Jabber 2001a]:
• Load Balancing: Aufteilen von Lasten und Isolation von Systemfehlern.
• Parallel Processing: Unterstützung von multiple Prozessor Architekturen, Parallel
Processing und Processor Multi-threading.
• Connection Multiplexing: Ein Client Connection Manager leitet eingehende
Verbindungen mittels multiplexing unter Verwendung von TCP Sockets zu einer
Ausgangsverbindung weiter.
• Optimized Message Routing: Verwendung von optimierten Algorithmen bei
Interpretation und Weiterleitung der XML Nachrichten.
• Throughput Performance: Ein kommerzieller Jabber Server wurde in einem
Testszenario von mehr als 200.000 gleichzeitigen Benutzern, und 8.000 Nachrichten
in der Sekunde getestet.
Datenschutz und Sicherheitsmechanismen werden durch sessionbasierte Protokolle
zwischen Client und Server, in Verbindung mit SSL-Encryption der Datenübertragungen,
realisiert. Passwörter werden mittels SHA1 Encryption von den Jabber Servern
gespeichert. Weiters schützt ein „Subscription Control“ Mechanismus vor Zugriff auf
private Informationen, wie Onlinestatus etc. Mit einem „Server-to-Server Dial Back“
(eine Art Handshake) wird versucht eine Nachricht über eine gültige Jabber Serverstrecke
zu senden. Erst wenn eine gültige (sichere, nicht notwendigerweise über SSL) Strecke
gefunden wurde, wird die Verbindung tatsächlich aufgebaut und die Nachricht
übertragen. Die Suche nach Benutzer wird über versteckte Benutzer IP Adressen
bewerkstelligt. [Jabber 2001b]
Die Jabber Communication Plattform (JCP90) besteht aus vielen einzelnen
Komponenten, die über Router bzw. Gateways miteinander verbunden werden. Es wird
unterschieden zwischen internen Komponenten oder externen Komponenten, die über
XMPP (Extensible Messaging and Presence Protocol) angebunden werden. In Abbildung
5.8 wird die vereinfachte Architektur der Jabber Communication Plattform dargestellt.
Abbildung 5.8: Vereinfachte Architektur91 der Jabber Comm. Plattform [Saint-Andre 2003]
XMPP ist ein offenes erweiterbares auf XML-basierendes Protokoll. Es ist das
Kommunikationsprotokoll im Jabber Framework um XML-Datenströme in nahezu
Echtzeit zu transportieren. Standardisierungsbemühungen laufen mit dem IETF um die
Technologie weiter vorantreiben zu können. Die Spezifikation von XMPP geht aus den
Requirements des [RFC 2779] hervor. Ein XML-Datenstrom wird als Container
bezeichnet der XML Elemente über ein Netzwerk transferiert. Der Datenstrom selbst ist
durch spezifische XML Elemente (<stream> </stream>) eingeschlossen. In einem
90
JCP:
http://www.jabber.org/ietf/draft-miller-jabber-00.html;
http://www.jabber.com/pdf/Jabber_Messaging_Web_Services.pdf
91
Abkürzungen: C1-C3 XMPP Client; S1, S2 XMPP Server, G1 Gateway (Übersetzer zwischen XMPP und anderen
Protokollen); FN1 fremdes IM Netzwerk
Seite 92
Kapitel 5 - Transport Protokolle
Datenstrom können beliebig viele Datenpakete übertragen werden. Der XML Datenstrom
ist unidirektional. Wird vom Client ein „initial stream“ gestartet, antwortet der Server mit
einem „response stream“. Beim Aufbau der Datenströme werden zusätzlich
Übertragungsparameter ausgehandelt. Dazu gehören Sicherheitsanforderungen (TLS) und
Authentifizierungsmechanismen (SASL). Datenpakete innerhalb eines Datenstromes
werden „XML stanza“ bezeichnet. XML stanza sind gekennzeichnet durch ihre Position
innerhalb des Datenstromes und durch ihre Bezeichner. XML stanza müssen direkt in der
ersten Ebene eines Streams definiert werden. Als Bezeichner sind lediglich <presence>,
<message> und <iq> zugelassen. In einem XML stanza ist die Datenstruktur bzw. eine
Message mit Hilfe von Kinderelementen, Attributen und Daten (CDATA-Sektion)
abgebildet. Zur nähren Erklärung weiterer Elemente wie z.B. Verhandlungsparameter
oder Errorhandling sei auf die Literatur verwiesen92. [Saint-Andre 2003]
5.10. JXTA Protokolle
JXTA stellt eine Plattform-unabhängige Technologie zum Aufbau von P2P
Netzwerken dar. JXTA ist Programmiersprachen- und Geräte-unabhängig (obwohl es
zurzeit nur eine JAVA Implementierung des JXTA Core gibt). Die JXTA Architektur
trennt den JXTA-Core (Auffinden von Peers, Routing, Kommunikationsmanagement,
etc.) von den JXTA-Diensten (Suchen, Datenaustausch, Indizieren, Authentifikation, etc.)
und den JXTA-Applikationen (IM, Tauschbörsen, Filesharing, etc.). JXTA sieht kein API
vor mit der die Funktionalität angesprochen werden kann, stattdessen propagiert JXTA
eine Sammlung von Protokollen, mit deren Hilfe P2P Netzwerke aufgebaut werden
können. Die Protokolle sind nachrichtenorientiert und basieren auf XML. Im Design der
Protokolle wurde berücksichtigt, dass die Nachrichten sehr effizient mit möglichst wenig
Overhead auch in unzuverlässigen und veränderbaren Netzwerken transportieren sollen.
JXTA Protokolle sind grundsätzlich offen für verschiedene Transportprotokolle, setzen
aber in der gegenwärtigen Implementierung auf TCP/IP auf. Die Protokolle werden
einerseits für Kommunikation und Resourcen-Sharing zwischen Applikationen und
Services genutzt, andererseits ermöglicht es den Peers sich selbst zu organisieren ohne
die Netzwerkstruktur zu kennen. Insgesamt sind im JXTA Core sechs voneinander
unabhängige Protokolle definiert: Peer Discovery Protocol (PDP), Peer Information
Protocol (PIP), Pipe Binding Protocol (PBP), Endpoint Routing Protocol (ERP) und
Rendezvous Protocol (RVP). Ein JXTA Peer muss zumindest zwei dieser Protokolle
(PRP und ERP) unterstützen um als JXTA Peer adressierbar zu sein. In Abbildung 5.9 ist
die Protokollstruktur von JXTA abgebildet. [Duigou 2003]
92
Extensible Messaging and Presence Protocol (XMPP): Instant Messaging and Presence: http://www.ietf.org/internetdrafts/draft-ietf-xmpp-im-19.txt
Extensible Messaging and Presence Protocol (XMPP): Core: http://www.ietf.org/internet-drafts/draft-ietf-xmpp-core20.txt
End-to-End Object Encryption in the Extensible Messaging and Presence Protocol (XMPP):
http://www.ietf.org/internet-drafts/draft-ietf-xmpp-e2e-06.txt
Mapping the Extensible Messaging and Presence Protocol (XMPP) to Common Presence and Instant Messaging
(CPIM):
http://www.ietf.org/internet-drafts/draft-ietf-xmpp-cpim-03.txt
Seite 93
Peer Information
Peer Information
Peer Rendezvous
Peer Rendezvous
Pipe Binding
Pipe Binding
Peer Discovery
Peer
Peer Discovery
Peer
Peer Resolver
Peer Resolver
Endpoint Routing
Endpoint Routing
Endpoint
Endpoint
Transport (TCP/IP)
Abbildung 5.9: JXTA Core Protokollstruktur [Duigou 2003]
• Peer Resolver Protocol (PRP): Das PRP stellt ein Query/Response Protokoll dar.
Queries können an alle Peer Groups oder an spezielle Peer Groups über einen
Mulitcast gerichtet werden. Auf eine Query antworten jedoch nur Peers, die über eine
entsprechende Behandlungsprozedur verfügen. Deshalb kann ein Peer auch mehrere
Antworten auf eine Query erhalten. Eine Response-Massage ist stets nur an den Peer
gerichtet, der eine Query ausgesandt hat. Im Massage-Body einer Query ist eine
Unique-Id enthalten, über die jeder Peer eindeutig adressierbar ist. Zum Verbreiten
einer Query wird das Rendezvous-Service angesprochen. Zum Einsatz kommt das
Protokoll bei Filesharing Diensten oder erweiterten Suchdiensten.
• Peer Discovery Protocol (PDP): PDP beschreibt einen Mechanismus mit dem Peers
eigene Dienste und Ressourcen veröffentlichen sowie Dienste und Ressourcen anderer
Peers (Peer Groups, Services, Pipes und anderen Peers) in Anspruch nehmen können.
Jede Peer-Ressource wird mit einem „Advertisement“ (Metadaten in XML-Notation)
beschrieben. Zum Aufsuchen bzw. Veröffentlichen der Ressourcen wird das PRP
verwendet.
• Peer Information Protocol (PIP): Mit dem PIP ist eine Statusabfrage von JXTA Peers
möglich. Peers müssen auf einen PIP Request nicht antworten. Zu den
Statusinformationen gehören z.B. Traffic Load (Auslastung, Anzahl eingehender und
ausgehender Requests, sowie Zeit des letzten eingehenden und ausgehenden Requests)
oder Uptime (wie lange ein Peer aktiv ist).
• Pipe Binding Protocol (PBP): Pipes sind abstrakte, eindeutige (unique id)
unidirektionale Kommunikationskanäle die wiederum durch Advertisements
beschrieben werden. Mit dem PIP ist es möglich Peer-Pipes miteinander zu verbinden.
Aus Sicht der Endpunkte wird ein sendender Peer als Outputpipe und ein
empfangender Peer als Inputpipe bezeichnet. Mit der Hilfe des Discovery Service
kann das Binding zur Laufzeit durchgeführt werden. Die direkte Verbindung zweier
Peers wird als „Point-to-Point-Pipe“ bezeichnet. Ist eine Outputpipe mit mehreren
Inputpipes verbunden, spricht man von einer „Propageted-Pipe“ oder „Multicast-Pipe.
• Endpoint Routing Protocol (ERP): Das ERP wird eingesetzt um Routing
Informationen (Folge von Router-Endpunkten) zum Nachrichtenversand zu erstellen.
Der Nachrichtenversand zwischen Peers erfolgt unabhängig zu ihren physikalischen
Standorten. Um eine Nachricht an ein Ziel Peer zu versenden, versucht ein Peer lokal
gespeicherte Routing Informationen auszuwerten. Sind keine Routing Daten
gespeichert, oder die Daten veraltet, hilft das ERP die Nachricht über alternative Wege
an das Ziel zu bringen. Mit dem ERP können z.B. Peers unterschiedlicher
Netzwerkprotokolle verbunden werden, oder Nachrichten über Firewalls geschleust
Seite 94
Kapitel 5 - Transport Protokolle
werden. Jeder Router markiert das Erreichen seines Endpunktes in der Nachricht. Mit
Hilfe dieser Informationen können lokale Routing Informationen upgedatet werden
und Irrläufe von Nachrichten vermieden werden.
• Rendezvous Protocol (RVP):Das RVP kann einerseits zur Weiterleitung von
Nachrichten an Rendezvous-Peer eingesetzt werden und andererseits zur Kontrolle der
Nachrichtenverbreitung dienen, indem es das Weiterleiten von bereits gesendeten
Nachrichten verhindert. Außerdem werden Nachrichten verworfen, deren „Time-tolife“ abgelaufen ist. Das RVP wird unter anderem vom PRP und PBP genutzt.
5.11. Schlussbemerkung
In diesem Kapitel wurde eine Auswahl von sieben Transport-, Nachrichten- und
Netzwerkprotokollen analysiert. Die Protokollauswahl reicht dabei vom quasi
„historischen“ Z39.50 Protokoll, bis hin zu modernen P2P Protokoll Frameworks wie
Jabber oder JXTA. Die Analyse zeigt deutlich die Tendenz zur Unterstützung von XMLbasierten Technologien. Diese sind großteils standardisiert, einfach aufgebaut, leicht
erweiterbar, „human-readable“, „machine-readable“ und sehr weit verbreitet. Es
existieren viele Werkzeuge zur Erstellung und Validierung von XML-Dokumenten. Als
Parser kommen DOM-Parser oder SAX-Parser zum Einsatz. Im Zuge der
Datenübertragung werden jedoch meist nur SAX-Parser eingesetzt. Diese arbeiten
effizient und sind nicht starr an ein bestimmtes Schema gebunden. Die gängigsten
Möglichkeiten zur Validierung sind DTD, XML-Schema und XSLT. XML bildet Daten
als klar strukturierte Elemente ab. Beziehungen zwischen Elementen und Dokumenten
können mit XLink, XPath und XPointer hergestellt werden.
Das Protokoll Z39.50 gilt als Standard im Bereich Information Retrieval. Es basiert
auf einer Client/Server Architektur mit verschiedenen Request/Response Messages. Das
Z39.50 Protokoll wird einerseits zur Suche verwendet andererseits bietet Z39.50 auch
Kontrollfunktionen und Datenbankfunktionen an.
BEEP stellt ein Protokoll Framework dar. Es ist als Modulkonzept ausgelegt, verfügt
über generische und einfache Protokolle, die eine Widerverwendbarkeit der Module
ermöglichen. Die BEEP Architektur (P2P) erlaubt das multiplexen von Datenkanälen um
mehrere gleichberechtigte Endpunkte miteinander verbinden zu können. Die
Kommunikation erfolgt asynchron und bilateral. Nachrichten werden im MIME Format
übertragen und halten sich so an einen bewährten Standard. Durch die Unterstützung von
Sicherheitsprofilen, die gesicherte Datenübertragung und Authentifikation erlauben, ist
auch ein Proxy-Tunneling oder das Überbrücken von Firewalls möglich. BEEP kann
HTTP als missbräuchliche Verwendung in Anwendungsprotokollen ersetzen.
XML-RPC gilt als leichtgewichtiges Protokoll, dass auf eine Client/Server Architektur
mit einfachen Request/Response Messages basiert. Die Methoden werden in XMLNotation serialisiert und die Methodenargumente bzw. Rückgabewerte anhand der
standardisierten XML-Typenspezifikation übergeben. Die XML-RPC Syntax ist zwar
flexibel und einfach, jedoch könnte XML-RPC auch durch SOAP-Statements umgesetzt
werden. Einfache XML-Datentypen können zu Strukturen oder komplexen Datentypen
zusammengefasst werden.
Das Ziel von ebXML ist EDI im Bereich B2B zu modernisieren bzw. mit dem Web zu
verknüpfen. Ähnlich zur Web Service Architektur bietet ebXML eine eigene zentrale
Registry an, um Geschäftspartner bzw. deren Dienste zielorientiert veröffentlichen zu
können. Zum Austausch von Geschäftsdokumenten werden standardisierte Protokolle
Seite 95
eingesetzt; SOAP in Verbindung mit MIME typisierten Attachments. Mit ebXML ist der
Aufbau von Mehrfachverbindungen möglich (ein Provider - mehrere Consumer;
Multipart Collaboration).
SOAP gilt als leichtgewichtiges Protokoll, das vor allem zum Einfachen
Informationsaustausch eingesetzt wird. SOAP gilt als Netzwerkprotokoll und ist keine
Architektur für verteilte Objekte. Mit SOAP ist keine bidirektionale Kommunikation
möglich. SOAP bietet selbst keine Sicherheitsmechanismen bzw. Möglichkeiten zur
Authentifizierung an und stellt keine Konzepte zur Speicherverwaltung zur Verfügung.
SOAP stützt sich dabei einerseits auf die Transporteinheit (HTTP-SSL, BEEP) oder
verlagert die Komplexität hin zur Applikation (Speichermanagement). Dafür gibt es eine
Reihe
von
Validierungsmöglichkeiten
der
XML-Daten
und
einfache
Transformationsmöglichkeiten (XSLT) der Daten um verschieden Zielformate zu
unterstützen. Das Datenmodell setzt das standardisierte XML-Typenschema ein.
Jabber bietet eine Sammlung offener Protokolle, die vorwiegend im Bereich Instant
Messaging eingesetzt werden. Die Jabber Protokolle sind nicht standardisiert, werden
aber laufend von der Jabber-Foundation weiterentwickelt. Jabber unterstützt Plugins um
Fremdsysteme einfach ankoppeln oder miteinander verbinden zu können. Die JabberArchitektur ist eine Mischung aus Client/Server und P2P. Daten werden mittels XMLStreaming übertragen. Jabber bietet Sicherheitskonzepte für Transport und
Authentifikation an und kann für XML-Message Routing eingesetzt werden. Weiters sind
Loadbalancing, Parallel Processing sowie das Multiplexen von Datenkanälen zur
Steigerung der Performance möglich.
In JXTA sind sechs grundlegende Protokolle definiert. Die JXTA P2P Architektur
trennt Applikationen von Diensten und dem JXTA Core. Mit JXTA können
selbstorganisierende P2P Netzwerke aufgebaut werden. Die sechs Core Protokolle
verwenden ein minimales XML-Subset und einen limitierten Namespace. Der spezielle
leichtgewichtige DOM-Parser validiert keine XML-Daten. Aus diesem Grund kann
JXTA auch in unzuverlässigen und veränderbaren Netzwerken noch hohe Bandbreiten
erreichen93. Ein Peer muss nicht alle Core Protokolle unterstützen. Entsprechend sind
auch die Aufgaben eines Peers unterschiedlich. Ein Peer kann als Provider, Consumer,
Router, Resolver, Hub oder Registry eingesetzt werden.
Um einen besseren Überblick über die vorgestellten Protokolle und Technologien zu
bekommen, werden die jeweiligen charakteristischen Eigenschaften der einzelnen
Protokolle einander gegenübergestellt. Dieser Vergleich soll Ausgangspunkt für die
weiteren Analysen sein bzw. Vorschläge zur Verbesserung der Kommunikationsschicht
des xFIND Suchsystems liefern. In Tabelle 5.1 sind die wichtigsten Eigenschaften der
untersuchten Protokolle zusammengefasst dargestellt.
93
Diese Aussagen stützen sich auf Angaben von: http://www.jxta.org
Seite 96
Kapitel 5 - Transport Protokolle
94
Eigenschaften
Erweiterbarkeit
Datentransport
Widerverwendbar
Errorhandling
standardisiert
Sicherheit
Authentifikation
Z 39.50
BEEP
NO, VO, ZB
schwer
AS, NO, VO
einfach (XML)
MIME
ja
ja
ja
nein
ja
ja
Zugriffskontrolle
ja
Besonderheiten
große
Akzeptanz
Einsatzgebiete
Query
Protokoll,
Information
Retrieval
XML-RPC
ebXML
SOAP
VO, ZB
NO, ZB
NO
einfach (XML) einfach (XML) einfach (XML)
XML
MIME + XML
XML
ja
ja
ja
ja
nein
ja/nein
ja
Jabber
JXTA
AS, BD, NO
einfach (XML)
S/MIME
AS, NO
einfach (XML)
MIME
ja
ja
ja
eingereicht
eingereicht
TLS, PTLS
nein
ja
nein
TLS, SSL
Groups
SASL
nein
ja
nein
SHA1, SASL
LDAP, JAAS
P2P, Routing,
Kanalmultiplexing,
Framework,
P2P, Load
Überbrückung
Sicherheitsprofile,
Routing,
einfach, weit Balancing, Parallel von Firewalls,
Überbrückung von
unterstützt
verbreitet
Processing,
eigenständige
Firewalls
UDDI
Kanalmultiplexing Organisation
der Peers
Anbindung an
Filesharing,
Trägerschicht für
verschiedene IM
EDI (Elektronic
Indexing,
verschiedene
Einsatz für
Standard für
Dienste auf
Data
Searching,
XML Protokolle, Webservices
Datentransfer unterschiedlichsten
Interchange)
Aufbau von
HTTP-Ersatz
Plattformen und
Netzwerken
Geräten
Tabelle 5.1: Eigenschaften von Transport Protokollen
Nachdem in diesem Kapitel ausführlich auf die Datenübertragung und die
Kommunikation in verteilten Architekturen eingegangen worden ist, muss zum Abschluss
des Untersuchungs-teiles der Einsatz diverser Protokolle in verteilten Suchsystemen
untersucht werden. Diesbezüglich werden nur Suchsysteme vorgestellt, die in ihrer
Architektur verteilte Konzepte umgesetzt haben.
94
AS: asynchron, BD: bidirektional, NO: nachrichtenorientiert, VO: verbindungsorientiert, ZB: zustandsbehaftet
Seite 97
Kapitel 6
6.
Verteilte Suchsysteme
Die Informationsauffindung im Internet bereitet herkömmlichen Index- oder MetaSuchmaschinen vermehrt Probleme. Auf der einen Seite können die verschiedenen
Suchmaschinen nur willkürlich spezifische Teile im Internet abdecken und auf der
anderen Seite bietet eine gezielte Suche nach speziellen thematisch gegliederten Inhalten
auch nur einen Eingeschränkten Zugriff auf die verteilten Informationsinhalte. Zudem
liefern die Suchmaschinen viele oft für den Benutzer unbrauchbare Resultate. Des
weiteren können diese Suchmaschinen nur statische Informationen absuchen. Der größte
Teil der Informationen ist aber im so genannten „Deep Web“ (nur über Linkverfolgung
erreichbare Datenbankinhalte) gespeichert. Der Zugriff auf diese Datenbestände kann nur
von lokal installierten Diensten ermöglicht werden. Um diese Dienste auch
Suchmaschinen zur Verfügung stellen zu können, wird der Einsatz von geeigneten
standardisierten Schnittstellen bzw. Abfragemechanismen benötigt.
Ziel beim Entwurf von verteilten Suchsystemen ist meist ein möglichst offener
Architekturansatz, um eine gute Skalierbarkeit und einfache Erweiterbarkeit des Systems
erreichen zu können. Verteilte Suchsysteme können die Netzwerklast durch lokale
Verarbeitung bzw. Vorverarbeitung der Daten verringern und eine Spezialisierung auf
bestimmte Themengebiete vornehmen. Die Anreicherung der Datenbestände mit manuell
erstellten Metadaten führt zur Auffindung qualitativ hochwertigeren Ergebnismengen.
Der Einsatz von automatisierten Klassifizierungsdiensten, diversen Filtern und
statistischen Analyseverfahren liefert zusätzliche Entscheidungshilfen bei den
Recherchen.
In diesem Kapitel werden verschiedene Architekturansätze für verteilte Suchsysteme
vorgestellt und analysiert. Moderne verteilte Ansätze aus dem Bereich Peer-to-Peer
werden dabei den verteilten Modellen wie z.B. Harvest und xFIND, gegenüber gestellt.
Die nun folgenden Abschnitte sollen aufgrund der Analyse der jeweiligen
charakteristischsten Eigenschaften der verschiedenen Architekturen die notwendigen
Erkenntnisse zur Verbesserung der xFIND Kommunikationsschicht liefern.
6.1.
Freenet
Freenet ist ein skalierbares, selbstorganisierendes, fehlertolerantes P2P Netzwerk. Die
Architektur ist zur Gänze dezentralisiert aufgebaut und wird vorwiegend als
kollaboratives, virtuelles File System eingesetzt. Die Architektur von Freenet sieht
Datenredundanzen vor, um die Erreichbarkeit der Daten gewährleisten zu können. Zu den
Grundelementen der Freenet Technologie gehören Nodes, Dokumente und Interaktionen.
Nodes verwalten die Routing-Tabellen, dienen als Datenspeicher und speichern
Dokumentinhalte mehrfach und erzeugen so bewusst Datenredundanzen. Dokumente
werden über Search Keys (Keyword Signed Key, Content Key) identifiziert und in Form
Seite 98
Kapitel 6 - Verteilte Suchsysteme
von Byte Strings gespeichert. Als Interaktionen oder Transaktionen werden NetworkJoins sowie das Einfügen und Suchen von Dokumenten bezeichnet. [Clark et al. 2002]
Jeder Node ist mit einer Menge an Nachbar-Nodes verbunden. Die Routing-Tabellen
bestehen aus Paaren von Search Key zu Node Einträgen. Jeder Node verfügt über einen
lokalen Cache, auf den die Freenet Funktionen angewandt werden. In diesem lokalen
Speicher sind die Routing Tabellen und die Dokumente gespeichert. Sowohl der
Dokumentspeicher als auch die Routing Einträge werden nach dem LRU95-Prinzip
gewartet. Das Löschen eines Dokumentes aus dem Speicher wirkt sich nicht auf die
Einträge der Routing-Tabellen aus. Routing-Tabellen werden unabhängig zu den
Dokumentbeständen gewartet. [Clark et al. 2002]
Um zu verstehen, wie die verteilte Suche in Freenet funktioniert, wird zuerst der
Dokument Insert Algorithmus erklärt. Zuerst wird der eindeutige File-Key erzeugt.
Daraufhin sendet der erzeugende Node eine Message mit dem File-Key und einem HopsTo-Live (HTL) Zähler an sich selbst, um den Einfügeprozess zu starten. Der erzeugende
Node überprüft die eigenen Routing-Tabellen, ob der File-Key bereits gespeichert ist. Ist
bereits ein entsprechender Eintrag vorhanden, wird das File an den Initiatorprozess
retourniert, ein neuer File-Key erzeugt und erneut der Einfügeprozess gestartet. Wenn der
File-Key im erzeugenden Node noch nicht eingetragen ist, dann sucht er den
bestmöglichen benachbarten Node, sendet ihm die Einfügenachricht und erniedrigt den
HTL-Zähler. Dieser Vorgang wiederholt sich solange für jeden einfügenden Node, bis
entweder der HTL-Zähler auf null ist, oder eine Kollision erkannt wurde. Eine Kollision
kommt zustande, wenn ein gesuchter File-Key bereits in einer lokalen Routing-Tabelle
eingetragen ist. Tritt eine Kollision auf, wird das entsprechende File zu den jeweiligen
Initiatoren zurückgeschickt. Dabei speichert jeder Node das File lokal bei sich in seinem
Daten-Cache. Zusätzlich wird der Eintrag auch in den lokalen Routing-Tabellen
vermerkt. Wird das Dokument gefunden, sendet der entsprechende Node eine „All Clear“
Message an den Initiator zurück. Auf demselben Weg retour wird auch das entsprechend
gefundene File geschickt. Am Weg retour zum Initiator speichern nun alle Nodes dieses
File und erzeugen einen neuen Eintrag in ihrer lokalen Routing-Tabelle. [Clark et al.
2002]
Der Search Algorithmus96 verhält sich ähnlich zum Dokument-Insert Algorithmus. Ein
Node schickt wiederum eine Message mit einem File-Key und einem HTL-Zähler an sich
selbst. Der Node vergleicht den File-Key mit seiner Routing-Tabelle. Wenn die Datei
lokal gespeichert ist, kann der Suchrequest beendet werden. Ist die Datei nicht lokal bei
einem Node gespeichert, wird die Suchanfrage zum nächst besten Node (mit dem
ähnlichsten File-Key) weitergeleitet und der HTL-Zähler erniedrigt. Ist bei einem Node
die Datei lokal vorhanden, gilt die Suchanfrage als beendet und die gefundene Datei wird
retour zum anfragenden Node geschickt. Beim Weg retour speichert wiederum jeder
besuchte Node die Datei lokal bei sich und fügt einen neuen Eintrag in seiner RoutingTabelle ein. Falls eine Anfrage in eine Sackgasse läuft oder ein Node schon einmal
besucht wurde, schickt der letzte besuchte Node eine Error-Message an den
Einsprungspunkt der Sackgasse. Verschiedene Afragezyklen oder Schleifen werden als
Fehler erkannt. Dieser Node beauftragt dann den Zweitbesten Node mit der Suchanfrage
und so weiter. Dieser Rekursive Algorithmus läuft solange, bis entweder die Datei
gefunden wurde, alle Nodes besucht wurden oder der der HTL-Zähler ausläuft (gleich
95
LRU: Last Recently Used; Ist kein Platz für neue Einträge vorhanden, werden solange die am längsten unbenutzten
Einträge gelöscht, bis wieder genügend Platz vorhanden ist.
96
Sleepest-ascent hill-climbing search; effiziente Ähnlichkeitssuche nach lokalen Maxima
Seite 99
null zeigt). In diesem Fall wird der Anfrage Node eine Error-Message geschickt. Eine
grafische Darstellung einer typischen Suchanfrage zeigt Abbildung 6.1. Der Suchrequest
wird von Node zu Node weitergereicht: Bei Schritt 3 wird eine Sackgasse erkannt und bei
Schritt 7 eine Schleife erkannt. Gefunden wird die Datei in Schritt 10 und von Node d
über Node e und Node b an den Initiator a geschickt. [Clark et al. 2002]
Abbildung 6.1: Freenet Search Algorithmus [Clark et al. 2002]
Das Designziel von Freenet in Zusammenhang mit den GUID97 strebt eine
symmetrische Aufteilung der Dokumente auf die Nodes an. Die völlig verteilte Kontrolle
erlaubt Prozesse zu parallelisieren (verschiedene Nodes können zur selben Zeit suchen,
einfügen, etc.). Performancetests sind bisweilen nur durch Simulationen durchgeführt
worden. Diese zeigen ein annähernd konvergentes Verhalten der Path-Länge (Länge des
Suchweges) bezüglich der Suchdauer. Bei linear steigender Nodeanzahl skaliert die PathLänge logarithmisch. Bezüglich Fehlertoleranz wurde bei einer Ausfallsquote von 30%
bei 1000 Nodes eine durchschnittliche Path-Länge von 20 ermittelt. [Clark et al. 2002]
Ein Problem von Freenet ist, dass die Suche lediglich auf Dokumentinhalte beschränkt
ist. Es gibt bereits Bestrebungen zur Unterstützung von Metadaten, um noch effizienter
suchen zu können. Weitere Schwächen zeigt das System beim Verbindungsaufbau. Da
jeder Node gleichberechtigt im System verankert ist, schlägt sich die
Verbindungscharakteristik der Nodes auf die Fehlertoleranz nieder (Nodes mit
leistungsschwachen Anbindungen verringern die Effizienz). Auch diesbezüglich gibt es
bereits Erweiterungen in den Verbindungsprotokollen, indem Aspekte wie Qualitiy of
Services berücksichtigt werden. Weitere Entwicklungen98 im Suchaufbau bietet etwa die
Arbeit von Omprakash D Gnawali. Dabei werden Keywords aus dem Dokument
extrahiert, mit Metadaten angereichert und in Indexlisten gespeichert.
97
98
GUID: Global Unique IDentifier; ortsunabhängig, nach SHA-1 ermittelt
[Gnawali 2002]: A Keyword-Set Search System for Peer-to-Peer Networks ;
http://www.pdos.lcs.mit.edu/papers/chord:om_p-meng.pdf
[Harren et. al]: Complex Queries in DHT-based Peer-to-Peer Networks;
http://www.cs.rice.edu/Conferences/IPTPS02/191.pdf
[Ng et. al]: PeerDB: A P2P-based System for Distributed Data Sharing;
http://www.cs.cornell.edu/courses/cs732/2003sp/papers/Ng2003.pdf
[Yang et. al]: Efficient Search in Peer-to-Peer Networks;
http://www.cs.utexas.edu/users/browne/CS395Tf2002/Papers/GarciaMolina-showDoc.pdf
Seite 100
6.2.
Kapitel 6 - Verteilte Suchsysteme
FASD
Die Beschreibung des FASD-Projektes stützt sich auf die Arbeit von [Kronfol 2002].
FASD (A Fault-tolerant, Adaptive, Scalable, Distributed Search Engine) ist eine
komplett verteilte Sucharchitektur, die auf dem selbstorganisierenden P2P-Ansatz von
Freenet aufsetzt. Aufgrund dieser Eigenschaft ist FASD hoch skalierbar und
fehlertolerant. Gegenüber Freenet, das Dokumente anhand von eindeutigen GUID’s
semantikfrei im Netzwerk verteilt, versucht FASD die Dokumente beim Einfügen in das
Netzwerk näher zu analysieren und charakterisieren. FASD generiert aus den
Dokumenten eine Menge von genannten „Metadata-Keys“. Das ist eine Liste von
Termini, die den Inhalt des Dokumentes beschreibt. Diese Liste wird in Form eines
Vektors gespeichert, wobei die Worthäufigkeiten von Schlüsselwörtern in Dokumenten
das ausschlaggebende Merkmal sind. Schlüsselwörter werden in Lexika festgehalten.
Jeder Vektor besitzt eine Referenz auf das Originaldokument. Die Berechnung des
Vektors basiert auf dem TFIDF99 Prinzip. Dieser Ansatz berücksichtigt die Anzahl der
Dokumente für einen Term in einem Knoten und verknüpft diesen Wert mit der
Häufigkeit des Auftretens des Terms in einem Dokument.
Ein weiterer wichtiger Aspekt in FASD ist die Erkennung von Ähnlichkeiten zweier
Dokument-Vektoren. Die Ähnlichkeit der Vektoren wird als Schlüsselabstand bezeichnet
und kommt bereits beim Einfügen von Dokumenten in das Netzwerk zur Anwendung.
Andererseits müssen die Vektoren bei der Suche mit den Suchanfragen verglichen
werden, um eine Ergebnismenge liefern zu können. Wie bei der Generierung des Vektors
setzt FASD bei der Bestimmung des Schlüsselabstandes auf ein standardisiertes
Gewichtungsverfahren, dem Cosinus-Korrelationswert. Der Cosinus-Korrelationswert
kennzeichnet den Winkel zwischen zwei mehrdimensionalen Dokument-Vektoren. Dabei
gilt, je größer dieser Wert ist, desto größer ist auch die indirekte Ähnlichkeit100 zweier
Dokumente. Nachdem Vektoren die Inhalte der Dokumente repräsentieren, müssen auch
Suchanfragen in eine vergleichbare vektorielle Form gebracht werden. Filteranfragen101
können relativ einfach in einen Vektor transformiert werden, indem die Suchwort-Skalare
auf 1 gesetzt werden. Komplexere Suchanfragen werden in die disjunktive Normalform102
gebracht. So ergibt sich eine Reihe von ODER-Verknüpfungen, die als eigene
Suchanfragen gewertet werden.
Bei der Suchanfrage setzt FASD einen eigenen Routing-Algorithmus (PROCESSQUERY) ein. Dieser Algorithmus liefert die besten n Treffer (Anzahl n DokumentVektoren die am ähnlichsten zum Suchanfrage-Vektor sind). Der FASD RoutingAlgorithmus
berücksichtigt
neben
Cachingmöglichkeiten
auch
diverse
Sicherheitsaspekte. Im Gegensatz zum Freenet Routing-Algorithmus wird solange
gesucht, bis ein HTL-Counter den Wert ‚null’ erreicht hat. Der Grund dafür liegt in der
Tatsache, dass nicht vorhersagbar ist, wann eine Lösungsmenge optimal ist. Unter der
Verwendung von eindeutigen Bezeichnern ist eine Zyklenerkennung möglich. Tritt ein
Zyklus auf, wird der Suchrequest zum Initiator-Node zurückgesandt. Auf diesem Weg
zurück werden alle gefundenen Dokument-Vektoren in einem „Least-Recently-Used“Cache vermerkt. Nachdem der HTL-Wert direkten Einfluss auf die Objektivität der
99
TFIDF: Term Frequency x Inverse Document Frequency
Werden Stemming-Algorithmen oder Stopwortlisten bei der Analyse eingesetzt, steigt auch die Wahrscheinlichkeit
der gänzlichen Übereinstimmung zweier Dokumentvektoren.
101
Filteranfragen: Suchworte werden logisch UND verknüpft
102
Bsp.: x1 ODER (x2 UND x3) ODER (x4 UND x5 UND x6)
100
Seite 101
Ergebnismenge und auf die Suchzeit hat, ist es wichtig, bei der Konfiguration einen
Kompromiss zwischen diesen beiden konträren Objektgrößen zu finden. Je größer der
HTL-Wert, desto ähnlichere Dokument-Vektoren werden geliefert. Kleinere HTL-Werte
haben eine kürzere Suchzeit zur Folge. Um die Suche möglichst effizient durchführen zu
können, speichert jeder Knoten zusätzlich einen invertierten Dokument-Vektor-Index.
Die Suchzeit von Standard Algorithmen bei der Suche in invertierten Indizes ist
proportional zur Länge der Suchquery.
Wie bereits erwähnt, sind in FASD verschiedene Sicherheitsaspekte umgesetzt. In
FASD wird „Zensur“ durch den Routing-Alogrithmus ausgeschlossen. Durch Umgehung
von „vermeintlich“ zensurierten Knoten mittels HTL, können wiederum ähnliche
Dokumente gefunden werden. Da beim Einfügen und bei den Suchprozessen die
Dokument-Vektoren gecached werden, kann ein Dokument auch immer über Umwege
(vergrößern von HTL) gefunden werden. Im derzeitigen Projektstand sind nur
unverschlüsselte Vektoren umgesetzt. Für die Zukunft ist aber auch daran gedacht, dass
neben der Dokumentverschlüsselung (wie in Freenet) auch die Vektoren verschlüsselt
werden. Somit ist dann auch gewährleistet, dass bestimmte Dokumente nur unter
Kenntnis der kryptografischen Merkmale (private, public keys) von Dokument-Vektoren
gefunden werden. Zusätzliche Sicherheit bei die Suche gegenüber einer „Denial of
Service“ Attacke bietet die verschlüsselte Speicherform der Dokumente103. Weiters sagt
der Schlüsselabstand nichts über die Qualität des Suchergebnisses aus. Der
Schlüsselabstand ist ein rein objektiver Wert, die Qualität ein subjektiver Wert (von
Benutzer abhängig). Aufgrund der verschlüsselten Speicherform der Dokumente ist
zurzeit auch keine automatisierte Qualitätsbewertung104 möglich.
6.3.
JXTA
JXTA ist ein Projekt, mit dem über eine geeignete Plattform mittels P2P-Technologie
verteilte Anwendungen entwickelt werden können. JXTA steht für „juxtapose“ quasi dem
Aneinanderreihen von Rechnern in einem Netz. Die JXTA Architektur besteht aus dem
JXTA Core, den JXTA Services und den JXTA Applications. Abbildung 6.2 zeigt den
schematischen Aufbau der JXTA Software Architektur. Der JXTA Core stellt die
grundlegende Kommunikation (Erzeugung von Peer Groups) zur Verfügung. Über die
JXTA Services ist zum Beispiel das verteilte Suchen, eine verteilte Dateiverwaltung oder
das Übersetzen verschiedener Protokolle (Anbindung an Fremdsysteme). Die JXTA
Applications stellen die eigentlichen Anwendungen dar, wie z.B. Email-Client und
Content-Management. Der Nachrichtenaustausch innerhalb von JXTA Komponenten
erfolgt anhand einfach erweiterbarer XML basierender Protokolle. Die JXTA Protokolle
wurden bereits in Kapitel 5 Transport Protokolle im Abschnitt 5.9vorgestellt und näher
untersucht. [Gong 2002]
103
Das FASD Netzwerk müsste mit Dokumenten überflutet werden, die einen ähnlichen Dokument-Vektor besitzen, wie
das zu attackierende Dokument. Dies kann aufgrund der verschlüsselten Dokumentform nur schwer erreicht werden.
104
Zur Bewertung der Qualität könnten z.B. die Anzahl der Suchtreffer für ein Dokument, die Updatefrequenz eines
Dokumentes oder zusätzliche beschreibende Metadaten herangezogen werden.
Seite 102
Kapitel 6 - Verteilte Suchsysteme
Abbildung 6.2: JXTA Software Architektur [Gong 2002]
Wie bereits erwähnt, sieht die JXTA Architektur als P2P Ansatz die Kommunikation
zwischen Peers vor, die in so genannten Peer Groups zusammengefasst werden können.
Als Peer wird jede Komponente bezeichnet, die zumindest einen Minimalsatz der JXTA
Protokolle einsetzt. Ein Peer ist durch eine eindeutige ID gekennzeichnet und sucht
automatisiert nach anderen Peers im Netz. Werden Peers zu Peer Groups zusammen
geschlossen, so können diese Services einen besseren Lastenausgleich garantieren, durch
Redundanzen eine höhere Ausfallssicherheit bieten und verschiedene Sicherheitsaspekte
umsetzen. Ein Peer ist jedoch nicht an eine bestimmte Gruppe gebunden. Die
Kommunikation der Peers und Peer Groups erfolgt über spezielle strukturierte
Nachrichten, die mittels Pipes unidirektional oder bidirektional übertragen werden. [Gong
2002]
Für diese Arbeit ist jedoch das verteilte Suchkonzept von JXTA von besonderem
Interesse. JXTA Search entstand im Jahre 2000 aus dem InfraSearch-Projekt, das mittels
Web-Clients den Zugriff auf eine Menge an verteilten Servern unter Verwendung des
Gnutella Protokolls ermöglichte. Die Idee des InfraSearch-Projektes, Suchanfragen an
verschiede Networkpeers zu verteilen, wurde dabei übernommen. JXTA Search
unterscheidet sich gänzlich von herkömmlichen Web-Crawler oder Meta-Suchmaschinen.
Es werden keine Indizes von statischen Seiten generiert, sondern die Suchanfragen in
Echtzeit abgearbeitet. Daraus ergibt sich der Vorteil, keine Dead-Links oder veraltete
Informationen zu erhalten. Der Einsatz von JXTA Search eignet sich besonders gut bei
sich stark ändernden Inhalten oder bei dynamischen Inhalten. Weiters ist es möglich,
mittels JXTA Search Informationsbereiche thematisch zu kapseln, um die Effizienz der
Suche steigern zu können. Nachdem als Austauschformat XML Protokolle zum Einsatz
kommen die das MIME-Format unterstützen, können auch beliebige Datentypen wie z.B.
Text, Bilder oder Audio übertragen werden. [Waterhouse 2001]
Mit JXTA Search ist sowohl eine Tiefensuche, als auch eine Breitensuche möglich.
Bei der Breitensuche wird eine Suchanfrage an möglichst viele Peers weitergeleitet. Peers
sind in Gruppen organisiert, die thematisch, geographisch, content spezifisch oder
applikations-spezifisch orientiert ihre Dienste anbieten beziehungsweise Suchanfragen
bearbeiten. Kann eine Suchanfrage nicht verarbeitet werden, wird diese an eine weitere
Peer-Gruppe weitergeleitet. Bei der Tiefensuche werden hingegen die Technologien von
herkömmlichen Web-Crawler Diensten oder Datenbank Diensten eingesetzt. Eine
Suchanfrage wird entsprechend aufbereitet und kann an diverse Dienste weitergeleitet
werden. Diese Dienste müssen jedoch im JXTA Netzwerk registriert sein. Weiters
werden die Ergebnisse gesammelt und an den Initiator der Suchanfrage zurückgesandt.
Die Vorteile daraus sind ein größerer Neuigkeitsgehalt der Resultate, der Zugriff auf
nicht statische Inhalte in Datenbanken und eine höhere Effizienz durch strukturierte
Seite 103
Request- und Response-Messages. Die Visualisierung der strukturierten Ergebnismenge
wird vom Client erzeugt. [Waterhouse 2001]
Die JXTA Search Architektur basiert auf dem JXTA Framework. In Abbildung 6.3 ist
die Architektur von JXTA Search grafisch dargestellt. Es wird dabei zwischen folgenden
Diensten unterschieden: [Waterhouse 2001]
• Consumer-Service: sendet Suchanfragen an das Netzwerk (Hub, Provider)
• Provider-Service: rufen entsprechende Interfaces der eigentlichen Provider auf und
verarbeitet Suchanfragen. Es werden nur die Antworten generiert und keine Indizes.
• Registrier-Service: speichert Registrierdaten der Provider und sendet diese an die
Hubs.
• Hub-Service: leitet eine Suchanfrage entsprechend an die verschiedenen Provider
weiter. Ein Router verwaltet Suchanfragen, leitet diese weiter an andere Hubs/Router,
vergleicht die Ergebnisse und leitet diese an die Consumer weiter.
• Resolver: löst Suchanfragen auf, vergleicht diese mit den Registrierdaten der Provider,
verteilt entsprechend die Suchanfrage.
Um eine verteilte Suche effizient gewährleisten zu können, sollen Hubs, wie bereits
erwähnt, Informationsbereiche kapseln bzw. trennen, indem Peer Groups gleichen
Inhaltbereiches über Hubs miteinander verbunden werden. In JXTA ist jedoch nicht
spezifiziert wie Hubs miteinander verbunden werden, um z.B. multible Hubs erzeugen zu
können. Jedoch spielt die Query Lifetime eine entscheidende Rolle, um zu gültigen
Resultaten zu kommen. Die Zuordnung der Dienste zu Hubs geschieht aus der Analyse
der Registrierdaten der verschiedenen Provider. In Abbildung 6.4 ist ein einfaches Modell
für eine verteilte JXTA Suche skizziert. [Waterhouse 2001]
Abbildung 6.3: Netzwerk Architektur von JXTA Search [Waterhouse 2001]
Seite 104
Kapitel 6 - Verteilte Suchsysteme
Abbildung 6.4: Verteilte Suche in JXTA Search [Waterhouse 2001]
Die Suchanfrage selbst ist strukturiert aufgebaut, an eine bestimmte (erweiterbare)
XML Notation gehalten und muss zumindest zwei Bedingungen erfüllen, die in den
Registrierdaten abgelegt sind: [Waterhouse 2001]
• Queryspaces sind eindeutige Bezeichner für eine abstrakte Menge möglicher
Resultate. Ähnlich zu einem XML-Namespace kapseln JXTA Queryspaces
Informationsbereiche ab. Die Trennung wird erreicht durch eine spezielle
Datenstruktur und einer eigenen Datensemantik. Die Datenstruktur wird über eine
DTD oder ein XML Schema definiert. Die Datensemantik gibt Auskunft über die Art
der Daten. Weiters ist in einem Queryspace festgelegt, wie Resultate in einem
„Ranking“ verwendet werden können.
• Query Predicates sind ein Satz von Boolschen Ausdrücken, die Query-Node-Patterns
miteinander kombinieren Query-Node-Patterns sind XML Fragmente die den Typ, das
Format, und eine Beschreibung festlegen. Dieser Satz an Prädikaten wird vom
Registrierservice indiziert und zur Analyse der Suchanfragen herangezogen.
Durch die Analyse der Registrierdaten erfolgt dynamisch eine Ähnlichkeitserkennung
von Providern. Diese Daten werden in einer Ähnlichkeitsmatrix des Resolvers
gespeichert. Suchanfragen werden von Routern an die Resolver weitergeleitet. Anhand
der Ähnlichkeitsmatrix versuchen Resolver Routeranfragen einer Menge „ähnlicher“
Provider ID’s zu zuordnen. Die Router verbinden nun die Suchanfrage mit jedem Eintrag
der vom Resolver generierten Provider Menge. Dabei wenden die Router einen
Seite 105
exponentiellen „Back-Off“ Algorithmus an, um einerseits schlechte oder „tote“
Verbindungen umgehen zu können und um andererseits das Spamming105 möglichst klein
halten zu können. Wenn ein Provider die geforderten Timeout-Kriterien nicht erfüllt,
werden die Resolver von den jeweiligen Routern benachrichtigt. Diese Provider werden
bei einer nächsten Anfrage an den Resolver nicht mehr berücksichtigt. Durch all diese
Maßnahmen kann effizient nach Informationen und Daten gesucht werden. [Waterhouse
2001]
6.4.
Harvest
Das Harvest-Suchsystem ist eine Architektur zur Sammlung und zur
Verfügungstellung von verteilten Daten über ein Webinterface. Insbesondere wurde auf
einen modularen Aufbau der Einzelkomponenten der Harvest-Architektur Wert gelegt.
Dieser modulare Aufbau ermöglicht neben der flexiblen Anwendung der Sucharchitektur
auch eine bessere Erweiterbarkeit und Wartbarkeit der Module. Die beiden Hauptmodule
von Harvest sind die Gatherer zur Datenbeschaffung und die Broker, die Suchanfragen
beantworten. Mehrere Gatherer können zur gleichen Zeit verschiedene Datenquellen
abfragen und geeignete Informationen sammeln. Broker kommunizieren mit Gatherer und
stellen so die Verbindung der Suchanfrage zu den Datenquellen her. Als
Informationsquellen kommen Daten in Frage, die über HTTP, FTP, NNT, dem lokalen
Dateisystem, CD-Dateisystem oder über File-Server erreichbar sind. [Bowman et al.
1995]
Die Hauptaufgabe eines Gatherer ist die Extraktion indizierbarer Informationen der
gesammelten Daten. Diese Extraktion wird in einem speziellen SOIF106-Format den
Brokern zur Verfügung gestellt. Der Gatherer kann einerseits direkt am Hostrechner, oder
andererseits auch auf Remote-Rechnern laufen, um mehrere Datenquellen untersuchen zu
können. Durch die lokale Installation wird eine größere Effizienz bei der
Datenbeschaffung durch den direkten Zugriff auf das lokale Filesystem erreicht. Das
Gathern der Daten geschieht periodisch zu konfigurierbaren Harvesting-Zeiten. Beim
Gathern wird für jede Datenquelle ein SOIF-Objekt erzeugt. [Hardy et al. 2002]
Die Aufgaben des Brokers sind das Indizieren der Daten in Form von SOIF-Objekten,
das Filtern von Informationen bzw. das Weiterleiten von Informationen an andere Broker
und das Anbieten eines entsprechenden Suchinterfaces für den Benutzer. Die Zuordnung
von Broker zu Gatherer wird in einem Konfigurationsfile festgelegt. Broker befragen
Gatherer in regelmäßigen Abständen nach Änderungen oder Neuerungen der
gesammelten Informationen ab. Die SOIF-Objekte werden wie bereits erwähnt vom
Broker indiziert und verwaltet. Zum Indizieren der Seif-Objekte werden externe
Werkzeuge wie Glimpse107, Swish108 oder Zebra109 eingesetzt. [Hardy et al. 2002]
Durch das strukturierte Zusammenschalten dieser beiden Module, ist ein effizientes
Auffinden bzw. Aufbereiten der Daten möglich. Broker können z.B. Informationen von
mehreren Gatherer beziehen. Broker können Informationen lediglich auch untereinander
austauschen. Abbildung 6.5 zeigt eine mögliche Harvest-Struktur, in der ein Benutzer
105
Als Spamming bei einer Suche bezeichnet man falsche Angaben bei der Registrierung in diversen Suchmaschinen.
SOIF: Das Harvest Summary Object Interchange Format besteht aus Attribut-Wert Paaren, die aus dem Textinhalt
der Daten extrahiert werden.
107
Glimpse: http://webglimpse.org/
108
Swish: http://swish-e.org/
109
Zebra: http://www.indexdata.dk/zebra/
106
Seite 106
Kapitel 6 - Verteilte Suchsysteme
implizit über einen Broker strukturiert Zugriff auf die Daten von Websites erhält. Die
hierarchische Aufgliederung von Brokern und Gatherer sieht neben hierarchisch
organisierten Cache-Mechanismen (Reduktion von Netz- und Serverbelastung), auch
geeignete Replikationssysteme vor. Bei der Replikation werden die Brokerverzeichnisse
in zeitlich vorgegebenen Abständen miteinander abgeglichen und repliziert. [Bowman et
al. 1995]
Abbildung 6.5: Verteilte Architektur eines Harvest Suchsystems [Bowman et al. 1995]
6.5.
xFIND
xFIND steht für Extended Framework for Information Discovery und wird in erster
Linie zur modernen Wissensauffindung in verteilten Umgebungen eingesetzt.
Problembereiche gängiger Suchdienste sind z.B. die hohe Netzwerklast durch Spider
bzw. Web Crawler oder die Verwaltung einer zentralen Indexdatenbank. Diese
Problembereiche zu verbessern, war die ursprüngliche Motivation zur Entwicklung eines
offenen und verteilten Konzeptansatzes. Dieses Konzept baut in den grundlegenden
Elementen auf Ansätze aus Harvest (siehe Abschnitt 6.4) auf. xFIND ist aufgrund des
Einsatzes von Java (das UI ist in Perl bzw. PHP umgesetzt) plattformunabhängig. Der
modulare Aufbau erlaubt eine einfache Erweiterbarkeit der Funktionseinheiten, das
Austauschen diverser Funktionseinheiten, die Anbindung an existierende Fremdsysteme
und die Integration von xFIND in andere Informationsplattformen. Ein weiteres Ziel bei
der Entwicklung von xFIND war eine Erhöhung der Trefferrelevanz. Die Erhöhung der
Trefferrelevanz wird erreicht durch eine bessere Unterstützung der Benutzer bei der
Suche durch die Miteinbeziehung personalisierter Daten. Durch die Bewertung der
Suchergebnisse mit Qualitätsaspekten oder Merkmalen wie z.B. die Zuverlässigkeit einer
Informationsquelle wird die Ergebnismenge eingeschränkt und eine Verbesserung der
Treffergenauigkeit erzielt. Insbesondere letztere Merkmale garantieren einen
zuverlässigen und vertrauenswürdigen Informationsaustausch. [Gütl 2002] [Hoffmann
2002] [Aichriedler et al. 2000]
Die xFIND Architektur setzt sich im Wesentlichen zusammen aus Gatherer, Indexer
und Broker. Um die Übertragung der Daten zwischen den Modulen möglichst effizient
betreiben zu können, wird ein eigens entwickeltes Übertragungs-Protokoll und
Datenaustauschformat xQCF (xFIND Query Communication Format) eingesetzt. In
Abbildung 6.6 ist die verteilte hierarchische Architektur des xFIND Suchsystems grafisch
dargestellt. In dieser Abbildung wird insbesondere die flexible Konfiguration der
einzelnen Funktionseinheiten hervorgehoben. Gatherer können direkt (Local) oder
Remote auf die Datenbestände zugreifen. Indexer können ihre Informationen von
mehreren Gatherer beziehen. Broker nehmen Suchanfragen entgegen und greifen
ihrerseits wiederum auf die Daten verschiedener Indexer zu. Aufgrund dieser verteilten
Architektur ist eine Spezialisierung bzw. eine Kapselung von Informationsbereichen
möglich. [Gütl 2002]
Seite 107
Abbildung 6.6: Verteilte Architektur des xFIND Suchsystems [Gütl 2002]
Gatherer, wie in Abbildung 6.6 ersichtlich, gathern in konfigurierbaren Abständen
Daten von Webservern oder aus Filesystemen. Der Gather-Prozess an sich gleicht einer
Analyse des Informationsinhaltes. Dabei wird versucht, aus z.B. textuellen Inhalten,
verschiedene relevante Merkmale (Metainformationen) zu extrahieren. Durch die offenen
Schnittstellen des Gatherer können verschiedenste Filter zur Dokumentanalyse
herangezogen werden (Text, HTML, Bildformate, Audio, Video, PDF, Word, etc.). Bei
HTML Dokumenten werden z.B. spezielle Diskriminatoren (Tag-Names) angewandt, um
etwa die Bedeutung verschiedener Textstrukturen bewerten zu können. So werden etwa
der Titel, Schlüsselwörter, Hyperlinks, eingebettete Multimediaobjekte extrahiert und als
beschreibende Merkmale in einem eigenen Dokument zusammengefasst. Automatisiert
werden auch systemspezifische Metadaten wie z.B. Medientyp, Dateigröße, Erstellungsund Bearbeitungszeitpunkt generiert. Bei Bedarf werden zusätzlich allgemeine
Metadaten-Sets wie DC110 und DDC111 oder auch fachspezifische Metadaten-Sets, wie
ACM ACC112 oder LOM113, zur näheren qualitativen Beschreibung der Dokumente
herangezogen. Zur Themenklassifikation werden in xFIND DDC und ACM eingesetzt.
Statistische Auswertungen, wie die durchschnittliche Antwortzeit der Server oder die
Anzahl der Dokumente, können automatisiert erstellt werden. Der Einsatz spezieller
Bewertungsverfahren, wie automatische Spracherkennung oder Themenklassifikation,
liefern zusätzliche Informationen, um bei der Suche die Trefferquote verbessern zu
können. Der größte Vorteil dieser Extraktion bzw. der Dokumentbeschreibung anhand
standardisierter Metadaten ist die Reduktion der Netzwerklast bei der anschließenden
Weiterverarbeitung der Beschreibungs-Objekte. [Knögler 1999] [Gütl 2002] [Hoffmann
2002]
110
DC: Dublin Core
DDC: Dewey Decimal Classification
112
ACM ACC: Association for Computing Machinery Computing Classification System
113
LOM: Learning Object Metadata
111
Seite 108
Kapitel 6 - Verteilte Suchsysteme
Der Indexer selbst besitzt eine „dünne“ Adaptionsschicht, über der verschiedene
Indexer angebunden werden können. D.h. der Indexer muss selbst nicht unmittelbar
indizieren. Er kann sich über diese Adaptionsschicht fremder Indexersysteme bedienen,
oder aber auch Rohdaten verschiedener Datenbanken anbinden. Aus Sicht von xFIND gilt
der Indexer als Schnittstelle zwischen den Informationsbrokern und den Gatherer. Der
Indexer verarbeitet die von einem Gatherer zur Verfügung gestellten SOIF-Objekte,
indiziert diese und legt die indizierten Daten in einer Datenbank ab ( z.B. MySQL,
PostGres, Oracle). Es werden jedoch ausschließlich nur neue oder veränderte
Beschreibungs-Objekte im Index aktualisiert. Dies garantiert einen möglichst hohen
Neuigkeitsgehalt der Informationen. Zusätzlich zu den Beschreibungs-Objekten werden
noch spezielle Metadaten-Objekte im xFIND eigenen xQMS-Format gespeichert. Durch
die offenen Schnittstellen können verschiedene Indizier-Werkzeuge eingesetzt werden.
Der Indexer wertet die Suchanfragen im xQCF114 Format der Broker aus. Die xFIND
Suche unterstützt herkömmliche Such-Funktionen, wie Volltextsuche, Ähnlichkeitserkennung oder Schlüsselwortsuche. Zusätzlich kann aber auch nach den beschreibenden
Metainformationen gesucht bzw. die verschiedenen Suchen miteinander verknüpft
werden. Dem entsprechend werden bei der Darstellung der Suchergebnisse auch diese
zusätzlichen Metainformationen mit angezeigt. Der Indexer verfügt über
Replikationsmechanismen, um eine höhere Ausfallssicherheit gewährleisten zu können.
Caching Funktionalität steigert die Effizienz bei der Bearbeitung von Suchanfragen. Vom
Gatherer erzeugte „Fingerprints“ sichert die Eindeutigkeit und Echtheit der
Informationen. Ein Indexer kann auf einen bestimmten Themenbereich spezialisiert sein,
oder aber auch geographisch diversen Projektgruppen zugeordnet sein. Durch die
Datenbereitstellung der Gatherer ist auch ein Indizieren von lese-geschützten Daten
möglich. [Gütl 2002] [Hoffmann 2002] [Aichriedler et al. 2000]
Der Broker nimmt die Suchanfragen der Benutzer entgegen und leitet diese an einen
oder mehrere Indexer weiter. Die erhaltenen Resultate werden gesammelt, gecached,
entsprechend zur Ausgabe aufbereitet und zum Client zurückgeschickt. Nachdem der
Broker „seine“ Indexer kennt, ist auch eine Separation von Wissensbereichen möglich.
Die Suchanfragen der Clients werden vom Broker in das xQCF-Format umgesetzt und in
dieser Form als Anfrage an die Indexer weitergeleitet. Neben den Indexern können auch
externe Quellen, die über das xFIND-API an das System angeschlossen sind (z.B.
Altavista Indexer), abgefragt werden. Sind mehrere Indexer bei einer Anfrage
eingebunden, können Duplikate in Suchergebnissen ausgefiltert und ein Ranking der
Ergebnismenge durchgeführt werden. Über den Broker ist auch die Wartung der
Serverbereiche möglich. Neue Seiten können über die Broker angemeldet und die
Seitenbeschreibungen verändert und verwaltet werden. Eine Seitenbeschreibung wird
über ein Webinterface von xFIND Benutzern erfasst. Diese Seitenbeschreibung wird im
xQMS Format gespeichert und zur weiteren Begutachtung an verschiedene Experten
weitergeleitet. Diese hierarchisch gegliederte Begutachtung der Seitenbeschreibungen
führt zu qualitativen und zuverlässigen Zusatzinformationen. Ist eine Seitenbeschreibung
bzw. ein neuer Serverbereich zur Suche freigegeben, werden entsprechend die Indexer
und in weiterer Folge die Gatherer benachrichtigt. In der vorliegenden xFIND Version
müssen die Einträge für die Indexer und die Gatherer manuell konfiguriert werden. [Gütl
2002[Hoffmann 2002] [Aichriedler et al. 2000]
114
xQCF: xFIND Query Communication Format; Definition siehe Anhang Abschnitt 12
Seite 109
6.6.
Schlussbemerkung
Das Architekturkonzept des xFIND-Suchsystems sieht Module vor, die verteilt auf
verschiedenen Rechnern installiert werden können. Die Kommunikation erfolgt bisher
über einen recht einfachen Mechanismus. Der Kommunikationsaufbau und die
Informationsübertragung werden über Sockets realisiert. Das Datenaustauschformat
xQCF (xFIND Query Communication Format) ist ein xFIND-spezifisches Format und
nicht standardisiert. Es ist deshalb nur sehr schwer möglich, Ergebnisse anderer
Suchdienste einzubinden bzw. andere Dienste zu integrieren.
Weiters kann mit der xFIND Kommunikationsschnittstelle kein standardisierter Dienst
zur Verfügung gestellt werden, der etwa von anderen Applikationen genutzt werden
kann. Eine automatisierte Suche nach entsprechenden Diensten oder eigenen
Systemkomponenten ist im xFIND Architekturkonzept nicht vorgesehen. Im derzeitigen
Stand des xFIND-Suchsystems sind zudem keine Sicherheitsaspekte in der
Kommunikationsschicht bzw. in den verschiedenen Modulen integriert. Das xFINDSuchsystem ist zwar ein in mehrere Komponenten aufgeteiltes System, aber die
Koppelung bzw. die Verbindung der verschiedenen Systemteile ist jedoch strikt
vorgegeben. Diese starre Koppelung der xFIND-Module könnte mit den Ansätzen zur
automatisierten Auffindung diverser Dienste über P2P Modelle aufgelöst werden. Freenet
und FASD als selbstorganisierende P2P Netzwerke bieten dafür geeignete Methoden.
Durch die Ausnützung der Redundanzen in P2P Netzwerken kann z.B. die
Ausfallssicherheit einzelner Module erhöht werden.
JXTA bietet zudem die Möglichkeit Module thematisch in Gruppen zu organisieren.
Innerhalb dieser Gruppen können spezielle Sicherheitsaspekte umgesetzt werden.
Nachdem JXTA sowohl die Tiefensuche als auch die Breitensuche unterstützt, kann der
Zugriff auf Datenbankinhalte (Deep Web) geschützt erfolgen. Unter Berücksichtigung
von Quality-Of-Service Aspekten kann eine größere Durchsatzrate der verteilten Module
erzielt werden. Die Auswertung von Registrierdaten kann zur thematischen
Ähnlichkeitsbestimmung der Module herangezogen werden. Dadurch wäre eine
automatisierte themenspezifische Suche nach Informationsinhalten möglich. In Freenet
sind die Daten grundsätzlich verschlüsselt gespeichert. Das trifft für die
Informationsinhalte im WWW zum Großteil jedoch nicht zu. Das auf Freenet basierende
Suchsystem FASD setzt zudem Dokument-Vektoren zur Ähnlichkeitserkennung und
Auffindung der Informationsinhalte ein. Werden diese Dokument-Vektoren verschlüsselt
bzw. mit einem Fingerprint versehen, ist auch ein gesicherter Kommunikationsfluss
gewährleistet. Zudem bietet FASD den Vorteil, dass mit der Dokument-Vektoren
Methode eine Denial of Service Attacke bei der Suche nur sehr schwer möglich ist.
Die Gegenüberstellung von P2P Ansätzen und xFIND liefert eine Vielfalt an
möglichen Verbesserungen für die xFIND Kommunikationsschicht bzw. viele
Erweiterungen für die Architektur selbst. Ziel ist es jedoch im Gestaltungsteil dieser
Arbeit lediglich ausgewählte Übertragungsprotokolle zu überprüfen. Diese sollen einen
standardisierten, effizienten und sicheren Informationsaustausch bewerkstelligen können.
Zusätzlich werden Vorschläge erstellt, um weitere Verbesserungen in der
Kommunikationsschicht in zukünftigen Projekten einfach umsetzen zu können.
Seite 110
Seite 111
II Gestaltungsbereich
Seite 112
Seite 113
Kapitel 7
7.
xFIND Kommunikationsarchitektur
Im Laufe der Jahre entstand der Bedarf die Kommunikationseinheit von xFIND zu
erneuern, bzw. diese zu standardisieren. Zusätzlich soll die verteilte Verwaltung
zentralisiert und vereinfacht werden. Insbesondere Kapitel 5 und Kapitel 6 liefern
wichtige Erkenntnisse für die Erweiterung und Verbesserung der xFIND
Kommunikationsarchitektur. Die Ziele des Gestaltungsteiles ergeben sich so aus den
Problemfeldern und den Verbesserungspotentialen von xFIND. Um die Problemstellen
verbessern zu können, sollen vor allem Technologien zum Einsatz kommen, die einen
möglichst geringen Aufwand in der Umsetzung erfordern.
Um diesen Forderungen gerecht zu werden, wird im ersten Teil des Gestaltungsteiles
die xFIND Kommunikationsarchitektur eingehend analysiert. Mit Hilfe einer
Testimplementierung wird eine Simulation der xFIND Client-Server Kommunikation
durchgeführt. Die aus einem Benchmark Test gewonnen Kennwerte, sind als
Referenzdaten für weitere Analysen in verschiedenen Projekten anzusehen.
Aus dem Untersuchungsteil geht weiters hervor, dass insbesondere das
Datenübertragungsprotokoll BEEP und das Protokollframework JXTA am geeignetsten
erscheinen, um eine Verbesserung der Problembereiche in xFIND zu erzielen. Diverse
Testimplementierungen geben Aufschlüsse über den Einsatzbereich und die
Verwendbarkeit der verschiedenen Technologien. Den Abschluss des Gestaltungsteiles
bildet ein Überblick über die Realisierung der geforderten Ziele. Zusätzlich sind Ideen
und Verbesserungsvorschläge für künftige Projekte gesondert vermerkt.
7.1.
Einleitung
xFIND entstand als Teil eines durch das Österreichische Wissenschaftsministerium
geförderte Forschungsprojekt am IICM. xFIND und xFIND Module wurden
prototypenhaft in den Jahren 1997 bis 2000 entworfen. Seit mehr als vier Jahren wird nun
xFIND als Open Source Projekt von der Web Community unterstützt und
weiterentwickelt. Die generelle Architektur und Arbeitsweise von xFIND wurden bereits
eingehend im Untersuchungsteil in Abschnitt 6.3 beschrieben. Im Gestaltungsteil wird
nun näher auf die technischen Details eingegangen. Insbesondere wird versucht,
Problembereiche der xFIND Kommunikationsschicht eingehend zu analysieren.
Die Probleme die sich in der Entwicklung ergaben, führten zu einer Reihe von xFIND
spezifischen Neuentwicklungen. So gab es für die Konfiguration der verschiedenen
Module noch keine standardisierten Möglichkeiten. XML war zu dieser Zeit zwar schon
standardisiert, doch geeignete Parser boten in den Entwicklungsanfängen von xFIND nur
unzureichende Qualität. Auf ähnliche Probleme stieß man beim Entwurf der
Kommunikationsschicht. Standardisierte Protokolle für verteilte Umgebungen gab es
Seite 114
Kapitel 7 - xFIND Kommunikationsarchitektur
noch nicht, ebenso wenig wie geeignete Abfragesprachen. So wurde entsprechend viel
Ehrgeiz und Arbeit in die Entwicklung einer schlanken und performanten
Kommunikationsschicht gelegt.
Diese Kommunikationsschicht ist jedoch nach heutigem Stand nicht einfach
erweiterbar, birgt zudem Sicherheitslücken und unterstützt keine gültigen Standards. Um
einen Vergleich mit modernen standardisierten Übertragungs-Technologien erstellen zu
können, wurde zu Testzwecken eine eigenständige Client-Server Umgebung entwickelt,
in der die xFIND Kommunikations-Technologie integriert wurde. Die nun folgenden
Unterabschnitte beschreiben nun eingehend die technischen Aspekte der xFIND
Kommunikationsarchitektur und orientieren sich dabei an den Arbeiten von [Maurer et al.
2000] [Gütl 2002] [Knögler 1999] [Heber 2000] [xFIND 2003].
7.2.
xFIND Konfiguration
Die xFIND-Module werden über eine Reihe von Konfigurationsdateien verwaltet und
gesteuert. Die Syntax ist für alle Konfigurationsdateien einheitlich, jedoch xFIND
spezifisch. xFIND sieht dafür einen speziellen XFConfigReader vor. Verschiedene
Bereiche werden ähnlich zu XML in einer bestimmten Notation voneinander getrennt. So
sind auch verschachtelte Bereiche und Subbereiche erlaubt. Ebenso können Kommentare
in der Datei vermerkt werden. Zudem ist die Syntax recht einfach gehalten.
Der Beginn eines Bereiches wird mit [Sectionname] und das Ende eines Bereiches mit
[/Sectionname] vermerkt. Subbereiche müssen den jeweiligen Elternpfad als Präfix
angeführt haben [Sectionname.Subsection]. Unter anderem gibt es die Möglichkeit,
zusätzliche xFIND Konfigurationsdateien über ein spezielles Kommando zu inkludieren.
Dadurch können die Konfigurationsdateien schlanker und übersichtlicher gestaltet
werden.
Der XFConfigReader parst die Sections und liefert anhand von speziellen Methoden,
einen ganzen Bereich als Stringwert inklusive Subbereiche zurück. Mitunter kann man
einen Bereich auch Filtern. Dann werden alle Kommentare, Newlines und Subbereiche
für diesen Bereich ignoriert. Liegt eine spezielle Form der Einträge vor, kann automatisch
eine Hash-Table als Key-Value Map für einen Bereich angefordert werden.
Folgende Konfigurationsdateien werden in xFIND eingesetzt:
• xFIND.cfg: Konfiguration für den xFIND-Manager. Hier werden generelle Dinge
festgelegt wie das Logformat, Loglevel, welche Module loggen und die
Verbindungsparameter zwischen den Modulen.
• Gatherer.Config.cfg: Im Gatherer Konfig werden die globalen Gatherparameter
festgelegt. Dazu gehören die Pfadtiefe, maximale Anzahl an besuchten Hosts bzw.
Urls und die Urleinträge selbst. Diese können kategorisch nach der Häufigkeit ihrer
Aktualisierung zu verschiedenen Zeitpunkten abgesucht werden.
• Gatherer.Retriever.cfg: Definiert die Zugehörigkeit von Retriever-Typen zu ihren
jeweiligen Javaklassen (Factory). Weiters werden in dieser Konfigurationsdatei FileExtensions
MIME-Media
Typen
zugeordnet.
Zusätzlich
können
die
Verbindungsparameter zu einem Proxyserver festgelegt werden.
• Gatherer.Log.cfg: Einstellungen für das Logging äquivalent zu xFIND.cfg
eingeschränkt auf das xFIND Gatherer-Modul.
• Gatherer.Filter.cfg: Einstellungen für den Gatherer Filter wie Klassenname (Factory),
Spracherkennung, etc.
Seite 115
• Gatherer.Database.cfg: Einstellungen zur Anbindung des Gatherer an die Datenbank.
Name der Datenbank, Driver-Name, Driver-URL, DB-User, DB-Password, SQL
Quote Character und SQL Escape Character.
• Gatherer.Converter.cfg: Bildet die MIME Typen auf die verschiedenen
Converterklassen (Factory) ab. Legt spezielle Eigenschaften für verschiedene MIME
Typen fest (HTML-Tags, Image Abmessungen, etc.).
• Gatherer.Authorize.cfg: Legt Zugangsdaten für den Retriever fest. Hosteinträge, Ports,
Passwörter, etc.
• Gatherer.AllowDeny.cfg: Dieses Konfig File regelt die Zugangsrichtlinien für den
Retrieval Prozess. Anhand von Regulären Ausdrücken wird festgelegt welche
Protokolle, Dateien oder Hosts erlaubt sind oder ausgeschlossen werden.
• broker.cfg: Hier werden Logging Parameter äquivalent zu xFIND.cfg eingeschränkt
auf den xFIND Broker festgelegt. Weiters wird der Broker-Cache verwaltet und
zusätzlich werden die Broker-DB Verbindungsattribute vermerkt.
• manager.cfg: Die Konfiguration für den xFIND-Manager entspricht von den
Grundelementen denen von xFIND.cfg. Deshalb weist diese Datei redundante
Informationen auf. Jedoch sind in xFIND.cfg die meisten Bereiche auskommentiert.
Wesentlich ist hier, dass die DB-Verbindung des Indexer über dieses File konfiguriert
wird.
• XFLog.cfg: Generelle Einstellungen für Logging.
• XFAVFilterFactory.cfg: Spezielles Filter Mapping für abstrakte Filterklassen.
• XFAllowDeny.cfg: Zugangsrichtlinien für Urls, vergleichbar mit
Gatherer.AllowDeny.cfg.
7.3.
xFIND Kommunikation
Die Kommunikation zwischen den verschiedenen xFIND-Modulen wird über Java
TCP/IP Socket Verbindungen durchgeführt. Auf diesem TCP/IP Socket wird ein eigens
definiertes Transportprotokoll aufgesetzt. Dieses Protokoll wird sowohl bei lokalen als
auch externen Modul-Anbindungen eingesetzt. D.h. sind mehrere Module (xFINDGatherer, xFIND-Indexer und xFIND-Broker) auf einem Server integriert,
kommunizieren diese Module stets über dieses proprietäre Protokoll. Aufgrund der
Komplexität bei der Übertragung wurde auf den Entwurf eines eigenen lokalen Protokolls
verzichtet. Das so eingesetzte xFIND Kommunikations-Protokoll besteht aus fünf
verschiedenen Bereichen:
1. Server-Ticket: Wenn der Server eine Verbindung akzeptiert oder ablehnt, wird ein
entsprechendes Server-Ticket zur Authentifizierung vom Server generiert und an den
Client geschickt. Die Gültigkeitsdauer des Server-Tickets ist an die SocketVerbindung geknüpft. Das Server-Ticket beinhaltet Statusinformationen über die
Verbindung, eine Server-Message zur Identifikation des Servers, den „public-key“ des
Servers und ein String-Array, in dem weitere Server-Daten abgelegt sind.
Seite 116
Kapitel 7 - xFIND Kommunikationsarchitektur
2. Service-Request: Wird vom Client generiert, um verschiedene Module abfragen zu
können. Dieser spezielle Request beinhaltet wie das Server-Ticket
Statusinformationen über die Verbindung, den Namen des abzufragenden Moduls, ein
Authentikation-Ticket und in einem String-Array die Query-Argumente für das
jeweilige Modul. Über einen speziellen Request ist das Schließen einer Verbindung
ohne zusätzliche Parameter möglich.
3. Data-Header: Ein Data-Header wird vom Server an den Client aufgrund einer ClientAnfrage geschickt. Der Data-Header gibt Aufschluss, ob die Anfrage angenommen
oder abgelehnt wurde. In weiterer Folge werden über den Data-Header nur mehr
Statusinformationen ausgetauscht (granted, reject). Zusätzlich kann eine nicht näher
spezifizierte Nachricht im Header mitübertragen werden.
4. Data: Im Datenbereich werden Zeichen, Zahlen oder Strings übertragen. Eine
Datengruppierung erfolgt mit einem „End Of Block“ (EOB) Indikator. Wird ein EOBIndikator erkannt, beantwortet der jeweilige Dienst dies mit einer „ackEOB“ Message.
Im Fehlerfall wird eine I/O Exception erzeugt. Das Ende des Datenstromes wird mit
„End Of Data“ (EOD) markiert. Auch EOD muss entsprechend den Vorgaben mit
„ackEOD“ bestätigt werden.
5. Data-Footer: Der Data-Footer wird nach einer Datentransaktion vom Server zum
Client gesandt. Der Data-Footer beinhaltet wiederum Statusinformationen über die
Verbindung und eine Message. In der Statusinformation wird dem Client signalisiert,
ob die Socket-Verbindung geschlossen werden kann, oder noch für weitere
Transaktionen offen bleiben soll. Falls der Client einen Data-Header verschickt, muss
er auch entsprechend einen Data-Footer schicken.
Zu beachten ist, dass die Module nicht unbedingt antworten müssen bzw. Header oder
Footer Daten verschicken müssen. Wenn eine Verbindung geöffnet ist, können auch
weiterführende Sub-Verbindungen zu anderen Modulen aufgebaut werden. Wichtig dabei
ist, dass jeder Request komplett abgearbeitet werden muss. Verschachtelte oder
ineinander greifende Requests sind nicht erlaubt. Der Close-Request erzeugt lediglich
einen default-Header bzw. default-Footer und beendet die Verbindung.
Dem Client-Server Prinzip zu Folge lauscht jeweils ein Server pro Modul auf
eingehende Requests. Die Modul Clients versenden die Suchanfragen. Ein Server kann
maximal 255 (default-Wert) gleichzeitige Verbindungen halten. Wenn dieser
konfigurierbare Wert überschritten wird, lehnt der Server die Suchanfrage ab. Wird eine
Suchanfrage akzeptiert, antwortet, wie bereits erwähnt, der Server mit einem ServerTicket. Gleichzeitig wird ein „Worker-Thread“ erzeugt, der die erzeugte SocketVerbindung überwacht und auf Service-Requests wartet.
Der Initiator Client wartet auf die Serverantwort (Server-Ticket) und überprüft diese
nach dem Eintreffen. Im Falle einer Ablehnung durch den Server wird der entsprechende
Client-Prozess beendet. Ansonsten versucht nun der Client anhand von Service-Requests,
Daten vom Server anzufordern. Zur Vereinfachung des doch komplexen
Verbindungsaufbaues, bzw. der Datenübertragung, zeigt Abbildung 7.1 eine bildliche
Darstellung der Client-Server Kommunikation in einem Datenflussdiagramm.
Seite 117
Abbildung 7.1: Datenfluss der xFIND Kommunikation zwischen Client und Server [xFIND 2003]
Jedes Modul in xFIND muss eigens einen Client und Server starten, um miteinander
kommunizieren zu können. So startet z.B. der Gatherer über die Klasse
XFGathererCommunication den Gatherer-Server, um Requests vom xFIND IndexerClient entgegen nehmen zu können. Der xFIND Indexer startet hingegen mit der Klasse
Seite 118
Kapitel 7 - xFIND Kommunikationsarchitektur
die Kommunikationsschnittstelle am Indexer. Der Indexer
schickt eine Such-Anfrage im QCF-Format an den Gatherer. Der Gatherer extrahiert
resultierend der Suchanfrage die entsprechenden Daten aus seiner internen Datenbank.
Der XFGathererMaster stellt die zentrale Schaltstelle zwischen der Datenbank und der
Kommunikationseinheit dar. Der XFGathererMaster initialisiert alle notwendigen
Bereiche und stellt die Datenbankverbindung dem XFGathererCommunication zur
Verfügung.
XFIndexGathererClient
Die Module selbst (Indexer und Gatherer) können auch „remote“ über den globalen
gestartet und miteinander verknüpft werden. Die verschiedenen notwendigen
Parameter wie z.B. Portadressen, Host- bez. Server-Namen sind konfigurierbar
ausgeführt.
Der
Datenaustausch
zwischen
der
Datenbank
und
dem
XFGathererCommunication erfolgt über das XFDBObject. Die Datenobjekte werden nach
Indexer Anfragen, von der Gatherer Kommunikationseinheit in das QCF-Format
transformiert und an den Indexer-Client zurückgesandt. Um den Kommunikationsfluss
einfacher beschreiben zu können, sind in Abbildung 7.2 alle beteiligten Komponenten in
einer Blockdarstellung zusammengefasst.
XFManager
Internet
Database
XFIndexer
XFManager
XFGathererMaster
XFGathererCommunication
XFDatabase
XFDBObjectEnumerator
XFDBObject
Abbildung 7.2: Blockdarstellung der xFIND Indexer-Gatherer Kommunikation [xFIND 2003]
Die Kommunikation zwischen xFIND Broker und xFIND Indexer erfolgt auf ähnliche
Weise. Der Broker startet einen Client über die Klasse XFIndexerQuery. Auf der Indexer
Seite wird der entsprechende Server über die Klasse XFIndexerSearchQueryComm
erzeugt. Da bei dieser Kommunikation keine zusätzlichen Transformationen stattfinden
besteht der Datenaustausch hauptsächlich aus verschiedenen QCF Datenpaketen. Im
Gegensatz zur Kommunikation zwischen Indexer und Gatherer, werden bei der
Kommunikation zwischen Broker und Indexer mehrere Header- und Footer- Blocks
sowie Result-Objekte ausgetauscht. Zusätzlich zu den Suchresultaten werden noch
Statusinformationen und Indexer-Informationen als Resultat übertragen. In Abbildung 7.3
sind die beteiligten Komponenten bei einer Suchanfrage vom Broker an einen Indexer
schematisch dargestellt. Die eigentliche Kommunikation ist in dieser Darstellung als
einfache Verbindung zwischen Broker und Searcher skizziert. Der Searcher hat in einem
Anfrageprozess mehrere Aufgaben zu bewältigen. Die QCF-Suchanfrage wird von einer
Postfix-Notation in eine Infixnotation umgewandelt. Damit kann einfacher in der Indexer
Datenbank gesucht werden. Zusätzlich bildet der Searcher die Suchanfrage auch für die
„Site-Description Registry“ auf. In dieser Registry werden beschreibende xQMS115
Metadaten für Indexereinträge vermerkt. Nähere Informationen zu den xQMS Elementen
können im Anhang B in Kapitel 13 nachgelesen werden.
115
xQMS: xFIND Quality Metadata Scheme beschreibt ein xFIND eigenes Klassifikationsschema, dass sich an DDC
(Dewey Decimal Classification code) und LOM (Learning Object Metadata) orientiert bzw. diese unterstützt.
Seite 119
Abbildung 7.3: Blockdarstellung einer Broker-Indexer Suchanfrage [xFIND 2003]
7.4.
xFIND Datenübertragung
Wie im vorigen Unterabschnitt bereits erwähnt, wird die Kommunikation zwischen
xFIND-Modulen über Java TCP/IP Socket Verbindungen realisiert. Die
Datenübertragung über diese Sockets basiert auf dem eigens für xFIND definierten QCFFormat. QCF steht für Query Communication Format. QCF ist vom Prinzip her ein
einfaches Format, dass lediglich einfache Key/Value Paare abbildet. Ein QCF-Key ist
eindeutig und kann aus einem oder mehreren Teilbereichen gebildet werden. Die QCFKeys sind hierarchisch aufgebaut. Die Abstraktion bzw. Verallgemeinerung erfolgt von
rechts nach links (umgekehrt zum DNS Prinzip). Im textbasierten QCF-Format erfolgt die
hierarchische Gliederung oder Abstraktion anhand des Trennzeichens ‚.’.
In QCF sind 14 Basis-Bereiche definiert:
1. VERSION – Section: spezifiziert die Versionsdaten der xFIND Versionierung
2. AUTH – Section: beinhaltet benutzerrelevante Informationen. Kann zur
Authentifikation herangezogen werden
3. ERROR – Section: beinhaltet diverse Fehlermeldungen und Fehlerbeschreibungen
4. GATHERER – Section: definiert alle für den Gatherer relevanten Keys zur
Kommunikation
5. OBJECT – Section: Basis Keys zur Beschreibung aller vorhandenen xFIND-Objekte
6. COMPARATOR – Section: definiert die Vergleich-Keys
7. MARK – Section: dient zur internen Verwendung, zum Erkennen von Klammern
8. OPERATOR – Section: Basis Operatoren (AND, OR, …) und spezielle Operatoren für
interne Bereiche
9. QUERY – Section: beinhaltet eine Suchanfrage, wird stets auch bei der Kommunikation
zwischen xFIND-Modulen verwendet
10. RESULT – Section: Antwort auf eine Suchanfrage
11. SITE-DESCRIPTION – Section: beinhaltet die Metadaten einer Web-Site
12. STATISTIC – Section: beinhaltet statistische Daten
13. URL – Section: definiert verschiedene Bereiche einer URL
14. WARNING – Section: beinhaltet Warnhinweise für die Kommunikationsteilnehmer
Kommentare können mit „#“ vermerkt werden. Es gibt spezielle Platzhalter für Zahlen
und Zeichenketten in diversen Formaten. Eine Query muss in einer speziellen Syntax
verfasst sein. Die QCF-Syntax ist im Anhang A Kapitel 12 (QCF-Spezifikation) näher
Seite 120
Kapitel 7 - xFIND Kommunikationsarchitektur
beschrieben. Bei der Definition der Query können zusätzlich spezielle optionale
Parameter deklariert werden.
Eine xFIND-Query besteht aus drei Teilbereichen:
1. Query: enthält die Suchanfrage bestehend aus Key/Value Paaren und Verknüpfungsoperatoren
2. Query-Attribute: optionale Randbedingungen wiederum als Key/Value Paare (default
config)
3. Return-Attribute: Keys, die bei der Suche erwartet werden; Key/Value Paare mit
leeren Values
Eine xFIND Antwort besteht ebenfalls aus drei Teilbereichen:
1. Statistics: statistische Informationen über die Suche in Key/Value Paaren
2. Resultat: Alle in der Query geforderten Attribute werden, falls vorhanden bzw.
gefunden, mit Werten belegt
3. Resultat-Footer: Status Informationen, Warnmeldungen, Fehlermeldungen ebenfalls
als Key/Value Paare
7.5.
Beschreibung der xFIND QCF-Datenpakete
In Abschnitt 7.3 wurden bereits die fünf verschiedenen Bereiche in der
Kommunikationsschicht kurz erwähnt. Um die Requests von xFIND mit anderen
Übertragungsmechanismen vergleichen zu können, bedarf es einer nähren Aufstellung
der jeweiligen Datenpaketgröße. Grundsätzlich muss erwähnt werden, dass die QCF
Datenpakete als String serialisiert werden. Diese Strings werden zusätzlich UTF-8 codiert
übertragen. Ein UTF-8 String in Java wird mit zwei führenden bytes gekennzeichnet.
Diese beiden bytes geben die Contentlänge des UTF-8 Strings an. Daraus ergibt sich eine
maximale Contentlänge von 16 kB für einen UTF-8 String. Die Methodik des Schreibens
sieht jedoch vor, Strings zu zerteilen und nacheinander als Stream zu übertragen. Nach
jedem UTF-8 String kennzeichnet ein byte, ob ein String komplett übertragen wurde,
oder ob noch weitere String-Teile folgen.
Ein Server-Ticket besteht aus mindestens 14 bytes:
Head
‚Tick’
4 byte
Status Flags
int
4 byte
Message
String
3-X bytes
Public Key
String
3-X bytes
Arguments
String Array
0-X bytes
Tabelle 7.1: Datenpaket des xFIND Server-Ticket
Ein Service-Request besteht aus mindestens 25 bytes:
Head
‚ReqS’
4 byte
Status Flags
int
4 byte
Service Name
String
3-X bytes
Arguments
String Array
0-X bytes
Tabelle 7.2: Datenpaket des xFIND Service-Requests
Server-Ticket
XFTicket
14-X bytes
Seite 121
Ein Data-Header besteht aus mindestens 11 bytes:
Head
‚Head’
4 byte
Status Flags
int
4 byte
Message
String
3-X bytes
Tabelle 7.3: Datenpaket des xFIND Data-Header
Ein Data-Footer besteht aus mindestens 11 bytes:
Head
‚Foot’
4 byte
Status Flags
int
4 byte
Message
String
3-X bytes
Tabelle 7.4: Datenpaket des xFIND Data-Footer
Ein Request Datenpaket ist abhängig vom jeweiligen Datentyp. Ein Request selbst
wird in der zuvor beschriebenen QCF-Syntax erstellt. Auf einen Socket serialisiert
werden vier Basis-Datentypen: Byte, Int, Long und String. Will man komplexere Objekte
mit der xFIND Kommunikationsschicht übertragen, müssen diese auf die vier
vorliegenden Basis-Datentypen abgebildet werden. So können mit dieser Methode auch
binäre Daten (der Gatherer verarbeitet binäre Daten, wie z.B. Images zur Generierung
von Thumbnails) recht einfach übertragen werden.
7.6.
Testimplementierung – Client-Server Simulation
Um einen Vergleich der gegenwärtigen xFIND Übertragungstechnologie mit anderen
standardisierten Technologien herstellen zu können, bedarf es gleichartiger bzw.
vergleichbarer Testumgebungen und Testimplementierungen. Zur Erstellung eines
anschließenden Benchmark Tests, wurde die xFIND Kommunikationsschicht erweitert
und angepasst. Für den Simulationsaufbau (einfache Client-Server Umgebung) wurden
einige xFIND Systemklassen aus dem xFIND Source extrahiert. Die Erweiterungen und
die dafür notwendigen Klassen wurden in einem eigenen Package comm_test
zusammengefasst.
Als Basis für die Testumgebung dient der aktuellste Stand von xFIND 0.96b aus dem
xFIND-CVS Source Repository. Nachdem, ab der Java-Version 1.3, z.B. standardmäßig
auch Reguläre Ausdrücke im Java-Core enthalten sind, gab es auch unabhängig vom
Release-Wechsel Änderungen im xFIND Source.
Das benannte comm_test Package beinhaltet folgende drei Dateien:
•
•
•
XFTestManager.java:
Gilt als Provider für die Socketverbindungen zwischen Client
und Server. Der Manager erzeugt implizit den Server-Socket, nimmt alle Requests
entgegen und leitet sie entsprechend ihrer Abstraktion an den entsprechenden Server
weiter.
XFTestServer.java: Der xFIND-Server erhält bei der Initialisierung durch den
Manager die entsprechende Socket-Verbindung zum Client und den Client AnfrageRequest.
XFTestClient.java: Fordert vom XFTestManager eine xFIND-Socket Verbindung
an und initialisiert die Kommunikation mit dem XFTestServer.
Seite 122
Kapitel 7 - xFIND Kommunikationsarchitektur
XFTestManager
XFTestClient
XFTestServer
Abbildung 7.4: Blockdiagramm der xFIND Client-Server Simulation
In Abbildung 7.4 ist der grundsätzliche strukturelle Aufbau der Testimplementierung
ersichtlich. Die Klasse XFTestClient wird mit der Hostadresse und der Portnummer des
XFTestManager initialisiert. Um eine Verbindung mit dem herstellen zu können, fordert der
XFTestClient vom xFIND Service Request Dienst eine neue xFIND Socketverbindung zum
XFTestServer an. Um die Datengröße für den Simulationsaufbau steuern zu können, wird
zusätzlich zu den xFIND spezifischen Request Parametern, noch die zu erwartenden Contentlänge
übergeben (dazu mehr im Abschnitt 7.7). Der XFTestServer implementiert das
XFRequestHandlerIfc und wird über den xFIND Service Request Dienst initialisiert. Eine
spezielle Methode erzeugt willkürliche Character-Streams mit der vom Client geforderten Länge.
Der Server sendet zur Initialisierung den Header, die Daten und den Footer. Um einen erneuten
Kommunikationshandshake zu vermeiden, wird das KeepAlive Flag gesetzt.
7.7.
xFIND Benchmark Tests
Um einen automatisierten Testablauf für einen Benchmarktest bewerkstelligen zu
können, wurde im Package edu.iicm.xfind.common.comm.XFServiceRequest die
Klasse XFServiceRequest.java um einige Methoden erweitert. Der automatisierte
Testablauf wird vom Client aus gesteuert. Der Client initialisiert zu Beginn die
Socketverbindung und fordert vom Server mit einem entsprechend angepasstem Ticket
wiederholt Datenpakte einer bestimmten Größe an. Die Größe des Datenpaktes wird
hiebei beim Anfrage-Request an den Server als Initialisierungswert mit angegeben.
Beim automatisierten Testablauf werden im Client zwei verschachtelte Schleifen
abgearbeitet. Die erste (äußere) Schleife, legt die zu übertragene Datenmenge fest. Die
Größe dieser Datenmenge ist der Initialwert für den Server. Am Server werden die
Datenpakete von einer speziellen Funktion generiert. Als Datenpakete werden
willkürliche Zeichenfolgen (Strings) mit der Länge des Initialwertes erzeugt. Um einen
guten Überblick über die Leistungsfähigkeit der Kommunikationsschicht zu erhalten,
steigert der Client die Datenanforderung in logarithmischen Schritten; 1kB – 5MB.
Die zweite (innere) Schleife iteriert zehn Mal. D.h. ein Datenpaket einer bestimmten
Größe wird zehn Mal in Folge vom Server angefordert und übertragen. Damit wird eine
Homogenisierung der Messwerte erreicht, bzw. Messtoleranzen und Störgeinflüsse
werden verringert. Die so erhaltenen Werte werden pro Datenmengeneinheit gemittelt
und in einer Tabelle vermerkt. Da die xFIND-Komponenten sowohl lokal, als auch in
verteilten Umgebungen über denselben Mechanismus miteinander kommunizieren,
wurden die Benchmark Tests auf drei verschieden Rechner-Umgebungen durchgeführt.
Der erste Architektur-Aufbau setzt eine einfache lokale Verbindung zwischen Client
und Server voraus. Die nun folgende Beschreibung der drei verschiedenen
Testarchitekturen gilt für alle durchgeführten Benchmark Tests im Gestaltungsteil. In
weiterer Folge wird auf diese drei Rechnerarchitekturen referenziert (PC1, PC2, PC3).
Seite 123
Die Kennwerte der ersten Testumgebung sind (PC1):
•
•
•
•
Prozessor: AMD Athlon(TM), XP 2400+ 2.00GHz
Speicher: 256MB Ram
Betriebssystem: Win XP-Home SP2
Java-Version: java version "1.4.2_04"; Java(TM) 2 Runtime Environment, Standard
Edition (build 1.4.2_04-b05); Java HotSpot(TM) Client VM (build 1.4.2_04-b05,
mixed mode)
Die zweite Architektur setzt ebenfalls eine einfache lokale Verbindung zwischen Client
und Server voraus. Die Kennwerte der zweiten Testumgebung sind (PC2):
•
•
•
•
Prozessor: Intel Pentium(3) 866MHz
Speicher: 768MB Ram
Betriebssystem: Win 2000 Server SP4
Java-Version: java version "1.4.1_02"; Java(TM) 2 Runtime Environment, Standard
Edition (build 1.4.1_02-b06); Java HotSpot(TM) Client VM (build 1.4.1_02-b06,
mixed mode)
Im dritten Aufbau wurden der Client und der Server auf zwei verschiedenen Rechnern
installiert. Die Clients laufen stets auf PC2 und die Server auf der dritten Testumgebung
(PC3). Die Kennwerte von PC 3 sind:
•
•
•
•
Prozessor: Intel Pentium(3) 733MHz
Speicher: 512MB Ram
Betriebssystem: Win 2000 Profesional SP3
Java-Version: java version "1.4.2_05"; Java(TM) 2 Runtime Environment, Standard
Edition (build 1.4.2_05-b04); Java HotSpot(TM) Client VM (build 1.4.2_05-b04,
mixed mode)
localhost PC2
Remote
Client PC2
Server PC3
Profiler PC1
Size
localhost PC1
bytes
ms
ms
ms
ms
1k
5
11
299
14
2k
8
11
300
16
5k
6
12
301
22
10k
8
14
301
28
20k
16
29
316
50
50k
50
96
595
106
100k
116
213
703
189
200k
247
364
996
333
500k
477
809
1644
567
1M
789
1438
2505
909
2M
1359
2791
4231
1564
5M
3581
7929
11115
4195
Tabelle 7.5: Benchmark-Test Übertragungszeit xFIND Kommunikationsschicht
Seite 124
Kapitel 7 - xFIND Kommunikationsarchitektur
Bis zu einer Datengröße von ca. 10kB sind alle Werte annähernd gleich. D.h. ein
UTF-8 codierter String kann in voller Länge übertragen werden. Ab einer Datengröße
von ca. 20kB steigt der Wert kontinuierlich an. Da, wie bereits in Abschnitt 7.5 erwähnt,
die UTF-8 Datenpakete (Testfall) maximal 16kB groß sein können, müssen diese in
mehrere
Pakete
zerteilt
werden.
Dies
erfordert
einen
zusätzlichen
Kommunikationsaufwand. Sowohl bei der Umgebung PC1 als auch bei der Umgebung
PC2 kann man in der Tabelle 7.5 ablesen, dass der Zeitbedarf bis zu einer Datengröße
von 2MB annähernd linear verläuft.
Gut zu erkennen ist die annähernd lineare Übertragungszeit in Abbildung 7.5 und
Abbildung 7.6. Aufgrund der Zerteilung großer Datenmengen in kleine Pakete, ist die
Steigung nicht konstant. Kommen, wie bei der Kennlinie „remote PC2-PC3“,
Netzwerkparameter als Randbedingung hinzu, ist der lineare Verlauf nur phasenweise
gegeben. Ab einer Datengröße von ca. 1MB wird die Steigung jedoch erheblich größer
und es ist so kein linearer Verlauf bei großen Datenmengen zu erwarten.
Benchmark Test: xFIND Kommunikation: 1K - 200K
localhost PC2
localhost PC1
remote PC2-PC3
Profiler PC1
1200
1000
Zeit in ms
800
600
400
200
0
1k
2k
5k
10k
20k
50k
100k
200k
übertragene Bytes
Abbildung 7.5: Kennlinien für Benchmark-Test xFIND Client-Server 1kB-200kB
Benchmark Test: xFIND Kommunikation: 200K - 5M
localhost PC2
localhost PC1
remote PC2-PC3
Profiler PC1
12000
10000
Zeit in ms
8000
6000
4000
2000
0
200k
500k
1M
2M
5M
übertragene Bytes
Abbildung 7.6: Kennlinien für Benchmark-Test xFIND Client-Server 200kB-5MB
In Tabelle 7.5 ist eine spezielle Spalte „Profiler“ vermerkt. Diese ist ebenfalls in den
Kennlinien laut Abbildung 7.5 und Abbildung 7.6 visualisiert. Die Profiler Spalte wurde
lediglich zu informativen Zwecken bei einer Profiling-Analyse aufgezeichnet. Anhand
der Kennlinie soll gezeigt werden, dass das Profiling keinen wesentlichen Einfluss auf die
Seite 125
Messwerte bzw. auf die Messumgebung nimmt. Die Ergebnisse der Profiling Analyse
werden im Abschnitt 8.5 näher erläutert.
Grundsätzlich zeigt dieser Benchmark Test, dass die xFIND Kommunikationsschicht
speziell für kleine Datenpakete annähernd gleich bleibende Werte für die
Datenübertragung erzielt. Aufgrund der geringen Datenmengen, die beim
Verbindungsaufbau ausgetauscht werden, fallen diese auch bei Transaktionen kleiner
Datenpakte kaum ins Gewicht. Eine Anforderung an die xFIND Kommunikationsschicht
ist, eine möglichst kleine Antwortzeit auf erste Anfragen zu erreichen. Weitere Daten
werden iterativ angefordert. Diese Anforderung kann anhand dieses Tests als erfüllt
angesehen werden.
Sind xFIND Komponenten über ein Netzwerk miteinander verbunden, müssen die
Datenmengen ohnehin gering gehalten werden. Das zeigt eindeutig die Kennlinie des
remote-Tests. Hier ist eine Antwortzeit unter 300ms kaum zu erreichen. Für den
Benchmark Test muss jedoch berücksichtigt werden, dass die Verbindung jedes Mal
erneut aufgebaut werden muss. D.h. eine Mehrfachverbindung ist in xFIND bisher nicht
vorgesehen.
7.8.
Schlussbemerkung
xFIND setzt von der Konfiguration bis hin zur Datenübertragung eigene
Entwicklungen ein. Der Grund liegt zum einen darin, dass es zu Beginn der Entwicklung
von xFIND noch keine geeigneten standardisierten Werkzeuge oder entsprechenden
Module bzw. Protokolle gab. Zum anderen wurden standardisierte Möglichkeiten im
Bereich der Metadaten den gegebenen Anforderungen (Bewertung von Referenzen)
angepasst bzw. erweitert.
Im Bereich der Konfiguration existieren im derzeitigen Stand einige Redundanzen.
Verschiedene
Files
decken
oft
dieselben
Konfigurationsbereiche
oder
Konfigurationswerte ab. Diese Problematik entstand durch den modularen Aufbau von
xFIND und den verschiedenen Entwicklungsstufen in den Modulen. Jede Komponente
setzt eigene Konfigurations-Dateien ein. Eine Verbesserung hinsichtlich der
Verwendbarkeit ist durch einen Umbau der Konfigurationssyntax in eine XML-Notation
erreichbar. Damit sollte die Konfiguration sowohl „machine-readable“ als auch „humanreadable“ sein. Zudem soll versucht werden, die Redundanzen der verschiedenen
Konfigurationsdateien zu entfernen und dafür weniger aber klar strukturierte und für
xFIND allgemein gültige Konfigurations-Dateien zu entwerfen.
Im Bereich der Datenübertragung wird eine Authentifikation und gesicherte
Datenübertragung bisher nicht unterstützt. Es erfolgt lediglich eine Anmeldung des
Clients beim Server anhand eines Tickets. Der Server kann das Ticket akzeptieren oder
ablehnen. Der Zugriff auf die Daten ist für jedermann gleichberechtigt. Es ist in xFIND
keine Rechteverwaltung vorgesehen. In weiterer Folge ist es so auch nicht möglich,
kommerzielle Aspekte zu berücksichtigen. Da eine gesicherte Datenübertragung nicht
unterstützt wird, gibt es auch keine Möglichkeit die Echtheit der Daten zu überprüfen.
Vom Prinzip her ist das Datenübertragungsformat QCF ein recht effizientes Format.
Doch kann es durchaus Engpässe bei der Anzahl an Verbindungen geben. Diese Anzahl
ist zurzeit auf 255 beschränkt. In xFIND ist keine bidirektionale Verbindung zweier
Module möglich. Die Kommunikationsschicht arbeitet nach dem Client-Server Prinzip
auf synchrone Weise. Sie ist nicht offen zur Anbindung an verschiedene Fremdsysteme,
bzw. bietet intern keine einfachere Möglichkeit des Datenaustausches an.
Seite 127
Kapitel 8
8.
Analyse des Protokolls BEEP
Der generelle Aufbau des BEEP Protokolls wurde bereits in Abschnitt 5.5 eingehend
beschrieben. Als Einführung zur näheren technischen Analyse des Protokolls, werden
nochmals kurz zusammengefasst die wichtigsten Kernpunkte von BEEP erwähnt.
BEEP ist verbindungsorientiert, arbeitet asynchron und wird als Protokoll-Framework
zur Datenübertragung eingesetzt. Das Framework beinhaltet verschiedene, wieder
verwendbare Module. Module werden in BEEP als Profile bezeichnet. Über diverse
Profile kann man etwa die Authentifikation, eine Datenverschlüsselung,
Datenkompression oder eine Fehlerbehandlung realisieren.
Die Aufgabe von BEEP gilt rein der Datenübertragung. BEEP setzt dabei auf die
Transportschicht TCP/IP auf. Daten oder Nachrichten werden vor dem Versenden in
Frames unterteilt und mit den verschiedenen Austauscharten zwischen zwei BEEPPartnern übertragen. Die Kodierung der Daten erfolgt im XML-Format. So ist auch die
Unterstützung verschiedener XML basierender Datenaustauschformate möglich. Es
existieren bereits Profile für SOAP und XML-RPC. Da BEEP gleichberechtigte Partner
im Datenaustausch vorsieht, kann BEEP in Peer-to-Peer Netzwerken oder zum
Datenaustausch zwischen zwei Server eingesetzt werden. Ein weiterer Vorteil von BEEP
liegt in der Mehrfachausnutzung von Verbindungen.
Um den Nutzen des BEEP Protokolls für den Einsatz in der xFIND
Kommunikationsarchitektur bewerten zu können, wurde zu Testzwecken eine Java
Referenzimplementierung des BEEP Protokoll entsprechend angepasst. Zusätzlich wurde
diese Referenzimplementierung erweitert, um den Einfluss von Transportsicherheit und
Authentifikation auf den Datendurchsatz ermitteln zu können. Die Testumgebung, die
Testarchitektur und der Testablauf aus dem Benchmark Test in Abschnitt 7.6, wurden
ebenfalls bei der Erweiterung der Referenzimplementierung als Basis miteinbezogen.
Die Ergebnisse aus den xFIND Benchmarktests und den BEEP Benchmarktests
werden einander gegenübergestellt und miteinander verglichen. Die daraus resultierenden
Erkenntnisse sind in einem eigenen Unterpunkt zusammengefasst. Weiters werden
Vorschläge erstellt, wie die xFIND Datenpakete mit dem BEEP-Protokoll effektiv
übertragen werden können.
8.1.
Aufbau der BEEP Kommunikation
In BEEP sind drei verschiedene Möglichkeiten für den Datenaustausch vorgesehen.
Der Name bzw. der Typ der Austauschart, ergibt sich aus dem Server-Antwort Verhalten.
Dabei wird unterschieden zwischen „One-to-One Exchange“ und „One-to-Many
Exchange“. Bei One-to-One Verbindungen wird für jeden Client-Request ein Server-
Seite 128
Kapitel 8 - Analyse des Protokolls BEEP
Response generiert. Bei One-to-Many Verbindungen kann der Server auf eine Anfrage
mehrere Antworten an den anfragenden Client schicken.
Die Kommunikation erfolgt asynchron. D.h. bei One-to-Many Verbindungen muss der
Client dafür sorgen, dass es zu keinen Abhängigkeiten oder Kollisionen zwischen den zu
erwartenden Datenpakten geben kann.
•
message/reply:
Der Client schickt eine Anfrage an den Server. Der Server wertet
die Anfrage aus und schickt eine positive Antwort (MSG) an den Client zurück; „Oneto-One“.
message/error: Der Client schickt eine Anfrage an den Server. Dieser wertet die
Anfrage nicht aus und schickt in diesem Fall eine negative Antwort (RPY) an den
Client zurück; „One-to-One“.
message/answer: Der Client schickt eine Anfrage an den Server. Dieser wertet die
Anfrage aus und schickt keine (null), oder mehrere Antworten (ANS) an den Client
zurück. Durch eine spezielle gekennzeichnete Nachricht wird der “One-to-Many“
Datenstrom abgeschlossen.
•
•
Wie bereits eingangs des Kapitels erwähnt, können Nachrichten bzw. Daten in
mehrere Frames unterteilt werden. Jede Nachricht kann mit einem Header beginnen, der
den Inhalt der Nachricht beschreibt (z.B. MIME-Type). Als Defaultwert für den
Inhaltstyp wird der MIME-Type „application/octet-stream“ festgelegt. Der Defaultwert
für das „Content-Transfer-Encoding“ ist „binary“. Eine Nachricht ist in XML-kodiert und
kann beliebig lang sein. Das Frame selbst wird wiederum in drei Bereiche unterteilt. Die
Untereilung erfolgt in Header, Nutzlast (Payload) und abschließenden Trailer. Header
und Trailer enden jeweils mit der Zeichenkette „CRLF“. Die BEEP Frame Syntax wurde
im [RFC 3080] in ABNF-Notation116 wie folgt definiert:
frame
data
header
msg
rpy
ans
err
nul
common
channel
msgno
more
seqno
size
ansno
payload
trailer
mapping
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
data | mapping
header payload trailer
msg | rpy | err | ans | nul
"MSG" SP common
CR LF
"RPY" SP common
CR LF
"ANS" SP common SP ansno CR LF
"ERR" SP common
CR LF
"NUL" SP common
CR LF
channel SP msgno SP more SP seqno SP size
0..2147483647 (1-10byte)
0..2147483647 (1-10byte)
"." | "*"
(1byte)
0..4294967295 (1-10byte)
0..2147483647 (1-10byte)
0..2147483647 (1-10byte)
*OCTET
(*byte)
"END" CR LF
(5byte)
;; each transport mapping may define additional frames
Abbildung 8.1: BEEP Frame Syntax [RFC 3080]
Der Header bestimmt den Typ des Nachrichtenaustausches. Der Header-Typ ist eine
3-byte lange Zeichenkette; MSG- message, RPY-reply, ANS-answer, ERR-error, NULterminator.
Channel
entspricht
der
Kanalnummer,
über
welchen
der
Nachrichtenaustausch erfolgt. Die Kanalnummer muss im Bereich von 0 – 231-1 liegen.
Die Kanalnummer 0 ist jedoch für das Kanalmanagement reserviert. D.h. zum
Datenaustausch müssen Kanalnummern größer 0 verwendet werden. Die Message116
ABNF: Augmented Backus Naur Form. Diese wurde im [RFC 2234] beschrieben und stellt Erweiterungen der
„normalen“ BNF für die Beschreibung von Spezifikationen (RFC’s) zur Verfügung.
Seite 129
Number muss ebenfalls im Bereich von 0 – 231-1 liegen. Sie gilt für eine Anfrage und alle
darauf erstellten Antworten. Aufgrund von möglichen Mehrfachantworten muss die
Message-Number eindeutig sein und darf innerhalb einer Transaktion (Nachricht wird mit
ERR, RPL oder NUL abgeschlossen) nicht wieder verwendet werden. More gibt an, ob die
aktuelle Nachricht vollständig ist, oder ob noch weitere Frames folgen. Der
Fortsetzungsindikator More wird mit den Zeichen „.“ (Nachricht ist vollständig) und „*“
(es folgen noch Frames) beschrieben und belegt somit 1byte. Die Sequence-Number
definiert das erste Oktett in der Nutzlast. Diese muss im Bereich von 0 – 232-1 liegen. Size
beinhaltet die Anzahl zu übertragender Oktetts117 in der Nutzlast. Diese muss im Bereich
von 0 – 231-1 liegen. Sämtliche Zahlenfolgen wie z.B. channel oder msgno werden als
Bytestreams geschrieben. Dies bedeutet, die Länge der Zeichenkette entspricht der
Ziffernanzahl (1-10byte).
Die Nutzlast der BEEP Nachricht liegt zwischen Header und Trailer. Die Länge der
Nutzlast kann 0 oder mehrere Oktetts umfassen. Auch jede Antwort auf einen Request
wird mit einer Answer-Number gekennzeichnet. Diese muss wie die seqno im Bereich
von 0 – 232-1 liegen. Den Abschluss einer BEEP-Nachricht bildet der Trailer. Dieser wird
mit der Zeichenfolge „END“ und „CRLF“ (dies entspricht 5bytes) definiert. BEEP wird
auf die Transportschicht TCP/IP aufgesetzt. Um Nachrichten mittels mehreren Frames
übertragen zu können, wird statt eines einfachen Daten-Frames ein Sequence-Frame
erzeugt. Die Syntax des BEEP Sequence-Frames ist im [RFC 3081] wie folgt in ABNFNotation definiert:
seq
ackno
window
; channel,
= "SEQ" SP channel SP ackno SP window CR LF
= seqno
= size
seqno, and size are defined in Section 2.2.1 of [RFC 3080].
Abbildung 8.2: BEEP Sequence Frame Syntax [RFC 3081]
Eine Sequence wird mit dem Sequence-Marker “SEQ” (3byte) eingeleitet. Channel
entspricht der ausgehandelten Kanalnummer. Die Acknowledgement-Number
kennzeichnet den Wert der nächsten Sequence-Number im Datenstrom. Die
Kennzeichnung Window entspricht der Size im gewöhnlichen Data-Frame. Sie gibt die
Größe des darauf folgenden Paylodes als Oktett-Wert an. Eine Sequence wird mit der
Zeichenfolge „CRLF“ abgeschlossen. Um eine bessere Übersicht über die Frame-Syntax
bzw. der Struktur einer BEEP Message zu bekommen, sind die möglichen
Kombinationen in Abbildung 8.3 nochmals vereinfacht grafisch dargestellt.
117
Oktett: leitet sich vom lateinischen Wort Octo = Acht (Ziffer 8) ab. Ein Octet sind 8 binäre digits oder 1byte.
Insbesondere ist der Begriff Octet bei der Datenübertragung gebräuchlich.
Seite 130
Kapitel 8 - Analyse des Protokolls BEEP
seq-frame
message
data-frame
header
data-frame
header
payload
type
SP
channel
SP
seqno
SP
size
SP
trailer
msgno
SP
more
SP
LF
ansno
SP
peload
OCTET
trailer
seq-frame
"SEQ"
SP
END
channel
CR
SP
LF
ackno
SP
window
CR
LF
Abbildung 8.3: Grafische Darstellung der BEEP Frame-Syntax
Wie bereits einleitend erwähnt ist in BEEP die Mehrfachausnutzung von
Verbindungskanälen möglich. D.h. ist eine Verbindung zwischen zwei Teilnehmern
geöffnet, können auch weitere Kanäle für dieselbe Verbindung erzeugt werden. Diese
werden dann über dieselbe Verbindung mittels Multiplexen118 gemeinsam verwendet. Ist
eine Verbindung aufgebaut, werden Nachrichten in Form von fünf verschiedenen
Grundtypen ausgetauscht: greeting, start, close, ok und error. An dieser Stelle
wird aber nicht näher auf die Verwendung der verschiedenen Möglichkeiten dieser
Grundtypen eingegangen. Diese sind detailliert im [RFC 3080] beschrieben.
118
Multiplexen: Unter Multiplexen versteht man die feste Zuteilung eines Teils der gesamten Bandbreite einer
Verbindung.
Seite 131
Als Beispiel für eine erfolgreiche Initialisierung einer Verbindung zwischen Client (C)
und Server (S) dient folgender Codeauszug:
C:
C:
C:
C:
C:
C:
C:
C:
C:
S:
S:
S:
S:
S:
S:
S:
MSG 0 1 . 52 158
Content-Type: application/beep+xml
<start number='1'>
<profile uri='http://iana.org/beep/TLS'>
<![CDATA[<ready />]]>
</profile>
</start>
END
RPY 0 1 . 110 121
Content-Type: application/beep+xml
<profile uri='http://iana.org/beep/TLS'>
<![CDATA[<proceed />]]>
</profile>
END
Listing 8.1: BEEP Initialisierungsvorgang zwischen Client und Server [RFC 3080]
Eine Nachricht (Massage-Typ start) wird vom Client zum Server geschickt, um einen
Kanal zu öffnen. Der Zielkanal ist Kanal 0 (Kanalmanagement) mit der
Nachrichtnummer 1. Die Nachricht besteht aus einem Frame mit der Sequenznummer 52.
Die Anzahl der Oktette in der Nutzlast beträgt 158. Der Server antwortet mit einer
gültigen replay Nachricht und bestätigt das vom Client angeforderte TLS Profil.
Mit Profilen wird die Art der Datenübertragung festgelegt. Neben der
Authentifizierung und Transportsicherheit wird die Syntax und Semantik zugelassener
Nachrichten definiert. Authentifizierung über SASL und Transportsicherheit über TLS
sind bereits fix integrierte Bestandteile in BEEP. Diese können bei Bedarf bei der
Erstellung eines Kanals mit angegeben werden. Will man spezifischen Anforderungen
bezüglich Syntax oder Semantik bei der Datenübertragung gerecht werden, muss dafür
ein geeignetes Profil erstellt werden und wiederum beim Kanalaufbau übertragen werden.
8.2.
BEEP Testimplementierung
Als Grundlage der Testimplementierungen wurde das Open Source Projekt „beepcore
eingesetzt. Es existieren zwar auch andere Java Implementierungen des
BEEP-Protokolls (permaBEEP-java-0.8 und beeplite_092), jedoch hat sich bei ersten
Tests herausgestellt, dass die Referenzimplementierung von beepcore recht einfach und
verständlich aufgebaut ist und sich einfach erweitern lässt. Aufgrund der Open Source
Aktivitäten und der guten Basisfunktionalität, wurde die beepcore Implementierung in
weiterer Folge für die anschließenden Benchmark Tests in Abschnitt 8.3 als Basis
Implementierung des BEEP-Protokolls herangezogen.
v0.9.08“119
Für die Benchmark Tests wurde die „Example“ Beispielapplikation von beepcore
erweitert, um neben der Transportsicherheit TLS auch eine Authentifikation mittels
Anonymous SASL und SASL-OTP120 durchführen zu können. Die Beispielapplikation
von beepcore verfügt über einen Server-Deamon (Beepd.java), der generisch alle Profile
über dynamisches Class-Loading referenziert. Die Definition der Profile ist über ein
XML-File konfigurierbar. Die verschiedenen eingesetzten Profile sind von beepcore
119
beepcore: http://www.beepcore.org/, biete eine Basis Java Implementierung für [RFC 3080] und [RFC 3081] an
OTP: OTP steht für One Time Password. Das Passwort ist nur für eine Verbindung gültig und wird aus einer OTPDatenbank ausgelesen.
120
Seite 132
Kapitel 8 - Analyse
alyse des Protokolls BEEP
ebenfalls in XML-Files121 spezifiziert.
Der generische BEEP Daemon wurde für die Testimplementierung ohne
Veränderungen übernommen. Die XML-Definitionsdatei der zu unterstützenden Profile
wurde entsprechend um das SASL und SASLOTP Profil ergänzt. Das beepcore example
sieht in seiner ursprünglichen Form für jeden Request eine eigene Authentifizierung vor.
Um die One-to-Many Eigenschaft von BEEP simulieren zu können, wurden die
Beispielimplementierung von beepcore dahingehend erweitert. In den Benchmark Tests
sind verschiedene Kombinationen bezüglich Transportsicherheit und Authentifikation zu
durchzuführen. Aus diesem Grund wurde die Client Klasse in zwei verschiedenen
Versionen umgesetzt.
Die erste Version des BEEP Clients inkludiert alle Test Fälle für einen stetigen
Kommunikationsaufbau. Als Inititalisierungsparameter gelten dabei die zu verwendende
Transportsicherheit und die zu verwendende Authentifikation. Dieselben
Initialisierungsparameter werden auch vom zweiten Versuchs Client ausgewertet. Im
zweiten Fall wird versucht, bei mehreren Datenübertragungen nur einen Kanal zu
erstellen und über diesen mehrere Transaktionen durchzuführen.
beepd-config.xml
Bing
Beepd
BingNewSession
Abbildung 8.4: Blockdiagramm des BEEP Client-Server Testaufbaus
8.3.
BEEP Benchmark Tests
Zur Überprüfung der Performance des BEEP-Protokolls bezüglich der
Datenübertragung in lokalen und verteilten Umgebungen, wurden wiederum drei
Benchmark Tests durchgeführt. Die verwendeten Rechnerarchitekturen entsprechen den
in Abschnitt 7.6 beschriebenen Architekturen und werden mit PC1-PC3 bezeichnet.
Neben der grundsätzlichen Eigenschaft der Datenübertragung, wird explizit auch die
Zeitverzögerung bei der Authentifikation und bei Aktivierung der Transportsicherheit
ermittelt.
Als Transport Profil wurde das einfachste ECHO-Profil verwendet. Der Beep-Daemon
wird gestartet, und nimmt alle eingehende Anfragen und Daten von Clients entgegen. Als
Antwort auf die Anfragen, werden dieselben Daten unverändert wieder an den Client
zurückgeschickt. Entsprechend ist dies ein sehr einfaches und effizientes Profil. Weiters
wurden folgende Testbedingung festgelegt:
121
BEEP-Profile Spezifikationen:
http://iana.org/beep/TLS;
http://xml.resource.org/profiles/NULL/ECHO;
http://iana.org/beep/SASL/ANONYMOUS;
http://iana.org/beep/SASL/OTP
Seite 133
Grundsätzliche Vorgaben (gleich wie in Abschnitt 7.6 xFIND Benchmark Tests)
•
•
•
•
•
•
Datenpakete in Größen von 1KB in logarithmischen Schritten bis 5MB.
Die Datenpakete werden 10 Mal in Folge übertragen.
Es wird die Zeitdifferenz vom Senden bis zum Empfangen der Daten ermittelt.
Die Folge von 10 Paketen wird gemittelt und in eine Tabelle eingetragen.
Verbindungsaufbau: nur einmal für ein Paketfolge (Bing.java) oder stets jedes Mal
neu für alle Pakete (BingNewSession.java).
Der BEEP-Deamon ist am selben Rechner wie der Client (localhost) oder über ein
Netzwerk erreichbar (remote).
Spezielle Vorgaben angepasst an die erweiterten Möglichkeiten zur Authentifizierung
und Datenverschlüsselung.
•
•
•
•
Fall 1: keine Transportsicherheit und keine Authentifikation
Fall 2: Transportsicherheit TLS und keine Authentifikation
Fall 3: Transportsicherheit TLS und Authentifikation mit SASL
Fall 4: Transportsicherheit TLS und Authentifikation mit SASLOTP
Erklärung zur Legende: Authentifizierung-Transportsicherheit- Verbindungsaufbau
N-N-1
N-TLS-1
SASL-TLS-1
SASLOPT- TLS-1
N-N-X
N-TLS-X
SASL-TLS-X
SASLOTP-TLS-X
none, none, einmal
none, TLS, einmal
SASL, TLS, einmal
SASLOTP, TLS, einmal
none, none, jedes mal
none, TLS, jedes mal
SASL, TLS, jedes mal
SASLOTP, TLS, jedes mal
In der Wertetabelle und in der anschließenden Analyse ist die Variable X als Iterator
für den Verbindungsaufbau anzusehen. Dies bedeutet, dass z.B. im Fall N-N-1 zwar 10mal die Datenpakete verschickt wurden, jedoch der Verbindungsaufbau (Client-Server
Handshake) nur einmal durchgeführt wurde. Im Fall N-N-X ist die Variable X
entsprechend mit dem Wert 10 belegt.
Seite 134
Kapitel 8 - Analyse des Protokolls BEEP
Size
N-N-1
bytes
ms
N-TLS-1
SASLTLS-1
ms
ms
SASLOPT
-TLS-1
N-N-X
N-TLS-X
SASLTLS-X
ms
ms
ms
ms
SASLOTP
-TLS-X
ms
1k
3
3
3
2
27
235
103
1.715
2k
5
6
5
5
27
241
95
1.705
5k
8
11
8
6
30
233
94
1.702
10k
22
30
13
11
32
256
114
1.708
20k
31
61
25
22
53
267
130
1.741
50k
202
244
144
164
234
444
225
1.884
100k
375
472
367
433
378
717
536
1.945
200k
684
1.058
753
619
738
1.233
759
2.208
500k
1.483
1.953
1.625
1.741
1.337
2.453
1.634
3.334
1M
2.770
4.489
2.816
3.131
3.019
4.392
3.058
4.828
2M
5.202
8.523
5.380
5.375
5.495
8.730
5.055
7.639
5M
12.839
19.711
14.327
13.764
12.625
21.744
12.536
15.216
Tabelle 8.1: Benchmark-Test BEEP ECHO-Profil, localhost PC1
Die Analyse der Messwerte zeigt, dass bei sehr kleinen Datenpaketen der
Verbindungsaufbau die Kenngröße für die Performance vorgibt. So kann man bei Paketen
bis ca. 1kB die Größe der Datenpakete vernachlässigen. Der Verbindungsaufbau mit 10
Datenpaketen benötigt im Testfall N-N-1 ca. 3ms. Der Verbindungsaufbau mit 10
Datenpaketen benötigt im Testfall N-N-X ca. 30ms (X=10). Wird hingegen die
Transportsicherheit gefordert oder eine Authentifikation durchgeführt, verschieben sich
hier die Kennlinien, die in Abbildung 8.5 ersichtlich sind, recht deutlich und vermindern
eindeutig die Datendurchsatzrate.
B e nc hm a rk : B e e p E c ho ; S e rv e r/ C lie nt a uf lo c a lho s t
N-TLS-1
N-TLS-X
SASLOTP-TLS-X
SASL-TLS-1
100.000
10.000
N-N-1
N-N-X
SASLOPT-TLS-1
SASL-TLS-X
1.000
100
10
1
1k
2k
5k
10k
20k
50k
100k
200k
500k
1M
2M
5M
übe r t r a ge ne B y t e s
Abbildung 8.5: Kennlinien für Benchmark-Test BEEP ECHO-Profil, localhost-PC1
Die Ergebnisse sind bis zu einer Paketgröße von ca. 50kB relativ unabhängig von der
Speicherauslastung des Test-Systems. Daraus resultiert die annähernd gleichbleibende
Zeitdifferenz zwischen einmaligem und stetigem Verbindungsaufbau. Ab einer
Paketgröße von ca. 500kB weichen die Differenzwerte teilweise stark vom jeweiligen
Seite 135
Mittelwert ab. Die Analyse des Speicherbedarfes zeigt, dass eine BEEP-Integration in die
Kommunikationsschicht der Komponenten in lokalen Umgebungen nicht zielführend ist.
Zur lokalen Kommunikation sollten andere Technologien eingesetzt werden.
Man sieht jedoch anhand der logarithmischen Skala, dass ab ca. 50kB die Zeit für die
Datenübertragung annähernd linear steigt. D.h. der Zeitaufwand für die Authentifizierung
und dem Austausch der BEEP eigenen Protokollparameter sind ab diesem Wert
vernachlässigbar.
Können mehrere Datenpakete in einer Session übertragen werden, ist die Zeit des
Verbindungsaufbaues vernachlässigbar. Die nun verbleibende Restzeit wird zum
Austausch der BEEP-Parameter bei der Initialisierung der Sockets beim Schreib- und
Lesevorgang verbraucht. In diesem Fall ist eine annähernde Linearisierung im
Zeitbereich schon bei kleinen Datenpaketen gegeben. Dies gilt für alle Testszenarien in
den diversen Benchmark Tests.
Der dritte Test wurde auf ähnliche Weise durchgeführt. Der Unterschied zum ersten
bzw. zweiten Test ist, dass der BEEP-Deamon auf einem eigenen Rechner (PC3) läuft
und der Client am Rechner-PC2. Somit nehmen sich Client und Server keine Ressourcen
weg und können unabhängig voneinander die Verbindungen und die Ressourcen nützen.
Der sich ergebene Vorteil wirkt sich insbesondere bei der Übertragung von großen
Datenpaketen aus. Die beiden Fälle mit Authentifizierung wurden hier in diesem Test
nicht mehr berücksichtigt.
Size
bytes
1k
2k
5k
10k
20k
50k
100k
200k
500k
1M
2M
5M
N-N-1
ms
3
6
12
43
33
96
158
303
670
1280
2531
6490
N-TLS-1
ms
3
6
15
37
40
112
202
454
883
1693
3350
7982
N-N-X
ms
871
861
821
831
861
951
1012
1221
1589
2107
3623
7957
N-TLS-X
ms
1314
1386
1261
1352
1332
1472
1541
1659
2151
2860
4427
9153
Tabelle 8.2: Benchmark-Test BEEP ECHO-Profil, remote (Client-PC2, Deamon-PC3)
Aus den Kennwerten für kleine Datenpakete laut Tabelle 8.2, kann man erkennen,
dass das BEEP Protokoll auch in einer Netzwerkumgebung sehr effizient arbeitet. Nimmt
man als Vergleich die Kennwerte von xFIND in einer verteilten Umgebung her, kann
man hier kaum einen Unterschied zur lokalen Anwendung erkennen. Der
Kennlinienverlauf ist hier noch linearer ausgeprägt, als in der lokalen Testumgebung.
Seite 136
Kapitel 8 - Analyse des Protokolls BEEP
Benchmark: Beep Echo; Server/Client über Netzwerk verbunden
N-TLS-1
N-N-1
N-TLS-X
N-N-X
10000
1000
Z e it in m s
100
10
1
1k
2k
5k
10k
20k
50k
100k
200k
500k
1M
2M
5M
übertragene Bytes
Abbildung 8.6: Kennlinien für Benchmark-Test BEEP ECHO-Profil, remote (Client-PC2,
Deamon-PC3)
Wird aber Transportsicherheit gefordert, ist auch hier mit erheblich schlechteren
Antwortzeiten122 schon bei sehr kleinen Datenmengen zu rechnen. Interessant ist jedoch,
wie auch schon in der lokalen Testumgebung ersichtlich, die annähernd gleich bleibende
Antwortzeit von Datenpaketen bis ca. 100kB.
8.4.
xFIND Objekte in BEEP serialisieren
Um xFIND Objekte mit BEEP übertragen zu können, müssen diese entsprechend
serialisiert werden. Man kann hierzu den Stream-basierten Ansatz wie er in Abschnitt 7.4
beschrieben wurde aber nur zum Teil einsetzen. Es ist darauf zu achten, dass nur die
Datenpakete selbst serialisiert werden. D.h. Kommunikationselemente wie Server-Ticket,
Service-Request, Data-Header und Data-Footer sind hier nicht mehr zu berücksichtigen.
xFIND serialisiert, wie bereits beschrieben, vier Basis-Datentypen. QCF-Objekte,
Gatherer-Datenpakete (SOIF-Format), Indexer-Datenpakete und die Daten-Pakete des
Brokers müssen auf die vier Basis-Typen abgebildet werden. Binäre Daten wie Bilder etc.
werden als reiner Byte-Stream behandelt.
BEEP benötigt als Datentyp für den Message Payload einen String. Dieser wird
standardmäßig UTF-8 codiert. Zusätzlich kann für den Mime-Header der Content-Type
und das Transfer-Encoding angegeben werden. Im Falle der einfachen Serialisierung auf
String-Basis wird der Default Mime-Header erzeugt, „application/octet-stream“. Als
Transfer-Encoding wird als Defaultwert „binary“ festgelegt. Für den einfachsten Fall, der
Übertragung von binären Daten, ist diese Möglichkeit passend geeignet.
Im Falle von Suchanfragen von Broker zu Indexer oder Indexer zu Gatherer würde
diese Möglichkeit ausreichen. Ebenso könnten die entsprechenden Antworten von
Indexer oder Gatherer mittels byte-Stream übertragen werden. Die notwendige
Technologie, um ein QCF-Objekt in einen byte-Stream umzuwandeln und ein QCFObjekt aus einem byte-Stream zu generieren, existiert bereits.
122
Zeit zwischen Request-Beginn und Response-Ende.
Seite 137
Eine andere Möglichkeit wäre es, die QCF-Objekte in eine XML-Struktur abzubilden.
Die dafür notwendige Abstraktion bzw. hierarchische Gliederung ist bei QCF-Keys
bereits gegeben. D.h. es sollte recht einfach möglich sein, aus dem derzeitigen Textbasierten QCF-Format ein gleichwertiges XML-basiertes Format zu generieren. Dies
bringt den Vorteil der einfachen Erweiterbarkeit. Zusätzlich sind XML-basierte Ansätze
sowohl Human- als auch Machine-Readable. Zusätzlich sollte neben der Umwandlung
der QCF-Syntax in eine XML-Notation ein eigenes QCF-Profil erstellt werden. Die
Validierung kann über eine geeignete DTD erfolgen.
Denkbar ist aber auch ein anderer Ansatz. Nachdem innerhalb der xFIND-Module
Datenpakete über Suchanfragen und entsprechenden Antworten ausgetauscht werden, ist
auch an die Möglichkeit zur Unterstützung von SOAP oder XML-RPC zu denken. Diese
beiden Möglichkeiten vereinen Datentransport und Funktionalität. In QCF sind neben
reinen Daten-Keys vor allem viele verschiedene Funktionale-Keys definiert. Eine
Abbildung der Funktionalität auf XML-RPC und des Datenbereiches auf SOAP wäre
eine neue interessante Möglichkeit, um auch die Anbindung an Fremdsysteme zu
erleichtern. Dieser Schritt ist jedoch mit enormem Aufwand verbunden, da doch
sämtliche internen funktionalen Einheiten mit den QCF-Objekten arbeiten.
8.5.
BEEP im Vergleich mit der xFIND-Kommunikationsschicht
Wird BEEP in der Kommunikationsschicht eingesetzt muss man sich im Klaren sein,
dass dadurch mehr Overhead beim Verbindungsaufbau entsteht. Der recht einfache
Aufbau der xFIND-Kommunikation mit den fünf verschiedenen Bereichen Server-Ticket,
Service-Request, Data Header, Data und Data-Footer ist auf jeden Fall performanter als
der BEEP-Ansatz. Dies zeigt der unmittelbare Vergleich bezüglich der Datenmengen, die
beim Verbindungsaufbau ausgetauscht werden.
Für einen Vergleich der Datenmengen beim Kommunikationsaufbau wurde zwischen
Client und Server ein „Sniffer“ quasi als Proxy dazwischen geschaltet. Die Auswertung
der eingehenden und ausgehenden Daten decken sich mit den Erklärungen aus der
technischen Analyse von xFIND in Abschnitt 7.5 und Abschnitt 7.6 bzw. BEEP aus
Abschnitt 8.1. Es wird deshalb an dieser Stelle explizit darauf verzichtet, diese
Ergebnisse entsprechend dokumentarisch anzuführen.
Um die Echtheit der Daten gewährleisten zu können, oder verschiedene Angriffe oder
Attacken abwehren zu können, ist es unumgänglich mehr Energie in die Entwicklung von
Sicherheitsvorkehrungen zu investieren. Insbesondere im Punkt Sicherheit bietet xFIND
im derzeitigen Stand wenige bis keine Lösungen an. Allein schon aufgrund des verteilten
Ansatzes der xFIND-Module wird Sicherheit immer wichtiger. Im BEEP
Architekturkonzept ist die Authentifikation und/oder Transportsicherheit bereits fixer
Bestandteil und kann wahlweise durch die Aktivierung über diverse Profile eingesetzt
werden.
Ziel von xFIND ist es, insbesondere die Gatherer lokal bei den Informations-Quellen
zu installieren. Dadurch kann die Netzwerk-Last verringert werden und eine Vorselektion
der Datenbestände erfolgen. Durch die Vorselektion und einer Vorabanalyse der Daten
kann auch die zu übertragene Datenmenge verringert werden. Welche Vorteile und
Nachteile dies bringt, zeigt der Vergleich der Kennwerte des Datendurchsatzes von
xFIND und BEEP. Die Kennwerte wurden aus den jeweiligen Benchmark-Tests von
Abschnitt 7.6 und 8.2 übernommen und in Tabelle 8.3 einander gegenüber gestellt.
Seite 138
Size
bytes
1k
2k
5k
10k
20k
50k
100k
200k
500k
1M
2M
5M
Kapitel 8 - Analyse des Protokolls BEEP
xFIND
localhost
PC1
ms
5
8
6
8
16
50
116
247
477
789
1359
3581
BEEP
localhost
PC1
ms
27
27
30
32
53
234
378
738
1.337
3.019
5.495
12.625
xFIND
remote
PC2-PC3
ms
299
300
301
301
316
595
703
996
1644
2505
4231
11115
BEEP
remote
PC2-PC3
ms
871
861
821
831
861
951
1012
1221
1589
2107
3623
7957
BEEP
localhost
N-N-1
ms
3
5
8
22
31
202
375
684
1.483
2.770
5.202
12.839
BEEP
remote
N-N-1
ms
3
6
12
43
33
96
158
303
670
1280
2531
6490
Tabelle 8.3: Vergleich des Datendurchsatzes der Kommunikation von xFIND und BEEP
Um xFIND und BEEP direkt miteinander vergleichen zu können, wurde bei BEEP als
Vergleichsspalte die Testvariante N-N-X gewählt. Dies bedeutet, dass bei BEEP die
Verbindung jedes Mal erneut aufgebaut wurde und die Daten ohne Authentifikation und
ohne Transportsicherheit übertragen wurden. Als zusätzliche informative Vergleichswerte
wurden noch die Spalten N-N-1 hinzugefügt.
Tabelle 8.3 zeigt nun die Unterschiede zwischen xFIND und BEEP recht deutlich. In
der Tabelle sind die Tests für die lokalen und verteilten Umgebungen von xFIND und
BEEP jeweils einander gegenüber gestellt. Bei kleinen Datenmengen zeigen sowohl
xFIND als auch BEEP bis ca. 10kB annähernd gleichbleibende Werte. Aufgrund des
größeren Handshake Bedarfes von BEEP, steigt bei größeren Datenmengen auch der
Kommunikationsaufwand. Interessant ist, dass im verteilten Prinzip bei größeren Werten
in xFIND zunehmend schlechtere Werte ermittelt wurden. Die Übertragungszeiten von
BEEP bleiben hingegen annähernd proportional zur Datenmenge.
Wird BEEP allerdings im Modus N-N-1 betrieben, d.h. es wird nur eine Verbindung
für viele Transaktionen aufgebaut (One-to-Many), skaliert BEEP hingegen schon bei
kleinen Datenmengen annähernd linear. Im Vergleich zur verteilten Umgebung weist
BEEP durchaus erstaunliche Werte auf. Hier zeigt sich eindeutig die Effizienz von BEEP
in einer verteilten Umgebung. Der Verbindungs-Handshake muss nur einmal
durchgeführt werden.
In Abschnitt 7.6 wurde kurz der Profiling Test erwähnt. Mittels Profiling kann auf
einfache Art und Weise das Zeitverhalten von Klassen bzw. Methoden und der
Speicherbedarf von Datenstrukturen ermittelt werden. Java bietet hiefür bereits geeignete
Klassen an. Für die Entwicklungsumgebung „Eclipse“ gibt es ein frei verfügbares
Profiling Plugin123. Dieses Plugin wurde für die folgende Analyse des GesamtSpeicherbedarfes von xFIND und BEEP während der Datenübertragung eingesetzt. Der
Profiling-Test wurde auf der PC1-Architektur (localhost) durchgeführt.
123
Eclipse Profiler Plugin: Version 0.5.30; http://eclipsecolorer.sourceforge.net; CPL License version 1.0
Seite 139
Abbildung 8.7: Profiling-Test, Speicherauslastung von xFIND (links) und BEEP (rechts)
Die beiden Speicherabbildungen in Abbildung 8.7 weisen auch hier deutliche
Unterschiede auf. Insbesondere bei größeren Datenmengen verfügt BEEP über eine
bessere Ausnutzung des Arbeitsspeichers. Zusätzlich wurde in Abbildung 8.8 der
Speicherbedarf und die CPU Belastung von xFIND und BEEP im gleichen Testdurchlauf
mit dem Taskmanager von Windows aufgezeichnet. Auch hier ist der größere
Speicherbedarf von xFIND deutlich ersichtlich.
Abbildung 8.8: CPU Belastung und Speicherabbild von Windows Taskmanager für xFIND und
BEEP
Bezüglich der CPU Belastung (obere Kennlinie) gibt es kaum Unterschiede. xFIND
benötigt von Beginn an zwischen 90% und 100% der CPU. BEEP weist zu Beginn eine
ca. 75% CPU-Last auf. Der Speichbedarf (untere Kennlinie) bewegt sich bei xFIND
zwischen 0 und 150 MB. BEEP bleibt bei diesem Test zwischen 0 und 100MB.
Weiters wurden aus der Profiling Analyse der verschiedenen Testdurchlaufe die „CallTrees“ extrahiert. Diese sind gesondert im Anhang C Kapitel 14 ersichtlich und zeigen
schematisch den strukturellen Ablauf des Datentransportes.
Seite 140
8.6.
Kapitel 8 - Analyse des Protokolls BEEP
Schlussbemerkung
BEEP ist ein asynchrones verbindungsorientiertes Protokoll. Daten und Nachrichten
werden XML kodiert und können in Frames zerteilt werden. Dadurch ergibt sich ein
flexibler Datenaustausch. Die Syntax und Semantik der Datenübertragung wird mit
Profilen festgelegt. Diese sind ebenfalls in XML Notation erstellt und können bei Bedarf
selbst erstellt werden. Entsprechende Profile für SOAP und XML-RPC existieren bereits.
Zusätzlich sind im BEEP-Core Standard-Profile für die Transportsicherheit und die
Authentifikation enthalten. BEEP ermöglicht auch die mehrfache Ausnutzung einer
Verbindung durch Kanal-multiplexen.
Die Effizienz von BEEP gegenüber der xFIND Kommunikationsschicht ist im
Allgemeinen schlechter. Negativ wirkt sich dieser Unterschied jedoch nur bei sehr
kleinen Datenpaketen und oftmaligem Verbindungsaufbau aus. Aber die Vorteile des
modulbasierten Profil Ansatzes von BEEP sollten an dieser Stelle mehr Gewicht haben.
Zumal man die Grundeigenschaften von BEEP wie Asynchronität, einen bidirektionalen
Verbindungsaufbau und die Mehrfachausnutzung von Verbindungen gezielt einsetzen
kann. Der Aufwand zum Auf- und Abbauen einer BEEP-Verbindung ist konstant (gleiche
Profile vorausgesetzt). Dadurch steigt die Effizienz von BEEP, wenn auf eine Anfrage
viele Ergebnisse geschickt werden oder die Datenmenge steigt.
Speziell für den verteilten Architektur-Ansatz von xFIND bietet der flexible Aufbau
von BEEP mit den optionalen Erweiterungen und des besseren Datendurchsatzes neue
interessante Möglichkeiten. In BEEP sind Sicherheitsaspekte und der gleichberechtigte
Datenaustausch bereits fixer Bestandteil. BEEP wurde als Anwendungsprotokoll für den
Datentransport entwickelt und ist auch entsprechend als solches einzusetzen.
Seite 141
Kapitel 9
9.
Analyse des JXTA Protokoll-Frameworks
Neben der Standardisierung und Verbesserung der Datenübertragung in xFIND, ist zu
Beginn dieser Arbeit, als weiteres Ziel eine einfachere Kommunikation bzw. eine bessere
Verwaltung der xFIND Module festgelegt worden. Im Untersuchungsteil dieser Arbeit
wurden schon bei der Analyse von Peer-to-Peer Netzwerken dessen Vorteile und
Nachteile erarbeitet. Speziell moderne Ansätze in der verteilten Suche bieten im Bereich
der Verwaltung von Ressourcen, neue und interessante Möglichkeiten.
Die Problembereiche wie z.B. Inkompatibilität, schlechte Erweiterbarkeit,
hervorgerufen aufgrund des proprietären Ansatzes vieler Produkte, führten zur
Entwicklung eines generischen Protokoll Frameworks. Mit JXTA soll nun der Versuch
unternommen werden, im Bereich P2P quasi standardisiert die Suche nach Diensten oder
Ressourcen zu bewerkstelligen. Zusätzlich soll über diese Methoden die Verwaltung der
Peer und Peer Gruppen automatisiert erfolgen.
Aufgrund dieser beiden grundlegenden Eigenschaften von JXTA, wird diese
Technologie nun näher untersucht. Es wird bei der Untersuchung besonderen Wert auf
technische Details gelegt, da diese unumgänglich für die Erstellung von
Verbesserungsvorschlägen zur Erweiterung des xFIND Systems sind.
JXTA ist ein generisches Protokoll-Framework, dass in Peer-to-Peer Netzwerken
eingesetzt werden kann. Die abstrahierte Kommunikationsschicht ist plattform- und
programmiersprachen- unabhängig. Aus diesem Grund können sich Entwickler mehr auf
die Kernfunktionalität von verteilten Anwendungen konzentrieren. JXTA arbeitet
nachrichtenorientiert. Der Datenaustausch erfolgt asynchron und folgt einer XMLformatierten Syntax. Der Nachrichteninhalt mittels MIME-Type Format spezifiziert kann
textorientiert sein oder als binärer Datenstrom Base64 codiert werden. Damit ist die
Vermittlung der gängigsten Daten-Typen mit JXTA möglich.
JXTA Protokolle und Dienste sind nicht standardisiert. Aufgrund des „freien“
Architekturansatzes ist es jedoch ohne größere Probleme möglich, Dienste wie z.B.
WSDL (siehe Abschnitt 4.8.2) oder PEEP (siehe Abschnitt 8) in der Transportschicht zu
unterstützen. Die JXTA Architektur wurde bereits in Abschnitt 6.3 kurz beschrieben.
Bevor aber näher auf die technischen Details eingegangen wird, sollen die
interessantesten Merkmale von JXTA nochmals kurz zusammengefasst werden.
JXTA ist grob in drei Schichten unterteilt. Auf dem JXTA-Core setzen die JXTAServices auf und auf diesen wiederum die JXTA-Anwendungen. Der JXTA-Core bildet
mit sechs Protokollen die Basis des Frameworks und deckt die grundlegendsten
Mechanismen wie Such- und Transportfunktionen sowie Sicherheitsrichtlinien ab. Die
JXTA-Dienste bieten erweiterte Funktionalitäten wie z.B. die Authentifizierung, das
Erstellen von Peers und Peer Groups oder Index- und Suchdienste an. Eine JXTA
Seite 142
Kapitel 9 - Analyse des JXTA Protokoll-Frameworks
Anwendung wie z.B. Filesharing, Chatsystem oder verteilte Suchsysteme, setzen direkt
auf diese Services auf.
In der JXTA Community124 existieren mittlerweile mehr als 140 verschiedene
Projekte, die sechs differenzierten Bereichen zugeordnet sind. Ca. je ein Fünftel der
Projekte sind im Applikationsbereich und im Servicebereich angesiedelt. Interessante
Service-Projekte sind unter anderem „do“ (distributed objects), „jxta-wire“ (Provide a set
of tools to allow many to many JXTA pipes), „jxtaspaces“ (A Distributed Shared
Memory Service for JXTA), „networkservices“ (Integrate Web Services Concepts into
JXTA), „soap“ (JXTA SOAP bindings), „xmlrpc“ (XML-RPC for JXTA) und „search“
(Distributed search service for JXTA and Web content and services).
Das JXTA-Search Projekt setzt den generischen Gedanken von JXTA fort, indem die
Grundfunktionalität der verteilten Suche als JXTA-Service implementiert wurde.
Suchanfragen und Antworten in JXTA-Search werden ebenfalls mit einem eigenen XMLbasiertem Protokoll realisiert. Das Query Routing Protocol (QRP) spezifiziert den
Nachrichtentyp, das Nachrichtenformat und die Message-Rounting Regeln, die von den
JXTA-Search Peers verarbeitet werden müssen.
9.1.
Beschreibung der JXTA-Core Protokolle
Wie bereits einleitend erwähnt, besteht der JXTA-Core aus sechs XML-notierten
Protokollen. Mit Hilfe dieser sechs Basis Protokolle versucht JXTA quasi „standardisiert“
Peers und Peer Gruppen zu verwalten, Ressourcen zu finden und zur Verfügung zu
stellen, sowie die interne Kommunikation und Überwachung bereitzustellen. Die JXTAProtokolle arbeiten unidirektional und asynchron. Die Protokolle sind „Semiunabhängig“. Dies bedeutet, dass ein Peer nicht alle Protokolle unterstützen muss, um
bestimmte Aufgaben erledigen zu können. Zwar setzten einige Protokolle andere voraus,
aber es ist dennoch möglich diverse Protokollschichten gegebenenfalls selbst zu
implementieren.
Die Protokolle sind in einem Protokoll-Stack hierarchisch angeordnet. So gibt es
sowohl auf der lokalen Seite eines Peers, als auch auf der Remote-Seite eines Peers
dieselbe Hierarchie. Im Unterschied zum ISO/OSI Schichtenmodell, sind die Schichten in
dieser Hierarchie nicht abstrahiert, sondern sie erfüllen unteschiedliche Aufgaben. Dies
zeigt auch Abbildung 9.1 recht deutlich. Aufgrund der Semi-Unabhängigkeit ist eine
Spezialisierung diverser Peers möglich. D.h. diese Peers übernehmen dann nur
spezifische Aufgaben. Dies könnte z.B. ein Query-Router oder ein Rendezvous Peer sein.
124
JXTA: http://www.jxta.org/servlets/ProjectList
Seite 143
Abbildung 9.1: JXTA Protokoll Stack [Wilson 2002]
Die Services und Protokolle werden anhand von so genannten „Advertisements“
beschrieben. Advertisements sind strukturierte Metadaten, die die Eigenschaften und
Funktionen der verschiedenen Ressourcen definieren. Wird ein Peer oder Dienst gesucht,
erfolgt dies implizit nach der Suche dieser Advertisements. Da die Notation der
Beschreibung wiederum XML ist, können recht einfach neue Advertisements erstellt
werden. Damit ist auch ein sprachneutrales, geräteunabhängiges und leicht
interpretierbares Austauschformat gegeben.
Aus dem JXTA Protokoll Stack in Abbildung 9.1 sind auch die sechs Protokolle und
ihre diversen Abhängigkeiten gut ersichtlich. Diese wurden in Abschnitt 5.10 schon
beschrieben. Zusammengefasst sind die Aufgaben der jeweiligen Protokolle:
1. Peer Discovery Protokoll (PDP): Beschreibt wie Peers, Peer Groups, Services oder
andere Ressourcen gefunden bzw. veröffentlicht werden. Allgemeiner formuliert
kann mit dem PDP alles veröffentlicht bzw. gefunden werden, was anhand eines
Advertisement Dokumentes beschrieben wurde.
2. Peer Information Protokoll (PIP): Mit dem PIP können Statusinformationen, wie
z.B. der Datendurchsatz oder angebotene Dienste anderer Peers erfragt werden.
Damit sind Überwachungsfunktionen im verteilten Netzwerk möglich.
3. Pipe Binding Protokoll (PBP): Beschreibt wie virtuelle Kommunikationskanäle
(Pipes) zwischen Peers erzeugt werden können.
4. Peer Resolver Protokoll (PRP): Beschreibt den Nachrichten-Austausch mittels
Query-Messages. Jede Ressource, die mit dem PRP veröffentlich wurde, kann so
auch wieder mittels PRP gefunden werden.
Seite 144
Kapitel 9 - Analyse des JXTA Protokoll-Frameworks
5. Rendezvous Protokoll (RVP): Legt fest, wie Nachrichten an andere Peers in
unterschiedlichen Peer Groups vermittelt werden können. Dies kann z.B. auch das
Überbrücken von Firewalls sein.
6. Endpoint Routing Protokoll (ERP): Mit dem ERP wird das Auffinden von
Transportwegen zwischen zwei Ressourcen ermöglicht.
Die nun folgende technische Beschreibung der einzelnen Protokolle ist auszugsweise
der JXTA Protokoll Spezifikation v2.0 [JXTA v2.0] entnommen. Die Definitionen der
Protokolle basieren auf XML-Schema Definitionen. Da dieses Format einfach lesbar ist,
wird keine detaillierte Erklärung zu den jeweiligen Keys und Properties gegeben. Diese
können bei Bedarf in der Spezifikation nachgelesen werden. Ein weiterer Vorteil der
XML-Schema Definitionen ist, dass diese direkt zur Validierung der Nachrichten
herangezogen werden können.
9.1.1.
Peer Discovery Protokoll (PDP)
Im JXTA Stack ist ersichtlich, dass das PDP zum Veröffentlichen und Suchen der
Advertisements das PRP einsetzt. Über das PRP werden Queries abgesetzt und auch
Ergebnisse empfangen. Wenn nach Advertisements in JXTA gesucht wird, muss über
PDP eine Discovery Query Message abgesetzt werden. Um ein Peer bzw. eine Peer
Gruppe finden zu können, schickt ein Peer eine Discovery Query Message an alle ihm
lokal bekannten Peers und Rendezvous Peers. Ein „normaler“ Peer wertet die Anfrage
aus, indem er in seinem lokalen Cache nach dem Advertisement sucht. Ist das gesuchte
Advertisement lokal gespeichert, antwortet der Peer mit einer Discovery Response
Message direkt dem Anfrage Peer. Rendezvous Peers hingegen benachrichtigen
zusätzlich alle bei ihm registrierten Peers, die dann wiederum ihrerseits direkt dem
Anfrage Peer antworten. Beim PDP handelt es sich kurz gesagt um einen
Suchmechanismus, der Informationen über das P2P Netzwerk liefert. Listing 9.1 zeigt
den Aufbau der Discovery Query Message anhand des XML Discovery Query Schema.
<xs:element name="DiscoveryQuery" type="jxta:DiscoveryQuery"/>
<xsd:simpleType name="DiscoveryQueryType">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="0"/> <!-- peer advertisements -->
<xsd:enumeration value="1"/> <!-- group advertisements -->
<xsd:enumeration value="2"/> <!-- any advertisements -->
</xsd:restriction>
</xsd:simpleType>
<xs:complexType name="DiscoveryQuery">
<xs:sequence>
<xs:element name="Type" type="jxta:DiscoveryQueryType"/>
<xs:element name="Threshold" type="xs:unsignedInt" minOccurs="0"/>
<xs:element name="Attr" type="xs:string" minOccurs="0"/>
<xs:element name="Value" type="xs:string" minOccurs="0"/>
<xs:element name="PeerAdv" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
Listing 9.1: JXTA Discovery Query Schema [JXTA v2.0]
In Listing 9.2 ist die Discovery Response Message anhand des XML Discovery
Response Schema beschrieben. Discovery Response Message sind Antworten auf
Discovery Query Messages.
Seite 145
<xs:element name="DiscoveryResponse" type="jxta:DiscoveryResponse"/>
<xs:complexType name="DiscoveryResponse">
<xs:sequence>
<xs:element name="Type" type="jxta:DiscoveryQueryType"/>
<xs:element name="Count" type="xs:unsignedInt" minOccurs="0"/>
<xs:element name="Attr" type="xs:string" minOccurs="0"/>
<xs:element name="Value" type="xs:string" minOccurs="0"/>
<xs:element name="PeerAdv" minOccurs="0">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="Expiration" type="xs:unsignedLong"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:entry>
<xs:element name="Response" maxOccurs="unbounded">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="Expiration" type="xs:unsignedLong"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:entry>
</xs:sequence>
</xs:complexType>
Listing 9.2: JXTA Discovery Response Schema [JXTA v2.0]
Das PDP garantiert nicht, dass für jede Anfrage eine Antwort zu erwarten ist, da nicht
zwingend auf jede Anfrage geantwortet werden muss. Auch können auf eine Antwort
beliebig viele Antworten generiert werden. Beim Eintreffen der Antworten ist darauf zu
achten, dass die Kommunikation asynchron erfolgt und deshalb keine definierte
Reihenfolge vorliegt. Nachdem die Discovery Query Messages im Broadcast-Prinzip
versand werden, können auch redundante Antworten auftreten.
Um Ressourcen mittels Advertisements publizieren zu können, wird das Versenden
von Discovery Response Messages, ohne eine Anfrage erhalten zu haben, ermöglicht.
PDP wird von JXTA auch als Service bereitgestellt. Das eigentliche Versenden der
Messages wird vom Resolver Service durchgeführt.
9.1.2.
Information Protokoll (PIP)
Das PIP dient, wie einleitend erwähnt zum Übertragen von Statusinformationen. Diese
Informationen werden mittels PIP Response Message an den Initiator aufgrund einer PIP
Query Message übertragen. Das Protokoll ist optional und dient lediglich der
Überwachung, bzw. es können aufgrund dieser Informationen (Traffic Load, Uptime,
Current Connection, …) Alternativhandlungen abgeleitet werden. Erhält ein Peer eine
PIP Query Message, überprüft dieser die Zieladresse (Peer-ID). Stimmt diese mit der
eigenen Peer-ID überein (Peer ist der Empfänger der PIP Query Message), antwortet der
Peer mit einer PIP Response Message. Peers müssen auf eine PIP Query Message keine
Antwort erzeugen. Die Anfrage kann zusätzlich auch als Broadcast erfolgen.
Entsprechend können auf eine Anfrage auch mehrere Responses generiert werden. Wenn
keine speziellen Request-Keys bei der Anfrage angegeben sind, antwortet ein Peer mit
einem vordefinierten Set an Statusinformationen. In Listing 9.3 ist die Syntax einer PIP
Query Message anhand einer XML-Schema Definition beschrieben.
Seite 146
Kapitel 9 - Analyse des JXTA Protokoll-Frameworks
<xs:element name="PeerInfoQueryMessage" type="jxta:PeerInfoQueryMessage"/>
<xs:complexType name="PeerInfoQueryMessage">
<xs:sequence>
<xs:element name="sourcePid" type="jxta:JXTAID"/>
<xs:element name="targetPid" type="jxta:JXTAID"/>
<xs:element name="request" type="xs:anyType" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
Listing 9.3: JXTA PIP Query Message Schema [JXTA v2.0]
Die PIP Response Message beschreibt spezifische Informationen über den aktuellen
Status eines Peers. Dazu gehören: Uptime, die Anzahl von eingehenden und ausgehenden
Messages, der Zeitpunkt der letzten erhaltenen Nachricht und der Zeitpunkt der letzten
übertragenen Nachricht. In Listing 9.4 ist die Syntax der PIP Response Message
ersichtlich.
<xs:element name="PeerInfoResponse" type="jxta:PeerInfoResponse"/>
<xs:complexType name="PeerInfoResponseMessage">
<xs:sequence>
<xs:element name="sourcePid" type="jxta:JXTAID"/>
<xs:element name="targetPid" type="jxta:JXTAID"/>
<xs:element name="uptime" type="xs:unsignedLong" minOccurs="0"/>
<xs:element name="timestamp" type="xs:unsignedLong" minOccurs="0"/>
<xs:element name="response" type="xs:anyType" minOccurs="0"/>
<xs:element name="traffic" type="jxta:piptraffic" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="piptraffic">
<xs:sequence>
<xs:element
name="lastIncomingMessageAt"
type="xs:unsignedLong"
minOccurs="0"/>
<xs:element
name="lastOutgoingMessageAt"
type="xs:unsignedLong"
minOccurs="0"/>
<xs:element name="in" type="jxta:piptrafficinfo" minOccurs="0"/>
<xs:element name="out" type="jxta:piptrafficinfo" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="piptrafficinfo">
<xs:sequence>
<xs:element name="transport" maxOccurs="unbounded">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:unsignedLong">
<xs:attribute name="Expiration" type="xs:anyURI"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
Listing 9.4: JXTA PIP Response Message Schema [JXTA v2.0]
9.1.3.
Pipe Binding Protokoll (PBP)
Das PBP wird zur Kommunikation zwischen verschiedenen Peers verwendet. Es
arbeitet wie alle anderen JXTA Protokolle asynchron und verwendet zur
Datenübertragung JXTA Pipes. Die JXTA Pipes werden auch als virtuelle Verbindungen
bezeichnet. Pipes haben lediglich die Aufgabe, zwei Endpunkte (Peers) mit einander zu
verbinden. Das PBP beschreibt wie eine Pipe an einen physikalischen Kanalendpunkt
gebunden werden kann. Das PIP kümmert sich nicht um den Datentransport. Dafür
bedient es sich am PRP Service. Beschrieben wird eine Pipe mit dem PipeAdvertisement. Eine Pipe kann auch als abstrakte Message Queue angesehen werden.
Seite 147
Operationen wie Create, Bind, Unbind, Send und Recieve gelten als Basisfunktionen. Zur
Beschreibung der Syntax des PIP wird als erstes in Listing 9.5 das Pipe Advertisement
Schema vorgestellt. Dieses wird benötigt, um eine Pipe zu erzeugen.
Im JXTA-Core gibt es zurzeit drei verschiedene Möglichkeiten Pipes zu erzeugen und
einzusetzen. JXTA-Unicast ist eine Eins-zu-Eins Verbindung ohne jegliche
Sicherheitsmerkmale. JXTA-Unicast-Secure stellt Transportsicherheit mittels TLS zur
Verfügung. JXTA-Propagate sind Eins-zu-N Verbindungen.
Um Nachrichten über JXTA-Pipes zu übermitteln, kann ein Peer eine Pipe für den
Leseprozess (Pipe-Advertisement) anfordern. Diese wird als Input-Pipe bezeichnet. Das
Erzeugen einer Pipe für den Schreibprozess wird als Output-Pipe (Pipe-Advertisement)
bezeichnet. Stimmen diese Pipe-Advertisements überein (Kommunikation erfolgt über
Pipe Binding Query Message), kann die Verbindung zwischen zwei Peers hergestellt
werden. Unter anderem können etwa mehrere Peers Input-Pipes desselben PipeAdvertisement erzeugen und so gleichzeitig von einer Output-Pipe lesen (propagatePipe). Im JXTA-Core sind zur Zeit keine bidirektionalen, synchronen oder streaming
Pipes integriert. Hierzu gibt es aber eine Reihe von Projekten, die bei Bedarf
entsprechende Lösungen anbieten.
<xs:element name="PipeAdvertisment" type="jxta:PipeAdvertisment"/>
<xs:complexType name="PipeAdvertisement">
<xs:sequence>
<xs:element name="Id" type="jxta:JXTAID"/>
<xs:element name="Type" type="xs:string"/>
<xs:element name="Name" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
Listing 9.5: JXTA Pipe Advertisement Schema [JXTA v2.0]
Um eine Verbindung über PIP herstellen zu können sind, wiederum zwei MessageTypen notwendig. Diese werden zusammengefasst als Pipe Resolver Message bezeichnet.
Die Unterscheidung zeigt Listing 9.6, indem im ersten Teil der XML-Schema Definition
der PipeResolverMsgType definiert wird.
<xs:element name="jxta:PipeResolver" type="jxta:PipeResolver"/>
<xs:simpleType name="PipeResolverMsgType">
<xs:restriction base="xs:string"> <!-- QUERY -->
<xs:enumeration value="Query"/> <!-- ANSWER -->
<xs:enumeration value="Answer"/>
</xs:restriction>
</xs:simpleType>
<xs:complexType
<xs:sequence>
<xs:element
<xs:element
<xs:element
name="PipeResolver">
name="MsgType" type="jxta:PipeResolverMsgType"/>
name="PipeId" type="jxta:JXTAID"/>
name="Type" type="xs:string"/>
<!-- used in the query -->
<xs:element name="Cached" type="xs:boolean" default="true" minOccurs="0"/>
<xs:element name="Peer" type="jxta:JXTAID" minOccurs="0"/>
<!-- used in the answer -->
<xs:element name="Found" type="xs:boolean"/>
<!-- This should refer to a peer adv, but is instead a whole doc -->
<xs:element name="PeerAdv" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
Listing 9.6: JXTA Pipe Resolver Message Schema [JXTA v2.0]
Seite 148
9.1.4.
Kapitel 9 - Analyse des JXTA Protokoll-Frameworks
Peer Resolver Protokoll (PRP)
Das PRP ist zuständig für das Verteilen von generischen Messages an einen oder
mehrere Message-Handler. Weiters muss das PRP eingehende Nachrichten identifizieren.
Eine Message ist aufgrund seiner Semantik mit bestimmten Handlern verknüpft und nicht
wie erwartet mit bestimmten Peers. Diese generieren auch die Antwort auf diverse Query
Messages.
Wiederum ist es möglich, dass mehrere Handler dieselben Nachrichten lesen können.
Um Nachrichten versenden zu können setzt, PRP auf das RVP auf. Mit Hilfe des RVP
wird eine Nachricht an alle Peers einer Gruppe verteilt. Wie auch schon bei den vier
Protokollen zuvor, besteht das PRP aus einer Query Message und einer Response
Message. Diese sind in Listing 9.7 und Listing 9.8 anhand ihrer jeweiligen XML-Schema
Definitionen beschrieben.
Die Resolver Query Message wird eingesetzt, um eine Anfrage an bestimmte
vorgegebene Handler125 zu senden. Die Suchanfrage wird als String serialisiert und von
diversen Handlern ausgewertet. Jede Query besitzt eine eindeutige Id, um auch die
Antworten entsprechend einer Anfrage zuordnen zu können. Beim Verteilungsprozess
wird eine Resolver Query Message an alle lokal bekannten Peers und Rendezvous Peers
geschickt. Ähnlich zum PDP suchen „normale“ Peers im lokalen Cache nach geeigneten
Handlern. Rendezvous Peers propagieren die Message zusätzlich zu allen registrierten
Peers. Jeder Peer, der einen geeigneten Handler im lokalen Cache findet, antwortet mit
einer PRP Response Message.
<xs:element name="ResolverQuery" type="jxta:ResolverQuery"/>
<xs:complexType name="ResolverQuery">
<xs:all>
<xs:element ref="jxta:Cred" minOccurs="0"/>
<xs:element name="SrcPeerID" type="jxta:JXTAID"/>
<xs:element name="HandlerName" type="xs:string"/>
<xs:element name="QueryID" type="xs:string"/>
<xs:element name="HC" type="xs:unsignedInt"/>
<xs:element name="Query" type="xs:anyType"/>
</xs:all>
</xs:complexType>
Listing 9.7: JXTA Resolver Query Message Schema [JXTA v2.0]
<xs:element name="ResolverResponse" type="ResolverResponse"/>
<xs:complexType name="ResolverResponse">
<xs:all>
<xs:element ref="jxta:Cred" minOccurs="0"/>
<xs:element name="HandlerName" type="xs:string"/>
<xs:element name="QueryID" type="xs:string"/>
<xs:element name="Response" type="xs:anyType"/>
</xs:all>
</xs:complexType>
Listing 9.8: JXTA Resolver Response Schema [JXTA v2.0]
Auch beim PRP ist eine Antwort auf eine Anfrage nicht zwingend erforderlich.
Handler müssen die Suchanfrage126 auch verstehen können. Wenn ein Handler mit einer
Suchanfrage nichts anfangen kann, wird er auch keine Antwort erzeugen. Doch ein
mögliches Szenario wäre es, als Problemlösung dem Initiator ein Beispielformat für eine
gültige Suchanfrage zu übermitteln. Dies impliziert einen Lerneffekt der Handler um
gültige Antworten generieren zu können.
125
126
Ein Handler kann für einen oder mehrere Peers zuständig sein, bzw. von diesen verwendet werden.
Suchanfrage in PRP: Ist ein serialisierter String, der auch in einem eigene Definitions-Format erstellt sein kann.
Seite 149
9.1.5.
Rendezvous Protokoll (RVP)
Mit dem RVP ist es möglich, Peers aus anderen Peer Groups anzusprechen. Dazu
verwenden Rendezvous Peers Unicast oder Broadcast Rendezvous Propagate Messages
(siehe Listing 9.10). Um Endlosschleifen bzw. nichtdeterministische Suchen vermeiden
zu können, überprüft jeder Rendezvous Peer seine erhaltenen Anfragen. Die Anfragen
sind mit einem Time-to-Life (TTL) Counter ausgestattet, welcher vom Initiator gesetzt
wird. Bei jedem Durchlauf einer Nachricht durch einen Rendezvous Peer, wird der TTL
Counter dieser Nachricht dekrementiert. Ist dieser Counter bei 0 angelangt, wird die
Nachricht verworfen. Rendezvous Nachrichten sind mit einer eindeutigen ID
gekennzeichnet. Damit können Loopback Detection oder ähnliche Kontrollfunktionen
realisiert werden.
Eine Eigenheit des RVP ist es, dass ein Peer beim Verbindungsaufbau erst beim RVP
Dienst „quasi“ um einen Suchauftrag anfragen muss. Dies ist eine Art Handshake Prinzip,
indem der Peer einem RVP Dienst ein Rendezvous Advertisement (Lease Request)
schickt. Erlaubt der RVP Dienst die Anfrage, schickt er dem Initiator Peer einen Lease
Granted Request zurück. Erst dann kann der eigentliche Verbindungsaufbau zu
entfernten Peers erfolgen. Dieser Handshake trägt zur Aufrechterhaltung der
Netzwerkstabilität bei, indem so nicht benötigte Verbindungen wieder geschlossen
werden können.
Der RVP Dienst schreibt dem Initiator Peer auch vor, in welchem Zeitrahmen er eine
Verbindung benutzen darf. Reicht dieser Zeitrahmen nicht aus, muss der Initiator Peer
den Lease vor dem Ablauf erneuern. Der Lease kann sowohl von Seiten des Peers, als
auch vom RVP Dienst abgebrochen werden. Das Rendezvous Advertisement Schema ist
in Listing 9.9 ersichtlich. Das Rendezvous Advertisement beschreibt einen Rendezvous
Peer für eine bestimmte Peer Group. Aufgrund dieser Information können Rendezvous
Peers lokalisiert werden.
<xs:element name="RdvAdvertisement" type="jxta:RdvAdvertisement"/>
<xs:complexType name="RdvAdvertisement">
<xs:sequence>
<xs:element name="Name" type="xs:string" minOccurs="0"/>
<xs:element name="RdvGroupId" type="jxta:JXTAID"/>
<xs:element name="RdvPeerId" type="jxta:JXTAID"/>
</xs:sequence>
</xs:complexType>
Listing 9.9: JXTA Rendezvous Advertisement Schema [JXTA v2.0]
<xs:element name="RendezVousPropagateMessage" type="jxta:RendezVousPropagateMessage"/>
<xs:complexType name="RendezVousPropagateMessage">
<xs:element name="MessageId" type="xs:string"/>
<!-- This should be a constrained subtype -->
<xs:element name="DestSName" type="xs:string"/>
<xs:element name="DestSParam" type="xs:string"/>
<xs:element name="TTL" type="xs:unsignedInt"/>
<xs:element name="Path" type="xs:anyURI" maxOccurs="unbounded"/>
</xs:complexType>
Listing 9.10: JXTA Rendezvous Propagate Message Schema [JXTA v2.0]
9.1.6.
Endpoint Routing Protokoll (ERP)
P2P Netzwerke wie, mit JXTA realisiert, können oft spontan ihre Struktur ändern.
Router-Peers werden zu beliebigen Zeiten dem Netzwerk hinzugefügt, bzw. vom
Netzwerk entfernt. Dies führt zu nicht deterministischen Routing Problemen. Weitere
Probleme stellen Firewalls dar. Diese können zwar von innen nach außen direkt
überbrückt werden, aber nicht umgekehrt, da die Verbindungen unidirektional sind.
Seite 150
Kapitel 9 - Analyse des JXTA Protokoll-Frameworks
Das ERP stellt eine Reihe von Request und Response Messages zur Verfügung, um
das Message Routing zwischen zwei Endpunkten im Netzwerk zu ermöglichen. Wenn ein
Peer eine Verbindung zu einem anderen Endpunkt aufbauen möchte, wird zuerst der
lokale Cache nach einer entsprechenden Route durchsucht. Wenn keine Route vorhanden
ist, sendet das ERP eine Route Query Message (siehe Listing 9.12) an alle benachbarten
(mit dem Peer direkt verbundenen Peers) Router-Peers. Die JXTA Spezifikation erlaubt
dabei die Verwendung verschiedener Transportprotokolle, wie z.B. TCP/IP, UDP, TLS,
HTTP oder BEEP.
Wenn nun ein Router-Peer eine Route zum Endpunkt bei sich lokal im Cache hat,
sendet er diese in Form einer Route Response Message (siehe Listing 9.13) retour zum
Initiator Peer. Die Antwort enthält eine Auflistung aller Routing-Peers, die die
Verbindung vom Initiator-Peer zum Endpunkt herstellen. Findet ein Router-Peer lokal bei
sich keine entsprechende Route zum Endpunkt, verschickt dieser wiederum eine Route
Query Message an seine benachbarten Router-Peers usw. bis entweder eine Route
gefunden wurde oder die Nachricht ungültig wird. Wurde eine passende Route gefunden,
kann die Message anhand der Route Query Message entlang der vorgeschlagenen Route
verschickt werden. Dabei wird jeder Durchlauf einer Nachricht bei Peers in der Nachricht
vermerkt. Mit diesen Informationen kann man Loop-Detection realisieren oder
rücklaufende Nachrichten verwerfen. Zusätzlich sind diese „Marker“ hilfreich bei der
Erstellung diverser Routing Daten.
Das ERP stellt nur einfache Routing Dienste zur Verfügung. Will man intelligentere
Router implementieren, müssen diese in einer höheren Schicht angesiedelt werden. JXTA
stellt Basisdienste für das Erstellen und Verwalten von Routing Daten bereit. Die Routing
Daten werden wiederum als Advertisements ausgetauscht. In Listing 9.11 ist das Route
Advertisement Schema ersichtlich. Wie lange eine Route gültig ist, bestimmt der HopsTo-Life (HTL) Counter. Dieser wird vom Initiator gesetzt.
<xs:element name="APA" type="jxta:APA"/>
<xs:complexType name ="jxta:APA">
<xs:sequence>
<xs:element name="EA" type="jxta:JXTAID" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:element name="RA" type="jxta:RA"/>
<xs:complexType name ="jxta:RA">
<xs:sequence>
<xs:element name="DstPID" type="xs:anyURI"/>
<xs:element ref="jxta:RA"/>
<xs:element name="Hops" minOccurs="0">
<xs:sequence>
<xs:element ref="jxta:APA" maxOccurs="unbounded"/>
</xs:sequence>
</xs:element>
</xs:sequence>
</xs:complexType>
Listing 9.11: JXTA Route Advertisement Schema [JXTA v2.0]
<xs:element name="ERQ" type="jxta:ERQ"/>
<xs:complexType name ="jxta:ERQ">
<xs:sequence>
<xs:element name="Dst" type="jxta:JXTAID"/>
<xs:element name="Src">
<xs:element ref="jxta:RA"/>
</xs:element>
</xs:sequence>
</xs:complexType>
Listing 9.12: JXTA Route Query Message Schema [JXTA v2.0]
Seite 151
<xs:element name="ERR" type="jxta:ERR"/>
<xs:complexType name ="jxta:ERR">
<xs:sequence>
<xs:element name="Dst">
<xs:element ref="jxta:RA"/>
</xs:element>
<xs:element name="Src">
<xs:element ref="jxta:RA"/>
</xs:element>
</xs:sequence>
</xs:complexType>
Listing 9.13: JXTA Route Response Message Schema [JXTA v2.0]
9.2.
Aufbau von JXTA Advertisements
Wie bereits einleitend in diesem Kapitel erwähnt, sind Advertisements strukturierte
Meta-Daten Dokumente. Diese werden von den jeweiligen JXTA Protokollen verwendet,
um verschiedene Ressourcen zu beschreiben. Als Ressource werden z.B. Peers, Peer
Groups, Pipes, Services und andere Typen angesehen. Die Dokument Struktur kann als
Baum abgebildet werden. Die Notation der Struktur ist in XML gehalten. Jedes Element
kann reine Daten beinhalten oder auch der Knoten für eine Unterstruktur sein. Zusätzlich
können bei Elementen (Knoten) auch spezifische Attribute (Key-Value String Paare)
deklariert werden. Diese Attribut Key-Value Paare stellen die eigentlichen Metadaten dar.
Mit diesen Metadaten wird die Dateninformation (Semantik) der Elemente näher
beschrieben.
Durch die XML-Notation der Advertisement Struktur ergeben sich viele Vorteile. Die
gemeinsame Präsentation von Inhalt und Metainformationen mit einem universellen
standardisierten Format (XML) ist dabei ein positiver Nebeneffekt. Neben den bekannten
Vorzügen von XML wie z.B. der Programmiersprachen- bzw. Plattformunabhängigkeit,
die selbst beschreibende Notation, dem streng typisierten Inhalt und der korrekten Syntax
(DTS, Schema), liegt der größte Vorteil von XML in der einfachen Portierbarkeit des
Codes. So können verschiedene Encodings wie HTML oder WML eingesetzt werden, um
verschiedenste Komponenten den Zugriff auf die Advertisements zu gewähren.
Ressourcen müssen nicht zwingend XML verstehen.
Ein veröffentlichtes Advertisement besitzt eine bestimmte Gültigkeitsdauer. Während
dieser Zeit darf das Advertisement nicht verändert werden. Soll ein Advertisement
verändert werden, muss es neu veröffentlicht werden. Im JXTA Core sind fünf
verschiedene Basis Advertisement Typen definiert. Services können bei Bedarf spezielle
Subtypen ableiten oder gänzlich neue erstellen. Die JXTA Basis Advertisement Typen
sind:
•
•
•
•
•
Peer Advertisement
Peer Group Advertisement
Module Class Advertisement
Module Specification Advertisement
Module Implementation Advertisement
Seite 152
9.2.1.
Kapitel 9 - Analyse des JXTA Protokoll-Frameworks
Peer Advertisement
Das Peer Advertisement beschreibt ein Peer und die einer Peer Group zur Verfügung
gestellten Ressource. Wie alle Advertisements besteht die Beschreibung aus einem
eindeutigen Identifier <PID>, der Group-ID <GID>, einem optionalen Namen <Name> und
einer informativen Beschreibung <Desc>. Diese Information kann bei der Suche nach
einem Advertisement hilfreich sein, indem diese Informationen (Keywords) entsprechend
indiziert werden. Zusätzlich können noch Randbedingungen (Service Section) <Svc> für
spezielle Dienste (z.B. Rendezvous-Peer) definiert werden. In Listing 9.14 ist die
Definition eines Peer Advertisement anhand des zugehörigen XML Schema dargestellt.
<xs:element name="PA" type="jxta:PA"/>
<xs:complexType name="PA">
<xs:sequence>
<xs:element name="PID" type="JXTAID"/>
<xs:element name="GID" type="JXTAID"/>
<xs:element name="Name" type="xs:string" minOccurs="0"/>
<xs:element name="Desc" type="xs:anyType" minOccurs="0"/>
<xs:element
name="Svc"
type="jxta:serviceParams"
maxOccurs="unbounded"/>
<xs:sequence>
</xs:complexType>
minOccurs="0"
Listing 9.14: JXTA Peer Advertisement Schema [JXTA v2.0]
9.2.2.
Peer Group Advertisement
Um Peer Groups ansprechen zu können, wird entsprechend nach Peer Group
Advertisements gesucht. Im Peer Group Advertisement sind die Ressourcen (Services,
Eigenschaften, etc.) einer Peer Group beschrieben. Die Peer Group-ID <GID> ist weltweit
eindeutig und kanonisch aufgebaut. Eine Peer Group stellt implizit ein Service dar.
Entsprechend muss für diesen Service eine Peer Group Specification ID angegeben
<MSID> werden. Diese ID ist eine abstrakte Referenz für die eigentliche Modul
Spezifikation. Die Modul Spezifikation und dessen Implementierung wird über eigene
Advertisements (ModuleSpecAdvertisement und ModuleImplAdvertisement) näher
beschrieben. Neben dem optionalen Namen <Name>, der die Peer Group benennt, ist die
nähere Beschreibung der Peer Group in einer eigenen optionalen Description <Desc>
festgelegt. In der Service Section <Svc> können wiederum spezifische Randbedingungen
zur Verwendung der diversen Dienste (z.B. Membership Service zur Authentifikation)
festgelegt werden. In Listing 9.15 ist die Definition des Peer Group Advertisement
anhand dem zugehörigen XML Schema dargestellt.
<xs:element name="PGA" type="jxta:PGA"/>
<xs:complexType name="PGA">
<xs:sequence>
<xs:element name="GID" type="jxta:JXTAID"/>
<xs:element name="MSID" type="jxta:JXTAID"/>
<xs:element name="Name" type="xs:string" minOccurs="0"/>
<xs:element name="Desc" type="xs:anyType" minOccurs="0"/>
<xs:element
name="Svc"
type="jxta:serviceParam"
maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
Listing 9.15: JXTA Peer Group Advertisement Schema [JXTA v2.0]
minOccurs="0"
Seite 153
9.2.3.
Module Class Advertisement
JXTA Module kapseln die funktionalen Einheiten mit einfachen spezifischen
Interfaces. Um Module unabhängig von ihrer Funktionalität verwalten zu können
(initialisieren, starten, beenden), müssen alle Module ein bestimmtes JXTA Interface
implementieren. Will man die Funktionalität eines Moduls nutzen, muss erstens die
Funktionalität eines Moduls bekannt sein, und zweitens muss das Modul zur Laufzeit
auffindbar sein. Module können sich im Laufe der Zeit ändern. D.h. es können
verschiedene Versionen einer Modulklasse existieren. Da das JXTA Framework
Plattform- und Programmiersprachen unabhängig entwickelt wurde, können Module auch
in technologisch unterschiedlichen Implementierungen vorliegen. Um die
Aufgabenbereiche von Modulen erfragen zu können, bedarf es ebenfalls unabhängiger
Mechanismen. Diese wichtigen Anforderungen werden mit Hilfe von drei speziellen
Modul Advertisements abgedeckt.
Das Module Class Advertisement ist eine recht einfache formale Beschreibung eines
JXTA Moduls. Es beschreibt lediglich die Aufgaben der Modulklasse. Vorwiegend wird
es zur Gruppierung verschiedener Module eingesetzt. Es wird das lokale Verhalten der
Klasse definiert und die Schnittstellen für das JXTA API vorgegeben. Jedoch ist die
Verwendung des Module Class Advertisement optional. Es gibt keine Vorschreibung wie
die Schnittstellen-beschreibung des Moduls aussieht. Die Beschreibung ist entsprechend
formal gehalten. Das Module Class Advertisement (implizit jedes Modul) wird mit einer
eindeutigen Module Class ID <MCID> gekennzeichnet. Über diese Module Class ID kann
ein Namensraum für gleichartige Modulklassen geschaffen werden. Neben dem
optionalen Namen <Name>, kann optional auch die bereits erwähnte formale Modul
Beschreibung <Desc> angegeben werden. In Listing 9.16 ist die Definition eines Module
Class Advertisement anhand des zugehörigen XML Schema dargestellt.
<xs:element name="MCA" type="jxta:MCA"/>
<xs:complexType name="MCA">
<xs:sequence>
<xs:element name="MCID" type="jxta:JXTAID"/>
<xs:element name="Name" type="xs:string" minOccurs="0"/?
<xs:element name="Desc" type="xs:anyType" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
Listing 9.16: JXTA Module Class Advertisement Schema [JXTA v2.0]
9.2.4.
Module Specification Advertisement
Das Module Specification Advertisement kapselt die Funktionalität eines Moduls vom
Übertragungsformat und kann so als Modulinterface angesehen werden. Weiters ist im
Module Specification Advertisement festgelegt, wie ein Modul aufgerufen werden muss,
und wie das Modul zu verwenden ist. Weiters legt das Module Specification
Advertisement fest, wie eine Peer Group gekennzeichnet werden muss, um ein
entsprechendes Modul anbieten zu können. Alle im JXTA Core enthaltenen Services
(z.B. Discovery-, Membership-, Resolver-Service) sind solche ausgezeichneten Module.
Ein Modul kann auf verschiedene Weise verwendet werden. Direkte Instanzierung oder
remote über Pipes, um z.B. über ein Proxy Modul Firewalls überbrücken zu können. Für
die zweite Variante (Kapselung mittels Pipe) muss zusätzlich ein Module Specification
Advertisement für das Proxy Modul erstellt werden.
Ein Module Specification Advertisement besitzt eine eindeutige ModuleSpecID
<MSID> und eine Versionsnummer <Vers>. Optional sind wiederum der Advertisement
Name <Name> und eine formale Beschreibung <Desc> für das Advertisement. Zusätzliche
Seite 154
Kapitel 9 - Analyse des JXTA Protokoll-Frameworks
Metainformationen, wie Creator <Crtr> oder Specification Url <SURI> (verweist auf die
eigentliche Dokumentspezifikation) und frei wählbare Parameter <Parm>, können im
Advertisement definiert werden. Um eine Verbindung mit dem Modul herstellen zu
können, wird mit <jxta:PipeAdvertisement> eine Input Pipe anhand eines Pipe
Advertisement (siehe Abschnitt 9.1.3) festgelegt. Optional kann ein Modul auch als
Proxy ausgelegt werden <Proxy> oder Authentifikation <Auth> fordern. Die beiden
letzten Optionen können jedoch rekursive Deklarationen bewirken. In Listing 9.17 ist die
Definition eines Module Specification Advertisement anhand des zugehörigen XML
Schema dargestellt.
<xs:element name="MSA" type="jxta:MSA"/>
<xs:complexType name="MSA">
<xs:sequence>
<xs:element name="MSID" type="jxta:JXTAID"/>
<xs:element name="Vers" type="xs:string"/>
<xs:element name="Name" type="xs:string" minOccurs="0"/>
<xs:element name="Desc" type="xs:anyType" minOccurs="0"/>
<xs:element name="Crtr" type="xs:string" minOccurs="0"/>
<xs:element name="SURI" type="xs:anyURI" minOccurs="0"/>
<xs:element name="Parm" type="xs:anyType" minOccurs="0"/>
<xs:element ref="jxta:PipeAdvertisement" minOccurs="0"/>
<xs:element name="Proxy" type="xs:anyURI" minOccurs="0"/>
<xs:element name="Auth" type="jxta:JXTAID" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
Listing 9.17: JXTA Module Specification Advertisement Schema [JXTA v2.0]
9.2.5.
Module Implementation Advertisement
Das Module Implementation-Advertisement beschreibt die konkrete Implementierung
einer Modul Spezifikation. Identifiziert wird eine Modul Implementierung über die
eindeutige Module Specification ID <MSID>. D.h. eine Modul Implementierung besitzt
selbst keine eigene ID. Die Modul Compatibility (Environment, in dem das Modul
ausgeführt werden kann) <Comp> beschreibt den Zugriff auf das Modul und den
Ladevorgang des Moduls. Der eigentliche Code des Moduls wird mit <Code> deklariert.
Ist das Modul als Java Klasse ausgeführt, beinhaltet dieses Element den voll
qualifizierten Klassennamen und die Schnittstellenbeschreibung der Klasse. In anderen
Fällen kann der Code auch direkt enthalten sein. Zusätzlich zur Codedeklaration kann
optional auch eine Packagedeklaration für den Code mit einer Url <PURI> angegeben
werden. Das kann z.B. ein zusätzliches downloadbares Package sein. Weitere optionale
Elemente sind die Angabe des Providers der Implementierung <Prov>, eine zusätzliche
Beschreibung <Desc> und eventuelle Übergabeparameter <Parm>, die vom Code
ausgewertet werden können. In Listing 9.18 ist die Definition eines Module
Implementation-Advertisement anhand des zugehörigen XML Schema dargestellt.
<xs:element name="MIA" type="jxta:MIA"/>
<xs:complexType name="MIA">
<xs:sequence>
<xs:element name="MSID" type="jxta:JXTAID"/>
<xs:element name="Comp" type="xs:anyType"/>
<xs:element name="Code" type="xs:anyType"/>
<xs:element name="PURI" type="xs:anyURI" minOccurs="0"/>
<xs:element name="Prov" type="xs:string" minOccurs="0"/>
<xs:element name="Desc" type="xs:anyType" minOccurs="0"/>
<xs:element name="Parm" type="xs:anyType" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
Listing 9.18: JXTA Module Implementation Advertisement Schema [JXTA v2.0]
Seite 155
9.2.6.
Implementierung von Advertisements
Advertisements sind strukturierte Dokumente. Der Dokument-Typ wird mit der
Angabe des MIME-Type festgelegt. Die Funktionalität bzw. die Behandlung dieser
Dokumenttypen wird in separaten Klassen durchgeführt. Zurzeit existieren im JavaPackage net.jxta.impl.document des JXTA Core die Klassen BinaryDocument,
DOMXMLDocument, LiteXMLDocument, PlainTextDocument, TextDocumentCommon,
XMLDocumentCommon. Neben den fünf zuvor beschriebenen Basis-Advertisements
existieren zusätzlich bereits elf weitere spezifische Advertisements:
net.jxta.impl.protocol.AccessPointAdv
net.jxta.impl.protocol.DiscoveryConfigAdv
net.jxta.impl.protocol.HTTPAdv
net.jxta.impl.protocol.PipeAdv
net.jxta.impl.protocol.PlatformConfig
net.jxta.impl.protocol.PSEConfigAdv
net.jxta.impl.protocol.RdvAdv
net.jxta.impl.protocol.RdvConfigAdv
net.jxta.impl.protocol.RouteAdv
net.jxta.impl.protocol.SignedAdv
net.jxta.impl.protocol.TCPAdv
Die unterstützten Advertisements sind in der Datei config.properties des JavaPackage net.jxta.impl eingetragen. Die Advertisements können von der
Advertisement-Factory bei Bedarf zur Laufzeit angefordert werden. Zur Erzeugung von
Advertisements bietet die Klasse net.jxta.document.AdvertisementFactory vier
statische Methoden an. Aufgrund des offenen Typen-Ansatzes für Advertisements, im
Unterschied zu ID-Factory (sechs fixe Typen), ist die Advertisement-Factory generisch
aufgebaut. Die Art des Advertisements wird vom MIME/Type und vom Quellcode des
Advertisements bestimmt.
Die Advertisement-Factory erzeugt entsprechend auch ein allgemeines abstraktes
Advertisement. Um ein spezifisches Advertisement verwenden zu können, überschreiben
die Sub-Advertisement-Klassen entsprechend die abstrakten Methoden. Die abstrakte
Advertisement Klasse liefert mit der Methode getAdvertisementType den
entsprechenden Advertisement-Typ, für den anschliesenden notwendigen Type-Cast. Die
Unterscheidung in der JXTA-Package Struktur erfolgt anhand der Zwischenebene impl.
D.h. sämtliche Definitionen und abstrakte Klassen sind im JXTA Core API-Source-Baum
(api/src/net/jxta) enthalten. Die entsprechenden Implementierungen sind im ImplSource-Baum (impl/src/net/jxta/impl) enthalten.
Um Advertisements suchen und veröffentlichen zu können, bedient man sich dem
Discovery Service. Die abstrakte Definition bzw. das Interface für das Discovery Service
ist wiederum im API-Source-Baum enthalten
(net.jxta.discovery.DiscoveryService). Die entsprechende Implementierung ist im
Package net.jxta.impl.discovery.DiscoveryServiceImpl enthalten. Diese Klasse
enthält zwei wichtige Methoden. Mit der Methode publish() kann ein Advertisement
im lokalen Cache abgelegt werden. Um ein Advertisement auch verbreiten zu können,
kann mit der Methode remotePublish() das Advertisement in der bekannten Umgebung
mittels Broadcast bekannt gemacht werden. Für beide Methoden kann als zusätzlicher
Parameter eine LifeTime angegeben werden.
Seite 156
Kapitel 9 - Analyse des JXTA Protokoll-Frameworks
Der Defaultwert für den lokalen Cache ist auf 1 Jahr festgelegt:
DEFAULT_LIFETIME=1000L*60L*60L*24L*365L.
Der Defaultwert für den Broadcast ist auf 2 Stunden festgelegt:
DEFAULT_EXPIRATION=1000L*60L*60L*2L.
Die Suche nach Advertisements kann über zwei verschiedene Möglichkeiten realisiert
werden. Bei einer aktiven Suche nach Advertisements muss der lokale Cache oder der
Cache der bekannten Peer Groups durchsucht werden. Wie schon beim Veröffentlichen
von Advertisements bietet das Discovery Service auch hier zwei geeignete Methoden an;
getLocalAdvertisement und getRemoteAdvertisement. Bei der zweiten Methode
erfolgt die Suche implizit nach dem Observer-Pattern. Hierzu meldet man beim
Discovery Service spezielle Discovery-Listener an. Diese benachrichtigen die
Implementierungs-Klasse des Discovery-Listener über alle eintreffenden Advertisements.
9.3.
Einsatz von JXTA Services
Die JXTA Services sind in der JXTA Framework Architektur zwischen den JXTA
Applikationen und dem JXTA Core angesiedelt (siehe dazu Abbildung 6.2).
Grundsätzlich wird versucht mit Hilfe der Services den JXTA Core für Applikationen
einfach zugänglich zu machen. Dieser Weg ist jedoch nicht zwingend vorgeschrieben. So
können etwa JXTA Core Elemente, wie z.B. Pipes, auch direkt von Applikationen
verwendet werden. Services erweitern im eigentlichen Sinne lediglich die
Aufgabenbereiche. Einige JXTA Standard Dienste wurden bereits kurz erwähnt. Zu den
JXTA Core Diensten gehören das Discovery Service, das Pipe Service, das Membership
Service, das Peer Info Service, das Resolver Service, das Rendezvous Service und das
Endpoint Service.
Services hängen unmittelbar mit ihren jeweiligen Modulen zusammen. Implizit sind
Services erweiterte Module. Die Erweiterung bezieht sich jedoch lediglich auf die
Modulschnittstelle. Die drei allgemein gültigen Methoden zur Verwaltung der Module
(init, start, stop) gelten so auch für Services. Über zwei zusätzliche Methoden kann ein
Modul-Implementation-Advertisement (getImplAdvertisement) angefordert werden
bzw. eine neue Objekt Referenz der Service Implementierung (getInterface) erzeugt
werden.
Wie einleitend in Abschnitt 9.2.2 beschrieben, sind Services in Peer Groups integriert.
Jedoch kann man bereits bestehende Peer Groups nicht mit neuen Services erweitern. Es
muss dazu eine neue Peer Group erzeugt werden, die zusätzlich zu den bereits
vorhandenen Services die neuen Services integriert. Dazu muss lediglich das
entsprechende Peer Group Advertisement kopiert und erweitert werden. Mit diesem
neuen Peer Group Advertisement kann so eine neue Peer Group erzeugt und
veröffentlicht werden.
9.4.
xFIND JXTA Testimplementierung
Im Zuge der Analyse des JXTA Protokoll-Frameworks wurden zwei
Testimplementierungen erstellt. In der ersten Testimplementierung wird ein einfacher
Nachrichtenaustausch über JXTA-Pipes zwischen einem Server-Peer und einem ClientPeer realisiert. Dieser Nachrichtenaustausch wird anhand des Blockdigrammes in
Abbildung 9.2 vereinfacht visualisiert. In der zweiten Testimplementierung erfolgt der
Seite 157
Nachrichtenaustausch über die Vermittlung eines eigens generierten Services zwischen
zweier gleichberechtigten Peers.
Für beide Testimplementierungen gilt, dass für das Veröffentlichen der verschiedenen
Advertisements und der Services das Discovery Service eingesetzt wird. Services werden,
wie in Abschnitt 9.3 beschrieben, in Peer Groups integriert. Deshalb muss zu Beginn das
entsprechende JXTA Environment geladen bzw. gestartet werden. Hierzu wird von der
PeerGroupFactory die NetPeerGroup angefordert. Jede Peer Group ist zumindest auch
dieser NetPeerGroup oder der WorldPeerGroup bekannt. Nach der Erzeugung bzw.
Anforderung der NetPeerGroup, wird über die Methode getDiscoveryService() das
Discovery Service der NetPeerGroup angefordert. Zusätzlich können auch verschiedene
Advertisements geladen werden. Diese grundlegenden Schritte sind exemplarisch in
Listing 9.19 kurz zusammengefasst dargestellt.
public void startJxta() {
try {
// create, and Start the default jxta NetPeerGroup
netPeerGroup_ = PeerGroupFactory.newNetPeerGroup();
} catch (PeerGroupException e) {
System.out.println("startup error: NetPeerGroup creation failed");
System.exit(0);
}
discoveryService_ = netPeerGroup_.getDiscoveryService();
}
Listing 9.19: JXTA Framework starten
NetPeerGroup
Advertisements
Client
Pipe
Server
Abbildung 9.2: Blockdiagramm der JXTA Client-Server Testimplementierung
Will man nur grundlegende JXTA Dienste oder Module testen, kann man ohne
weiteres mit der NetPeerGroup oder der WorldPeerGroup arbeiten. Dieser einfache
Aufbau wurde auch in der ersten Testimplementierung für eine einfache Client-Server
Anwendung
herangezogen.
Der
Client
fordert
vom
Server
ein
ModuleSpecAdvertisement an, das vom Server entsprechend veröffentlicht wurde. Der
Server bedient sich, wie eingangs des Abschnittes erwähnt, am Discovery Service. Das
ModuleSpecAdvertisement
wird
mit
der
Discovery
Service
Methode
discoveryService_.publish(mds_adv) lokal gespeichert. Im Broadcast-Verfahren
wird mittels der Methode discoveryService_.remotePublish(mds_adv) das
ModuleSpecAdvertisement im Peer-Netzwerk verbreitet.
Anschließend wird über das Pipe-Service der NetPeerGroup eine Input-Pipe mit
einem
eigenen
Pipe-Advertisement
angefordert.
Nachdem
das
ModuleSpecAdvertisement veröffentlicht und die Input-Pipe vom JXTA Pipe-Service
Seite 158
Kapitel 9 - Analyse des JXTA Protokoll-Frameworks
gebunden wurde, wartet der Server auf eingehende Messages. Der Service-Client
versucht als Erstes über die aktiven Such-Methoden des Discovery Service
getLocalAdvertisement
und
getRemoteAdvertisement
das
entsprechende
ModuleSpecAdvertisement (JXTASPEC:XFIND-JXTA-Server) zu finden. Nach der
Referenzierung des ModuleSpecAdvertisement wird eine Output-Pipe vom JXTA PipeService erzeugt. Das dafür notwendige Pipe-Advertisement wird mit
mds_adv.getPipeAdvertisement() von der ModuleSpecAdvertisement Referenz
angefordert. Über diese Output-Pipe wird anschließend eine Nachricht vom Client zum
Server gesandt.
Abbildung 9.3 zeigt das Klassendiagramm für die beiden Beispielanwendungen.
Ausgegraut dargestellt sind die Diagramme und Packages der Testimplementierung eins.
Die Klasse CreatePeerGroup und GenerateID wird von beiden Testimplementierungen
genutzt, und wird deshalb an einer zentralen Position dargestellt.
Abbildung 9.3: Klassendiagramm der xFIND JXTA Testimplementierung
Seite 159
Um die Funktionalität der JXTA Dienste ausnutzen zu können, müssen neue Peer
Groups erzeugt werden und alle benötigten Dienste bei diesen neuen Peer Groups
eingetragen werden. Unter zu Hilfenahme der IDFactory wird eine neue Peer Group ID
angefordert. Mit dieser eindeutigen Peer Group ID wird eine neue Peer Group in der
NetPeerGroup eingefügt.
PeerGroupID peer_group_id = IDFactory.newPeerGroupID();
PeerGroup new_group = netPeerGroup_.newGroup(…, peer_group_id,…)
Damit die neue Peer Group auch auffindbar ist, muss sie wiederum mit dem Discovery
Service veröffentlicht werden. Hierzu wird von der neuen Peer Group das
PeerGroupAdvertisement angefordert und lokal bzw. remote verbreitet.
PeerGroupAdvertisement pg_adv = new_group.getPeerGroupAdvertisement();
discoveryService_.publish(pg_adv);
discoveryService_.remotePublish(pg_adv);
Im nächsten Schritt wird ein neues Service erzeugt und anschließend in der neuen Peer
Group integriert. Das Erzeugen von JXTA Services kann nach einer Art Kochrezept
erstellt werden. Der Ablauf zur Erzeugung eines neuen JXTA Dienstes sieht wie folgt
aus:
•
•
•
•
•
•
•
Der Algorithmus eines Dienstes wird in einer neuen Klasse eingebettet.
Diese Klasse muss das JXTA Interface net.jxta.service.Service implementieren.
Zusätzlich soll für diese neue Klasse ein eigenes Interface erstellt werden.
Dieses spezielle Interface wird dann beim Kommunikationsaufbau ausgetauscht und
bietet die eigentliche Service-Funktionalität über diese Schnittstelle an.
Um ein Service veröffentlichen zu können, müssen noch einige verschiedene
Advertisements erzeugt werden.
Die erzeugten Advertisements müssen mit dem Discovery Service veröffentlicht
werden.
Das neue Service wird beim Erstellen einer neuen Peer Group als
ModuleImplAdvertisement registriert.
In der zweiten Testimplementierung wird das neue Service, wie in Listing 9.20
zusammengefasst, erzeugt. Das impl_adv wird als eine Art Mustervorlage für das
eigentliche ModuleImplAdvertisement von der NetPeerGroup angefordert. Um die drei
notwendigen Advertisements erstellen zu können, bedient man sich der in Abschnitt 9.2.6
beschriebenen AdvertisementFactory. Um ein zusätzliches Service für eine Peer Group
erstellen zu können, muss man auch die bereits vorhandenen Services der NetPeerGroup
(gilt nur für die Testimplementierung) kennen. Dazu werden StdPeerGroupParamAdv
Parameter erzeugt und die bereits vorhandenen Services angefordert. Diese Services sind
in einer Hashtable abgelegt. Anschließend wird das neue Service in dieser Hashtable
eingetragen und erneut im ModuleImplAdvertisement der NetPeerGroup vermerkt. Alle
drei Advertisements werden anschließend sowohl lokal als auch remote über das
Discovery Service veröffentlicht.
Nachdem das Service kreiert wurde, muss es noch einer neuen Peer Group
hinzugefügt werden. Dazu wird beim Erzeugen der neuen Peer Group das erweiterte
ModuleImplAdvertisement der NetPeerGroup als Initialwert übergeben und
anschließend veröffentlicht. Listing 9.20 zeigt diesen grundsätzlichen Ablauf im Detail.
Seite 160
Kapitel 9 - Analyse des JXTA Protokoll-Frameworks
public void createPeerGroup() throws Exception, PeerGroupException {
String name = "xFINDPeerGroup";
String descr = "An example xFIND peer group";
ModuleImplAdvertisement group_impl_adv = netPeerGroup_
.getAllPurposePeerGroupImplAdvertisement();
ModuleClassAdvertisement module_class_adv = createModuleClassAdv();
ModuleSpecAdvertisement module_spec_adv = createModuleSpecAdv();
ModuleImplAdvertisement module_impl_adv =
createModuleImplAdv(group_impl_adv, module_spec_adv);
StdPeerGroupParamAdv params = new StdPeerGroupParamAdv(group_impl_adv.getParam());
// Get the services from the parameters.
Hashtable services = params.getServices();
services.put(module_class_adv.getModuleClassID(), module_impl_adv);
params.setServices(services);
group_impl_adv.setParam((StructuredDocument) params
.getDocument(new MimeMediaType("text", "xml")));
group_impl_adv.setModuleSpecID(PEER_GROUP_SPEC);
// Publish the Module Class and Specification Advertisements.
discoveryService_.publish(module_class_adv);
discoveryService_.remotePublish(module_class_adv);
discoveryService_.publish(module_spec_adv);
discoveryService_.remotePublish(module_spec_adv);
discoveryService_.publish(group_impl_adv);
discoveryService_.remotePublish(group_impl_adv);
newGroup_ = netPeerGroup_.newGroup(PEER_GROUP_ID, group_impl_adv, name, descr);
PeerGroupAdvertisement groupAdv = newGroup_.getPeerGroupAdvertisement();
discoveryService_.publish(groupAdv);
discoveryService_.remotePublish(groupAdv);
}
Listing 9.20: Erstellen eines neuen JXTA Service
Das Auffinden des neuen Service bzw. des neuen Moduls erfolgt wie in Abschnitt
9.2.6 beschrieben implizit über die Suche nach den Advertisements. In diesem Fall wird
von der neuen Peer Group das Lookup-Service aktiviert. Als Suchparameter wird die
ModulClassID des neuen Service angegeben. Das Lookup-Service liefert das ServiceInterface. Bei diesem Service kann ein Service-Listener angemeldet werden, der bei
Erhalt von Anfragen und Nachrichten benachrichtigt wird (die vorgesehene Listener
Methode wird ausgeführt).
xFINDTestService xfind_test_service = (xFINDTestService) newGroup_
.lookupService(MODUL_CLASS_ID);
xfind_test_service.addListener(the_xfind_service_listener);
Eine genauere Beschreibung der Testimplementierung ist über die Java
Dokumentation des Java Quellcodes ersichtlich. Der Java Quellcode ist, wie auch der
Java Quellcode der anderen Testimplementierungen, auf der beiliegenden CD-ROM
gespeichert.
Seite 161
9.5.
Schlussbemerkung
Grundsätzlich ist zu sagen, dass der Transfer Overhead von XML-basierten
Protokollen natürlich auch auf JXTA zutrifft. So soll man auch die Basis Funktionalität
die JXTA bietet entsprechend ausnutzen. Eine reine Client-Server Architektur
aufzubauen, wie in der ersten Testimplementierung aus Abschnitt 9.4 ersichtlich, führt
sicherlich zu keinen vernünftigen Ergebnissen. Vielmehr gilt es die Vorzüge des offenen
Peer-to-Peer Ansatzes zu nutzen. Bestehende Applikationen können einfach erweitert
werden, um als JXTA Peer zu fungieren, oder einen speziellen Dienst über das JXTA
Netzwerk anzubieten. Für die xFIND Architektur bedeutet dies, das JXTA nicht in der
Datenübertragung einzusetzen ist. Dies zeigt der Vergleich von xFIND mit BEEP im
Abschnitt 8.5. BEEP ist standardisiert und ein reines Datenübertragungsprotokoll
spezifiziert. JXTA ist dafür nicht entwickelt oder ausgelegt worden.
Speziell für den Bereich Information Retrieval bietet JXTA jedoch einfache Lösungen
an, um Ressourcen in verteilten, dezentralisierten Umgebungen auffinden und nutzen zu
können. Der Vorteil der JXTA Protokollspezifikation liegt eindeutig in der offenen und
unabhängigen Entwicklung bezüglich zugrunde liegender Plattform und
Programmiersprache. Es existiert zurzeit zwar nur eine Java Referenz Implementierung,
jedoch wird bereits an einer JXTA Entwicklung für C++, C# oder Perl gearbeitet. Zudem
gibt es bereits den Versuch einer Anbindung mittels JXMEShare127 über JXTA J2ME128
an mobile Endgeräte. JXTA ist auch an keine bestimmte Übertragungstechnologie wie
z.B. TCP/IP gebunden. JXTA abstrahiert in gewisser Weise den Kommunikationsaufbau
und die Datenübertragung.
Diese Abstraktion ist einer der Gründe, warum JXTA die Entwicklung von Peer-toPeer nahen Applikationen vereinfacht. Die Widerverwendbarkeit der Core Module lassen
schnelle und einfach zu realisierende Lösungen zu. Der Kommunikationsaufbau und die
Organisation der verschiedenen Module werden durch den Einsatz von JXTA
vereinfacht. Somit kann bei der Produktentwicklung mehr Wert auf die Entwicklung der
Produktfunktionalität von verteilten Anwendungen gelegt werden.
Mit Hilfe der JXTA Protokolle wird der Versuch unternommen, grundlegende
Methoden wie die Verwaltung von Peer und Peer Gruppen, sowie die Suche und das
Anbieten verschiedener Ressourcen in P2P Netzwerken, zu standardisieren. Jedoch sind
die JXTA Protokolle zum Zeitpunkt der Erstelleung der vorliegenden Arbeit nicht
standardisiert. Der offene Frameworkansatz von JXTA bietet aber zusätzlich
Möglichkeiten an, bereits standardisierte Technologien zu verwenden. So kann anstatt der
JXTA Such Dienste auch WSDL (siehe Abschnitt 4.8.2) oder statt des HTTP Daten
Transportes das BEEP Protokoll (siehe Abschnitt 8) in der Übertragungseinheit eingesetzt
werden. XML wird einerseits als Beschreibungssprache für Advertisements eingesetzt
und andererseits wird XML bei der Kommunikation und bei der Datenübertragung
verwendet. XML ist ein funktionierender Standard mit vielerlei Vorzügen. Dazu gehören
die einfache Lesbarkeit der Struktur und der Daten, sowie die einfache Entwicklung und
Wartung des Inhaltes. Zudem ist mit der Angabe des Zeichensatz-Encodings und der
Inhaltsdeklarierung über die MIME-Type Spezifikation einerseits eine textbasierte
Nachrichtenübermittlung möglich, andererseits können auch Daten im Binärformat
übertragen werden.
127
JXMEShare: M. Kubek; Realisierung einer mobilen P2P-Anwendung mittels JXTA für J2ME; Technische Universität
Ilmenau
128
JXTA for J2ME: JXTA Projekt http://jxme.jxta.org/
Seite 162
Kapitel 9 - Analyse des JXTA Protokoll-Frameworks
Neben den vielen Vorzügen von JXTA gibt es natürlich auch einige Nachteile. Die
große Flexibilität des Protokollframeworks schlägt sich entsprechend auf die Effizienz im
Datendurchsatz wieder. Im Rahmen dieser Arbeit wurden explizit keine JXTA
Performance-Messungen durchgeführt. So kann bezüglich der Performance von JXTA
nur auf diverse Quellen verwiesen werden, wie z.B. die Arbeit ‚JXTA Pipes
Performance’ von Jean-Marc Seigneur. Es existieren für JXTA auch diverse Projekte der
JXTA-Community, in denen verschiedene JXTA Core Bereiche bezüglich Performance
untersucht wurden. Dazu gehört unter anderem das JXTA Projekt ‚bench’129. Dieses
Projekt gilt als zentrales Projekt für Benchmarktests verschiedener JXTA Bereiche.
129
bench: http://bench.jxta.org/
Seite 163
Kapitel 10
10. Verbesserungsvorschläge für das xFIND
System
Nach dem in den vorangegangenen Kapiteln eingehend neue technologische Ansätze
zur Erweiterung der xFIND Kommunikationsarchitektur analysiert wurden, wird in
diesem Kapitel speziell auf die Integration dieser Technologien in das xFIND System
eingegangen.
In Kapitel 7 wurde die xFIND Kommunikationsarchitektur näher analysiert und ein
Benchmarktest der Datendurchsatzrate in der Übertragungsschicht erstellt. Der Vergleich
mit anderen Benchmark Tests brachte dabei wesentliche Aufschlüsse für Verbesserungsmöglichkeiten. Auch eine Problemanalyse der xFIND Kommunikationsarchitektur zeigt
die derzeitigen Schwächen im verteilten Konzeptansatz.
10.1. xFIND Konfiguration
Nachdem die xFIND Module von verschiedenen Personen entwickelt wurden, gibt es
auch entsprechend viele verschiedene Konfigurationsmöglichkeiten der einzelnen
Module. Die Module können „standalone“ betrieben werden und sind so auch separat zu
verwalten. In xFIND wird zwar einheitlich ein Konfiguration-Manager eingesetzt, doch
ersetzt dieser Manager weder die vielen verschiedenen Konfigurationsdateien noch fasst
er diese zusammen.
In Abschnitt 7.3 sind die verschiedenen Module und deren Konfiguration kurz
beschrieben. Speziell die Konfiguration des xFIND Managers beinhaltet viele
Redundanzen, wenn mehrere Module auf einem Rechner installiert sind. Die
Konfiguration der verschiedenen Module hat durchaus seine Berechtigung, wenn
Gatherer, Indexer oder Broker auf verschiedenen Rechnern installiert sind, und diese
nicht auf eine gemeinsame Konfigurationsreferenz zugreifen können.
Um den Mechanismus der Konfiguration vereinfachen zu können, wird
vorgeschlagen, nur eine Konfigurationsdatei zu verwenden. Diese sollte unabhängig von
den verschiedenen Komponenten abgelegt werden. xFIND beinhaltet das Package
edu.iicm.xfind.common.config. Dieses Package könnte als zentrale Stelle für die
Verwaltung einer allgemeinen Konfigurationsdatei dienen. Es gibt z.B. auch ein
grafisches UI für die Gatherer-Konfiguration. Dieses wurde im Rahmen eines
Studentenprojektes erstellt. Entsprechend könnte diese Idee aufgegriffen werden und ein
allgemeineres Konfig-UI für das Gesamtprojekt entworfen werden.
Eine weitere Verbesserungsmöglichkeit ergibt sich aufgrund der gewählten xFIND
Konfigurationssyntax. Die xFIND Konfiguration wurde speziell für die Anforderungen
von xFIND konzipiert. Die xFIND Syntax ist nicht standardisiert, nicht kompatibel zu
Seite 164
Kapitel 10 - Verbesserungsvorschläge für das xFIND System
anderen Standards und deshalb nicht mit standardisierten Werkzeugen lesbar oder
transformierbar. Die Konfigurations-Syntax sieht einerseits hierarchische Strukturen vor,
kann verschiedene Ressourcen einbinden bzw. bietet andererseits das Überladen von
Einträgen an. Diese Funktionalität wird mittlerweile auch mit der XML-Technologie zur
Gänze abgedeckt. Siehe dazu Abschnitt 5.4 XML-Grundlagen. Die XML-Technologie
war während der Entwicklungsphase von xFIND bereits als Standard vom W3C
anerkannt. Doch allein die syntaktische Notation ohne erweiterte Funktionalität, wie z.B.
XPath oder XLink, war für die Bedarfsanforderung zu gering. Zudem gab es nur wenig
geeignete Parser und diese in unzureichender Qualität.
Mittlerweile ist aber XML weit verbreitet. Vor allem gibt es eine Reihe neuer XMLbasierender Standards. Auf Grund der XML-Konformität, eine richtige Syntax wird
vorausgesetzt, sind alle XML-Spezifikationen zueinander kompatibel. D.h. jede XMLStruktur lässt sich leicht in eine andere XML-Struktur umformen. Zudem gibt es eine
Vielzahl an speziellen XML-Editoren, die das Erstellen und Verwalten von XML-Dateien
vereinfachen.
Da das Konfigurations-Package edu.iicm.xfind.common.config in xFIND bereits
existiert, braucht zur Erweiterung der xFIND Konfiguration auf Basis XML nur ein
zusätzlicher XML-Reader erstellt werden. Der bestehende XFConfigReader sollte aus
Gründen der Rückwärtskompatibilität weiterhin unverändert bleiben. Die xFIND
Konfigurationssyntax ist XML ähnlich aufgebaut. Deshalb ist eine problemlose
Transformation in eine XML-Notation mit geringem Aufwänd möglich.
Ein großer Problembereich stellt jedoch die manuelle Konfiguration von Gatherer und
Indexer für neue, über das Registrier Modul erstellte Quellen dar. Die Registrier
Komponente sieht die Anmeldung von neuen Web-Quellen über ein Web-basiertes UI
vor. Auf das Registrier Modul wurde in dieser Arbeit nicht näher eingegangen. Weitere
Informationen dazu sind in der Arbeit von Robert Hoffmann [Hoffmann 2002] in
Abschnitt 8.2.1 Ressourcenanmeldung ersichtlich.
Die Registrierdaten werden zurzeit im Filesystem in einem speziellen Ordner
abgelegt. Die Quelle muss jedoch manuell im Gatherer-Konfigfile eingetragen werden.
Insbesondere dieser Umstand erfordert deshalb eine laufende Wartung der Gatherer
Konfiguration. Um dies vermeiden zu können, müsste das Registrier Modul direkten
Zugriff auf die entsprechende Konfigurationsdatei haben.
10.2. xFIND interne Kommunikation
Was bedeutet „interne Kommunikation“. Für den folgenden Abschnitt wird als interne
Kommunikation der Datenaustausch zwischen zwei xFIND-Modulen bezeichnet, wenn
diese auf derselben Rechnerarchitektur laufen. D.h. die Module teilen sich sämtliche
verfügbaren Ressourcen.
Hinsichtlich
der
internen
Kommunikation
konnten
nur
wenige
Verbesserungspotentiale identifiziert werden. Die Kommunikation setzt intern wie auch
extern auf Java Sockets auf. In xFIND wurde mit QCF (siehe Abschnitt A Kapitel 12) ein
eigenes Kommunikations- und Datenaustauschformat erstellt. Die einzelnen Module
kommunizieren entsprechend über diese Socket-Verbindungen. Zudem ist QCF nicht an
einen Standard angelehnt, sodass der xFIND Client und der xFIND Server nur schwer an
Fremdsysteme anzubinden sind. Nachdem der Datentransport auf TCP/IP aufbaut,
müssen die verschiedenen xFIND Datenobjekte beim Sender serialisiert und beim
Empfänger wieder deserialisiert werden.
Seite 165
Diesen Umweg kann man sich ersparen, indem ein eigenes lokales Austauschformat
entwickelt wird. Die Datenübertragung in xFIND ist zwar effizient, doch ist gerade in
diesem Bereich Verbesserungspotential vorhanden. Da die xFIND Module sehr spezifisch
sind und die Hierarchie klar vorgegeben ist (Gatherer-Indexer-Broker), liegt es nahe, auch
entsprechend spezifische Austauschformate zu definieren. Eine Verallgemeinerung an
dieser Stelle würde nicht viel bringen, da wiederum Transformationen und
Rücktransformationen zu erwarten sind.
Die Entwicklung könnte auch in eine andere Richtung gehen. Sofern gewährleistet
werden kann, dass keine Seiteneffekte zu erwarten sind, können die Module über lokale
Schnittstellen direkt auf die verschiedenen Ressourcen anderer Module zugreifen. Auch
eine einfachere Synchronisation gleicher Module (z.B. Datenabgleich oder Cacheupdate)
wäre somit möglich.
Der Entwurf eines lokalen Austauschformates, oder der Zugriff über spezielle lokale
Schnittstellen erfordert auch keine Modifikation bezüglich Sicherheit und
Authentifikation. In einer gesicherten Umgebung, und davon kann bei einem einzelnen
Rechner ausgegangen werden, brauchen Sicherheitsaspekte nicht speziell implementiert
werden.
10.3. xFIND externe Kommunikation
Mehr Verbesserungspotential liegt in der externen Kommunikationseinheit. Die
xFIND Kommunikation ist, wie bereits öfters erwähnt, nicht standardisiert. Auch gibt es
zurzeit keine Möglichkeit standardisierte Technologien anzubinden. Der einfache
Kommunikationsaufbau und die Authentifikation sind sehr effizient umgesetzt. Jedoch
bietet insbesondere die Authentifikation ohne Zertifikat und ohne Encryption keinerlei
Sicherheit gegenüber Angriffen. Auch die Datenübertragung erfolgt ungeschützt.
Textbasierte Daten werden UTF8-codiert in Plaintext übertragen. Binäre Daten werden
Base64 codiert und wiederum unverschlüsselt vermittelt.
Bezüglich der Authentifikation und der Datenübertragung ist mit BEEP ein
Übertragungsprotokoll vorhanden, dass recht einfach in xFIND zu integrieren ist. Zudem
kann BEEP mit TLS und SASL betrieben werden und würde so die vorhandenen
Schwachstellen im Bereich Sicherheit beheben. Ein weiterer Vorteil von BEEP ist der
asynchrone Verbindungsansatz. Es gibt in BEEP keine ausgezeichneten Rollen mehr. So
können neben einfachen Client-Server Lösungen auch Server-zu-Server Verbindungen
geschaffen werden. Dies impliziert die Erstellung von Peer-to-Peer Architekturen mit den
xFIND-Modulen.
Aus Performancegründen wird in xFIND eine Antwort auf eine Suchanfrage in
mehrere kleine aufeinanderfolgende Antworten zerteilt. Diese Antwort Sequenzen
könnten recht einfach über die One-to-Many Eigenschaft von BEEP erzeugt werden. Der
Vorteil der BEEP-Asynchronität kann insbesondere genutzt werden, indem Suchanfragen
quasi im Broadcast-Prinzip an mehrere Indexer bzw. Gatherer gerichtet werden. Die
Effizienz von BEEP gegenüber der xFIND Kommunikation ist teilweise nur geringfügig
schlechter. Dies bedingt natürlich durch den XML-basierten Datenaustausch.
Erwähnenswert ist, dass mit BEEP, aufgrund der Datendeklarierung mittels MIME-Type,
alle in xFIND vorhandenen Datentypen übertragen werden können.
Um jedoch den Overhead beim Verbindungsaufbau einer BEEP Session verringern zu
können, kann die BEEP-Eigenschaft des Kanal-multiplexen ausgenutzt werden.
Datenpakete könnten „quasi-parallel“ übertragen werden. Wird dieser Gedanke weiter
Seite 166
Kapitel 10 - Verbesserungsvorschläge für das xFIND System
verfolgt, muss darauf geachtet werden, dass es keine Abhängigkeiten zwischen den
Datenpakten gibt. Aufgrund der BEEP-Asynchronität könnten sonst Dateninkonsistenzen
oder Dead-Locks entstehen bzw. unvorhergesehene Verzögerungen auftreten. Bevor also
daran gedacht wird, diese Funktionalität einzusetzen, muss eine Daten-Laufzeitanalyse
erstellt werden. Kritische Bereiche sind bei möglichen auftretenden Konflikten zu
modifizieren.
Weiters sind in xFIND keine Vorkehrungen getroffen, um auch Fremdsystemen
Zugriff auf die spezifischen Daten zu ermöglichen. Eine Möglichkeit ist die Erstellung
von Web-Services über UDDI und WSDL. Eine funktionelle Anbindung über andere
standardisierte Technologien, wie z.B. SOAP oder XML-RPC ist denkbar.
10.4. xFIND Architektur
Die xFIND Architektur ist aufgrund der verschiedenen Entwicklungsstadien recht lose
miteinander verbunden. Es existiert lediglich eine Verbindung über Java Sockets. Die
Verbindungsdaten,
Host-IDs
und
Portadressen
werden
über
diverse
Konfigurationsdateien eingestellt. Somit wird dieser lose Modul-Verbund aufgehoben
und starr an ein bestimmtes Konfigurationsschema gebunden.
Der xFIND-Manager als zentrale Ansprechstelle, verteilt Anfragen an Gatherer und
Indexer. Er steuert und verwaltet auch die entsprechenden Sockets. So kann ein Server
maximal 255 Verbindungen halten. Auch muss jedes Modul einen eigenen Server und
Client zur Kommunikation bereitstellen.
Die Recherche von selbst organisierenden Peer-to-Peer Lösungen für verteilte
Suchsysteme aus dem Kapitel 6, bietet insbesondere für diesen Bereich interessante
Lösungen an. Aus diesem Grund wurde in Kapitel 9 das JXTA Protokoll Framework
analysiert. Mit JXTA ist durch den Austausch von Metadaten (Advertisements) eine recht
einfache Möglichkeit gegeben, um verschiedene Ressourcen in einem Netzwerk
anzubieten und diese auch aufzufinden.
Es denkbar, dass z.B. verteilte Gatherer, die thematisch ähnliche Bereiche absuchen,
zu gemeinsamen Themengruppen zusammengefasst werden. Das eigentliche Ziel,
Gatherer direkt bei den Informationsquellen zu installieren, bietet sich in diesem Fall sehr
gut an. Indexer könnten ebenfalls themenspezifisch in Gruppen zusammengefasst
werden. Themenselektive Suchanfragen könnten so mittels Broadcast innerhalb der
Themengruppen verteilt werden. Indexer müssen „ihre“ Gatherer nicht kennen, bzw. die
Verbindung zu Gatherer muss nicht starr sein. Eine Suche innerhalb des P2P Netzwerks
nach entsprechenden Gatherer-Advertisements würde ausreichen, um relevante Daten zu
erhalten.
Dasselbe Prinzip ist natürlich auch auf die Broker-Indexer Schnittstelle anwendbar. In
xFIND werden über das Web-UI drei verschiedene Suchinterfaces angeboten; Einfache
Suche, Erweiterte Suche und Profi Suche. Wenn speziell themenspezifische Filter nach
DDC oder ACM eingestellt sind, kann der Broker bereits eine Vorselektion von Indexer
durchführen, indem er spezifisch nur themenrelevante Indexer befragt. Die Selektion
erfolgt dabei über die Suche nach themenspezifischen Indexer-Advertisements.
Auch sind verschiedene Suchmechanismen denkbar. Sowohl eine Breitensuche als
auch die Tiefensuche ist realisierbar. Verschiedene Broker könnten untereinander
kommunizieren und gecachte Suchergebnisse austauschen. Die Suche innerhalb
themenspezifischer Gruppen (Indexer und Broker) entspricht dabei der Breitensuche.
Seite 167
Werden Suchanfragen an andere Themengruppen weitergeleitet, kann die Tiefensuche
realisiert werden. Jedoch erforder diese Erneuerung auch die Erweiterung der
Systemmodule. Mögliche auftretende Antwortduplikate müssten an verschiedenen Stellen
ausgefiltert werden.
10.5. Schlussbemerkung
Wie aus den vorangegangenen Abschnitten dieses Kapitel ersichtlich ist, gibt es eine
Reihe an Verbesserungsmöglichkeiten für die xFIND Sucharchitektur. Nicht nur der
notwendige Umbau der Kommunikationsschicht aufgrund sicherheitsrelevanter
Überlegungen, sondern auch eine verbesserte Konfiguration und implizit die
eigenständige Verwaltung der xFIND Module, könnte mit einfachen Mitteln realisiert
werden.
In einer ersten Phase sollte jedoch lediglich die Kommunikationsschicht angepasst und
modernisiert werden. Der Einsatz von BEEP als Datenübertragungsprotokoll zeigt sich
als vernünftige Alternative zum bestehenden Ansatz und sollte nicht allzu großen
Aufwand in der Umsetzung erfordern. Im Zuge des Umbaus könnte zu Versuchszwecken
auch an die Realisierung lokaler Schnittstellen gedacht werden, um die Effizienz der
lokalen Kommunikation steigern zu können.
In einer zweiten Umsetzungsphase sollte die Konfiguration vereinheitlicht und
verbessert werden. Der Einsatz von XML als Definitionssprache bietet zudem auch viele
Vorteile. XML-Editoren, Validierung mittels DTD oder XML-Schema sind nur einige
wenige Vorteile, die damit automatisch auf xFIND übertragen werden können.
Der Einsatz von JXTA oder einer ähnlichen Technologie, um die Verwaltung bzw. die
Konfiguration zu erleichtern, könnte in einer dritten Ausbaustufe erfolgen. Dabei sei aber
zu erwähnen, dass JXTA nicht in der Datenübertragung einzusetzen ist. JXTA sollte
lediglich der automatisierten Verwaltung der Module dienen. Die Datenübertragung muss
effizient bleiben. Auch sind die JXTA Protokolle noch nicht standardisiert. JXTA bietet
zumindest im Bereich Peer-to-Peer das größte Entwicklungspotential.
Seite 168
Seite 169
Kapitel 11
11. Zusammenfassung
Wissensauffindung im Internet ist ein Prozess, der meist über Suchsysteme
abgewickelt wird. Ein Benutzer stellt seine Anfragen an diese Suchsysteme und erhält
eine Reihe an Antworten. Der Prozess kann verallgemeinert auch als Information
Retrieval (IR) bezeichnet werden. Dieser IR Prozess läuft in seiner ursprünglichen Form
in einer gewöhnlichen Client-Server Beziehung ab. Der Client sucht Informationen, der
Server erzeugt die Antworten. Dies ist wiederum verallgemeinert, die Schwachstelle des
reinen Client-Server Paradigma.
Im Alltagsleben impliziert eine Suche die Fragestellung an einen Experten. Der
Experte liefert mehr oder weniger brauchbare Antworten. Das Wissen ist jedoch nicht
zentral bei einem Experten vorhanden, sondern liegt verteilt vor. Um auf den
Wissensstand anderer Experten zugreifen zu können, bedarf es eines angepassten,
verteilten IR Prozesses. Diese Feststellung trifft natürlich auch auf die Wissensauffindung
im Internet wieder. Die Quellen liegen geographisch verteilt vor und können nicht von
einem zentralen System verwaltet oder durchsucht werden.
Zudem steigt das Informationsaufkommen im Internet stetig. Die momentan
gängigsten Suchmaschinen wie z.B. Google oder Yahoo, arbeiten nur effizient bei
statischen und sich langsam ändernden Inhalten. Die grundsätzliche Idee von xFIND ist,
nur themenspezifische Quellen anzubieten. Der Vorteil des xFIND Ansatzes liegt in der
Einbeziehung von dynamischen Größen, wie z.B. die Lebensdauer einer Seite. Zudem
kann mit speziellen Methoden auch der Inhalt des Deep-Web zur Suche angeboten
werden. Über weitere Module kann z.B. eine automatisierte Themenklassifizierung
durchgeführt werden. Zudem bietet xFIND die Möglichkeit, Quellen mit zusätzlichen
Metainformationen zu bewerten.
Der Vergleich zentraler Ansatz zu verteiltem Ansatz zeigt doch deutliche
Unterschiede auf. Vorteile und Nachteile der jeweiligen Architekturen können aus diesen
Unterschieden einfach abgeleitet werden. Speziell für den verteilten Ansatz gibt es jedoch
viele unterschiedliche Topologie Formen. Um die Problembereiche identifizieren zu
können, werden grundlegende Elemente verteilter Ansätze untersucht. Aktuelle
Middleware Technologien liefern wichtige Erkenntnisse, sowie einige Lösungen. Der
zentrale Ansatz ist einfach, effizient, jedoch schlecht erweiterbar und schlecht skalierbar.
Der verteilte Ansatz ist hingegen fehlertolerant, ausfallsicherer, gut erweiterbar, je nach
Technologie hoch skalierbar, erfordert dafür aber auch einen höheren
Verwaltungsaufwand
und
verursacht
meist
einen
Overhead
in
der
Kommunikationseinheit.
Das Ziel dieser Diplomarbeit, die Kommunikationsschnittstellen von xFIND zu
verbessern, führte zu einer näheren Analyse bereits bestehender Lösungen. Insbesondere
wurde der Fokus auf standardisierte Technologien gelegt, die in verteilten Anwendungen
Seite 170
Kapitel 11 - Zusammenfassung
einsetzbar sind. Gründe für die Forderung nach Standards sind die größere Akzeptanz, die
Widerverwendbarkeit, die einfache Erweiterbarkeit, die Modularisierung und eine bessere
Wartbarkeit der Softwareprodukte. Die Analyse gängiger Middleware Technologien in
diesem Bereich liefert auch für diesen Untersuchungsbereich viele interessante
Ergebnisse. Als wohl wichtigste Erkenntnis aus diesem Untersuchungsbereich geht
hervor, dass sowohl in der Datenübertragung, als auch im Kommunikationsbereich XML
basierte Technologien bevorzugt eingesetzt werden.
XML ist eine heterogene Beschreibungssprache. XML ist standardisiert, weit
verbreitet, einfach verarbeitbar, human-readable bzw. machine-readable und einfach zu
erweitern. Dies sind nur einige Vorzüge von XML. Aus diesem Grund wurden speziell
XML-basierte Transport- und Übertragungsprotokolle in einem eigenen
Untersuchungsbereich vorgestellt und analysiert. Um einen besseren Überblick über die
Ergebnisse dieser Untersuchung zu erlangen, wurden die wichtigsten Eigenschaften der
analysierten Protokolle in tabellarischer Form zusammengefasst. Wichtige Kernpunkte
dieser Gegenüberstellung sind: Erweiterbarkeit, Datentransport, Widerverwendbarkeit,
Fehlerbehandlung, Standardisierung, Sicherheit, Authentifikation und das Einsatzgebiet.
Um eine Vorauswahl für eine spezifischere Analyse geeigneter Protokolle zur
Verbesserung der xFIND Kommunikationsschicht treffen zu können, wurden bestehende
Ansätze zur verteilten Suche im Internet vorgestellt. Neben den beiden Modul basierten
Systemen Harvest und xFIND liefern insbesondere moderne Peer-to-Peer (P2P) Ansätze
wie Freenet, FASD oder JXTA interessante Verbesserungsmöglichkeiten für die xFIND
Systemarchitektur.
Von Beginn an war der verteilte Modul Ansatz fixer Bestandteil in der xFIND System
Architektur. Einzelne Module wie Gatherer oder Indexer können auf verschiedenen
Rechnern installiert werden. Die Kommunikation, bzw. der Datenabgleich erfolgt über
das proprietäre xQCF Format. xQCF ist weder standardisiert, noch ist es kompatibel zu
anderen gängigen Formaten. Um diese Schwachstellen verbessern zu können, wurde eine
eingehende technische Analyse der xFIND Kommunikationsschicht durchgeführt. In
einer Testapplikation wurden anhand Benchmark Tests, Kennwerte zum Vergleich mit
anderen Technologien erstellt.
Als Ergebnis der verschiedenen Untersuchungen zeigte sich, dass das
Übertragungsprotokoll BEEP als geeignetste alternative Technologie im Bereich der
Datenübertragung für xFIND einzusetzen ist. In weiterer Folge wurde das Protokoll
BEEP einer näheren technischen Analyse unterzogen. Kenndaten der BEEP Architektur
konnten mit Hilfe spezieller Testimplementierungen und diversen Benchmark Tests
gewonnen werden. Diese Kenndaten wurden für einen direkten Vergleich mit der xFIND
Technologie
herangezogen.
BEEP
bietet
aufgrund
seiner
Spezifikation,
Sicherheitsaspekte wie Transportsicherheit und Authentifikation bereits in seiner
Basisfunktionalität an. Diese Basiseigenschaften und die Analyse der Ergebnisse aus den
Benchmark Tests, bzw. der Vergleich mit xFIND zeigt, dass BEEP aufgrund des
einfachen Aufbaus ohne großen Aufwand in die xFIND Architektur zu integrieren ist.
Aus der eingehenden technischen Analyse der xFIND System Architektur,
kristallisierte sich noch ein weiterer großer Problembereich heraus. Durch den verteilten
Architekturansatz ist auch die Verwaltung und Konfiguration der Module recht
kompliziert und umfangreich. Zudem erfordert diese Verwaltung enormes Spezialwissen.
Verschiedene verteilte Suchsysteme auf Basis P2P bieten hinsichtlich der Verwaltung
neue Ideen und Lösungsansätze. Die Selbstverwaltung und Selbstorganisation dieser P2P
Netzwerke könnte Ansatzweise auch auf die xFIND Architektur übertragen werden.
Seite 171
Die verschiedensten Analysen haben gezeigt, dass das JXTA Protokollframework für
diese Architekturerweiterung am besten geeignet ist. Die wichtigsten Erkenntnisse aus
einer eingehenden technischen Analyse und Testphase sind:
• Es werden keine speziellen Clients oder Server benötigt.
• Die Module sind über Advertisements (Metadatenbeschreibungen) virtuell
miteinander verbunden.
• Alle beteiligten Stellen (Module) sind gleichberechtigt.
• Die Grundkonfiguration der Module kann weitestgehend unverändert bleiben.
• Eine „echte“ verteilte Suche ist über die Bildung mehrerer themenspezifischer
Gruppierungen möglich.
• Dies implizit eine P2P Lösung für die xFIND Module.
JXTA auf xFIND abgebildet erfordert jedoch einen geringen Umbau im xFIND
Design. Zum einen müssen einige Schnittstellen erweitert werden und zum anderen
werden neue Algorithmen benötigt, die z.B. auftretende Datenredundanzen vermeiden.
Mit diesen neuen Schnittstellen sind die Aufgaben der jeweiligen Module zusätzlich auch
als offene Services ansprechbar. Gleichartige Module können aufgrund der JXTA Peer
Group Eigenschaft, recht einfach zu stärkeren Verbunden vereint werden.
Der Größte Vorteil ergibt sich aber aus der automatisierten Verwaltung der Module.
Anhand zweier Testimplementierungen wird gezeigt, dass die Suche nach spezifischen
Diensten anhand einfacher Prinzipien erstellt werden kann. Eine Integration der JXTA
Technologie in xFIND bzw. eine Anpassung der xFIND Module erfordert jedoch einigen
zusätzlichen Testaufwand. Deshalb wird vorgeschlagen, spezielle Testimplementierungen
für Folgeprojekte vorzubereiten.
Sämtliche Verbesserungsvorschläge zur Erweiterung des xFIND Systems wurden
eigens in einer thematisch getrennten Übersicht zusammengefasst. In dieser Übersicht
werden konkrete Vorschläge zur Erweiterung der internen und der externen
Kommunikationsschicht gegeben. Für eine einheitlichere Konfiguration bzw. Verwaltung
wurden Ideen und Lösungsansätze erstellt. Folgeprojekte könnten die Ansätze und Ideen
der automatisierten Modulverwaltung umsetzen. Da diese Vorschläge die
Systemarchitektur erweitern, bedarf es deshalb eigener Testphasen vor der eigentlichen
Umsetzung.
Der Autor dieser Arbeit hofft, dass die gesammelten Daten, gewonnenen Erkenntnisse
und Vorschläge, als Basis und Nachschlagewerk für künftige Projekte zur Verbesserung
des xFIND Suchsystems dienlich sein können.
Seite 172
Seite 173
III Anhang
Seite 174
Seite 175
Anhang A
12. QCF-Spezifikation
12.1. Allgemeines
12.1.1. QCF Platzhalter
•
•
•
•
•
%d: for numbers in decimal format (in JAVA: Integer)
%x: for numbers in hexadecimal format (in JAVA: Integer)
%o: for numbers in octal format (in JAVA: Integer)
%f: for numbers in floating point format (in JAVA: Float)
%s: for strings (in JAVA: String)
12.1.2. QCF WildCards
•
•
•
•
<&QCF-KEY-Name>: a defined QCF-Key
<&REQUEST-KEY-Name>: a key that was sent to "me"
<&DOCTAG-Name>: a "TAG" like a META-TAG in HTML from the document content
<&ID-Number>: a number for the keys
12.1.3. QCF-Keys
•
•
•
•
•
•
•
•
•
[xFIND.QCF.<&QCF-KEY-Name>]: a simple QCF-Key. It contains all sub-fields of this key. that
means it has no visible data itself only other nested "sections"
[xFIND.QCF.<&QCF-KEY-Name>.QCFExplanation]: a short explanation in simple words. It could be
shown to the user/administrator as well if desired. Multiple lines are possible.
[xFIND.QCF.<&QCF-KEY-Name>.QCFMapping]: this key will be mapped to all listed QCF-Keys.
QCF-KEYs separated by NewLines (NL). If a mapped key is NOT defined by an own "section" the
current key is rejected by the system. Multiple lines are possible.
[xFIND.QCF.<&QCF-KEY-Name>.QCFExample]: a short example in simple words to describe a QCFKey. Multiple lines are possible.
[xFIND.QCF.<&QCF-KEY-Name>.QCFAllowedSections]: the "place" or "location" where the key may
be mentioned. If "location" is followed by [QCF-Key=="Value"] then the key xFIND.QCF.<&QCFKEY-Name> can only occur at this "location" when QCF-Key has this "Value". If "location" is followed
by [QCF-Key!="Value"] then the key xFIND.QCF.<&QCF-KEY-Name> must not occur at this
"location" when QCF-Key has this "Value". Multiple lines are possible.
[xFIND.QCF.<&QCF-KEY-Name>.QCFValues]: a set of possible values for this key. If the system
receives a value which is not included in this set, it has to reject this key. Multiple lines are possible.
[xFIND.QCF.<&QCF-KEY-Name>.QCFDefaultValue]: this value can be placed in the "value" of this
very key. It ia a single line.
[xFIND.QCF.<&QCF-KEY-Name>.QCFRequiredOperators]: for defineing dependencies. If keys need
operators they have to be placed in this section. QCFAllowedSections has to be set to: InternalUse.
Multiple lines are possible.
[xFIND.QCF.<&QCF-KEY-Name>.QCFAllowedSubKeys]: a list of all keys that can match the <&QCFKEY-Name>-Wildcard name. A Unix wild card (*) is allowed in the specified names. E.g.: Object.*
everything starting with Object matches. Multiple lines are possible.
Seite 176
Anhang A - QCF-Spezifikation
12.1.4. QCF Syntax
Items" on the left-hand side can only be followed by one of the "Items" on the right-hand side.
All "Items" are introduced in this file further down.
QCF-Key implies a Key/Value pair, where either Key or Value may be omitted.
QCF-SubKeys has type of: Object.*.Content.*
QUERY-START (^):
MARK( | QCF-Key
QUERY-END ($):
MARK) | QCF-Key | COMP | MOD)
QCF-Key:
QCF-SubKeys | OP | COMP | MARK) | MOD)
OP:
QCF-Key | MARK( | MOD | MOD(
COMP:
OP | MARK) | MOD(
MARK(:
QCF-Key | MARK(
MARK):
OP | MARK) | MOD(
MOD:
QCF-Key
MOD(:
QCF-Key
MOD):
OP | MARK)
12.1.5. QCF Request zwischen Client und Server (Machine readable)
{MARK}{(}{Object.Title}{Graz}{OP}{ANDNOT}{}{Karten}
{MARK}{)}{OP}{OR}
{Site.Title}{Landesregierung}{OP}{AND}{Object.LastModified}{931178718}
{COMP}{>=}{OP}{OR}
{MARK}{(}
{Object.Body}{Stadtverwaltung}{OP}{OR}{Object.Keyword}{Stadtverwaltung}
{MARK}{)}
{MOD}{(}
{Object.Weight.Keyword}{3}{Object.Weight.Body}{5}
{MOD}{)}
Query Attributes (default from the Indexer-Server, Broker-Server or local configfile):
{Object.Body.CharLimit}{1000}{Object.Body.ResultLimit}{3}
{Object.Body.FirstChars}{500}{Object.Keywords.ResultLimit}{}
{Object.Keywords.Percent}{1}{Object.Weight.Keyword}{9}
Return Attributes (default from the Indexer-Server, Broker-Server or local configfile):
{Object.Body}{}{Object.Title}{}
{Object.Body.URL}{}{Object.Keywords}{}
{Object.Weight.Keyword}{}
12.1.6. QCF Request zwischen Client und Server (Human readable)
((Object.Title=Graz) (OPERATOR=ANDNOT) (DEFAULT=Karten))
(OPERATOR=OR)
(Site.Title=Landesregierung) (OPERATOR=AND)
(Object.LastModified >= 931178718)
(OPERATOR=OR)
(MODIFY:
((Object.Body=Stadtverwaltung) (OPERATOR=OR)
(Object.Keyword=Stadtverwaltung) )
(Object.Weight.Keyword=3 AND Object.Weight.Body=5))
Query Attributes (default from the Indexer-Server, Broker-Server or local configfile):
Object.Body.CharLimit=1000 Object.Body.ResultLimit=3
Object.Body.FirstChars=500 Object.Weight.Keyword=9
Object.Keywords.ResultLimit=DEFAULT Object.Keywords.Percent=1
Return Attributes (default from the Indexer-Server, Broker-Server or local configfile):
Object.Body, Object.Body.URL, Object.Keywords,
Object.Title, Object.Weight.Keyword
Seite 177
12.1.7. QCF Request zwischen Server und Client
Statistics:
• (Error | Warning).<&REQUEST-Name>.Count or even more common like.
• (Error | Warning).Count tells how many errors or warnings occurred.
• The data itself is transmitted in the Footer later on.
• In a panic situation it is possible that the "Data-Part" of the errors/warnings is dropped!
• Stats.Hits | Stats.Costs | Stats.Error.Count | Stats.Warning.Count |
• Stats.SearchWord.<ID> | Stats.SearchWord.<ID>.Count |
• Stats.OldestObject | Stats.NewestObject | Stats.Language.Count |
• Stats.DifferentWebAreas
Results:
• are requested in the ReturnLayout field.
• results are returned as "OBJECTS"
• each object includes a set of SOIF-Attributes which consist of Key / Value pairs.
• additional QCF-KEYS could take place in an "OBJECT" as well.
ResultsFooter:
• possible main status could be: OK | Overload | Panic | Deny
• fields that were ignored or not understood from the search query are sent back.
• (here represented with <&REQUEST-Name>) in the following format
• (this format is easily extensible regarding additional messages, counters, IDs, explanations aso.):
12.2. Übersicht über die QCF-Keys
Die nachfolgende Aufstellung wurde aus der Programmers Dokumentation für xFIND
entnommen und entsprechend zusammengefasst. Die Einteilung der QCF-Keys erfolgt
anhand der 14 verschiedenen QCF-Sections. [xFIND 2003]
12.2.1. VERSION – Section
xFIND.QCF.Version.Major
xFIND.QCF.Version.Minor
xFIND.QCF.Version.PatchLevel
12.2.2. AUTH – Section
xFIND.QCF.Auth
xFIND.QCF.Auth.QCFExplanation
xFIND.QCF.Auth.QCFExample
xFIND.QCF.Auth.QCFAllowedSections
xFIND.QCF.Auth.SectionVersionNumber
xFIND.QCF.Auth.SectionVersionNumber.QCFExplanation
xFIND.QCF.Auth.SectionVersionNumber.QCFAllowedSections
xFIND.QCF.Auth.SectionVersionNumber.QCFValues
xFIND.QCF.Auth.SectionVersionNumber.QCFDefaultValue
xFIND.QCF.Auth.Host
xFIND.QCF.Auth.Host.QCFExplanation
xFIND.QCF.Auth.Host.QCFAllowedSections
xFIND.QCF.Auth.Host.QCFValues
xFIND.QCF.Auth.Host.QCFDefaultValue
xFIND.QCF.Auth.Port
xFIND.QCF.Auth.Port.QCFExplanation
xFIND.QCF.Auth.Port.QCFAllowedSections
xFIND.QCF.Auth.Port.QCFValues
xFIND.QCF.Auth.Port.QCFDefaultValue
Seite 178
Anhang A - QCF-Spezifikation
xFIND.QCF.Auth.Realm
xFIND.QCF.Auth.Realm.QCFExplanation
xFIND.QCF.Auth.Realm.QCFAllowedSections
xFIND.QCF.Auth.Realm.QCFValues
xFIND.QCF.Auth.Realm.QCFDefaultValue
xFIND.QCF.Auth.Protocol
xFIND.QCF.Auth.Protocol.QCFExplanation
xFIND.QCF.Auth.Protocol.QCFAllowedSections
xFIND.QCF.Auth.Protocol.QCFValues
xFIND.QCF.Auth.Protocol.QCFDefaultValue
xFIND.QCF.Auth.Username
xFIND.QCF.Auth.Username.QCFExplanation
xFIND.QCF.Auth.Username.QCFAllowedSections
xFIND.QCF.Auth.Username.QCFValues
xFIND.QCF.Auth.Username.QCFDefaultValue
xFIND.QCF.Auth.Password
xFIND.QCF.Auth.Password.QCFExplanation
xFIND.QCF.Auth.Password.QCFAllowedSections
xFIND.QCF.Auth.Password.QCFValues
xFIND.QCF.Auth.Password.QCFDefaultValue
xFIND.QCF.Auth.Account
xFIND.QCF.Auth.Account.QCFExplanation
xFIND.QCF.Auth.Account.QCFAllowedSections
xFIND.QCF.Auth.Account.QCFValues
xFIND.QCF.Auth.Account.QCFDefaultValue
xFIND.QCF.Auth.Secure
xFIND.QCF.Auth.Secure.QCFExplanation
xFIND.QCF.Auth.Secure.QCFAllowedSections
xFIND.QCF.Auth.Secure.QCFValues
xFIND.QCF.Auth.Secure.QCFDefaultValue
xFIND.QCF.Auth.Type
xFIND.QCF.Auth.Type.QCFExplanation
xFIND.QCF.Auth.Type.QCFAllowedSections
xFIND.QCF.Auth.Type.QCFValues
xFIND.QCF.Auth.Type.QCFDefaultValue
12.2.3. ERROR - Section
xFIND.QCF.Error.SectionVersionNumber
xFIND.QCF.Error.SectionVersionNumber.QCFExplanation
xFIND.QCF.Error.SectionVersionNumber.QCFAllowedSections
xFIND.QCF.Error.SectionVersionNumber.QCFValues
xFIND.QCF.Error.SectionVersionNumber.QCFDefaultValue
xFIND.QCF.Error.Key.<&REQUEST-KEY-Name>
xFIND.QCF.Error.Key.<&REQUEST-KEY-Name>.QCFExplanation
xFIND.QCF.Error.Key.<&REQUEST-KEY-Name>.QCFExample
xFIND.QCF.Error.Key.<&REQUEST-KEY-Name>.QCFAllowedSections
xFIND.QCF.Error.Key.<&REQUEST-KEY-Name>.QCFValues
xFIND.QCF.Error.Explanation.<&REQUEST-KEY-Name>
xFIND.QCF.Error.Explanation.<&REQUEST-KEY-Name>.QCFExplanation
xFIND.QCF.Error.Explanation.<&REQUEST-KEY-Name>.QCFExample
xFIND.QCF.Error.Explanation.<&REQUEST-KEY-Name>.QCFAllowedSections
xFIND.QCF.Error.Explanation.<&REQUEST-KEY-Name>.QCFValues
Seite 179
xFIND.QCF.Error.Message.<&REQUEST-KEY-Name>
xFIND.QCF.Error.Message.<&REQUEST-KEY-Name>.QCFExplanation
xFIND.QCF.Error.Message.<&REQUEST-KEY-Name>.QCFExample
xFIND.QCF.Error.Message.<&REQUEST-KEY-Name>.QCFAllowedSections
xFIND.QCF.Error.Message.<&REQUEST-KEY-Name>.QCFValues
xFIND.QCF.Error.ID.<&REQUEST-KEY-Name>
xFIND.QCF.Error.ID.<&REQUEST-KEY-Name>.QCFExplanation
xFIND.QCF.Error.ID.<&REQUEST-KEY-Name>.QCFExample
xFIND.QCF.Error.ID.<&REQUEST-KEY-Name>.QCFAllowedSections
xFIND.QCF.Error.ID.<&REQUEST-KEY-Name>.QCFValues
xFIND.QCF.Error.Type.<&REQUEST-KEY-Name>
xFIND.QCF.Error.Type.<&REQUEST-KEY-Name>.QCFExplanation
xFIND.QCF.Error.Type.<&REQUEST-KEY-Name>.QCFAllowedSections
xFIND.QCF.Error.Type.<&REQUEST-KEY-Name>.QCFValues
xFIND.QCF.Error.Recover.<&REQUEST-KEY-Name>
xFIND.QCF.Error.Recover.<&REQUEST-KEY-Name>.QCFExplanation
xFIND.QCF.Error.Recover.<&REQUEST-KEY-Name>.QCFExample
xFIND.QCF.Error.Recover.<&REQUEST-KEY-Name>.QCFAllowedSections
xFIND.QCF.Error.Recover.<&REQUEST-KEY-Name>.QCFValues
12.2.4. GATHERER – Section
xFIND.QCF.Gatherer.SectionVersionNumber
xFIND.QCF.Gatherer.SectionVersionNumber.QCFExplanation
xFIND.QCF.Gatherer.SectionVersionNumber.QCFAllowedSections
xFIND.QCF.Gatherer.SectionVersionNumber.QCFValues
xFIND.QCF.Gatherer.SectionVersionNumber.QCFDefaultValue
xFIND.QCF.Gatherer.Attributes
xFIND.QCF.Gatherer.Attributes.QCFExplanation
xFIND.QCF.Gatherer.Attributes.QCFAllowedSections
xFIND.QCF.Gatherer.Attributes.QCFValues
xFIND.QCF.Gatherer.Attributes.QCFDefaultValue
xFIND.QCF.Gatherer.Stats
xFIND.QCF.Gatherer.Stats.QCFExplanation
xFIND.QCF.Gatherer.Stats.QCFAllowedSections
xFIND.QCF.Gatherer.Stats.QCFValues
xFIND.QCF.Gatherer.Stats.QCFDefaultValue
xFIND.QCF.Gatherer.Timestamp
xFIND.QCF.Gatherer.Timestamp.QCFExplanation
xFIND.QCF.Gatherer.Timestamp.QCFAllowedSections
xFIND.QCF.Gatherer.Timestamp.QCFValues
xFIND.QCF.Gatherer.Timestamp.QCFDefaultValue
xFIND.QCF.Gatherer.URL
xFIND.QCF.Gatherer.URL.QCFExplanation
xFIND.QCF.Gatherer.URL.QCFAllowedSections
xFIND.QCF.Gatherer.URL.QCFValues
xFIND.QCF.Gatherer.URL.QCFDefaultValue
xFIND.QCF.Gatherer.WebAreas
xFIND.QCF.Gatherer.WebAreas.QCFExplanation
xFIND.QCF.Gatherer.WebAreas.QCFAllowedSections
xFIND.QCF.Gatherer.WebAreas.QCFValues
xFIND.QCF.Gatherer.WebAreas.QCFDefaultValue
Seite 180
12.2.5. OBJECT – Section
xFIND.QCF.Object.SectionVersionNumber
xFIND.QCF.Object.SectionVersionNumber.QCFExplanation
xFIND.QCF.Object.SectionVersionNumber.QCFAllowedSections
xFIND.QCF.Object.SectionVersionNumber.QCFValues
xFIND.QCF.Object.SectionVersionNumber.QCFDefaultValue
xFIND.QCF.Object.Cost
xFIND.QCF.Object.Cost.QCFExplanation
xFIND.QCF.Object.Cost.QCFAllowedSections
xFIND.QCF.Object.Cost.QCFValues
xFIND.QCF.Object.Body.Word
xFIND.QCF.Object.Body.Word.QCFExplanation
xFIND.QCF.Object.Body.Word.QCFAllowedSections
xFIND.QCF.Object.Body.Word.QCFValues
xFIND.QCF.Object.Body.Phrase
xFIND.QCF.Object.Body.Phrase.QCFExplanation
xFIND.QCF.Object.Body.Phrase.QCFAllowedSections
xFIND.QCF.Object.Body.Phrase.QCFValues
xFIND.QCF.Object.Body.CharSurroundLimit
xFIND.QCF.Object.Body.CharSurroundLimit.QCFExplanation
xFIND.QCF.Object.Body.CharSurroundLimit.QCFAllowedSections
xFIND.QCF.Object.Body.CharSurroundLimit.QCFValues
xFIND.QCF.Object.Body.CharSurroundLimit.QCFDefaultValue
xFIND.QCF.Object.Body.MatchWord.Prepend
xFIND.QCF.Object.Body.MatchWord.Prepend.QCFExplanation
xFIND.QCF.Object.Body.MatchWord.Prepend.QCFAllowedSections
xFIND.QCF.Object.Body.MatchWord.Prepend.QCFValues
xFIND.QCF.Object.Body.MatchWord.Prepend.QCFDefaultValue
xFIND.QCF.Object.Body.MatchWord.Append
xFIND.QCF.Object.Body.MatchWord.Append.QCFExplanation
xFIND.QCF.Object.Body.MatchWord.Append.QCFAllowedSections
xFIND.QCF.Object.Body.MatchWord.Append.QCFValues
xFIND.QCF.Object.Body.MatchWord.Append.QCFDefaultValue
xFIND.QCF.Object.Body.ResultLimit
xFIND.QCF.Object.Body.ResultLimit.QCFExplanation
xFIND.QCF.Object.Body.ResultLimit.QCFAllowedSections
xFIND.QCF.Object.Body.ResultLimit.QCFValues
xFIND.QCF.Object.Body.ResultLimit.QCFDefaultValue
xFIND.QCF.Object.Body.FirstChars
xFIND.QCF.Object.Body.FirstChars.QCFExplanation
xFIND.QCF.Object.Body.FirstChars.QCFAllowedSections
xFIND.QCF.Object.Body.FirstChars.QCFValues
xFIND.QCF.Object.Body.FirstChars.QCFDefaultValue
xFIND.QCF.Object.Keyword
xFIND.QCF.Object.Keyword.QCFExplanation
xFIND.QCF.Object.Keyword.QCFAllowedSections
xFIND.QCF.Object.Keyword.QCFValues
xFIND.QCF.Object.Keywords.ResultLimit
xFIND.QCF.Object.Keywords.ResultLimit.QCFExplanation
xFIND.QCF.Object.Keywords.ResultLimit.QCFAllowedSections
xFIND.QCF.Object.Keywords.ResultLimit.QCFValues
xFIND.QCF.Object.Keywords.ResultLimit.QCFDefaultValue
Anhang A - QCF-Spezifikation
Seite 181
xFIND.QCF.Object.Keywords.PercentageLimit.Minimum
xFIND.QCF.Object.Keywords.PercentageLimit.Minimum.QCFExplanation
xFIND.QCF.Object.Keywords.PercentageLimit.Minimum.QCFAllowedSections
xFIND.QCF.Object.Keywords.PercentageLimit.Minimum.QCFValues
xFIND.QCF.Object.Keywords.PercentageLimit.Minimum.QCFDefaultValue
xFIND.QCF.Object.Keywords.PercentageLimit.Maximum
xFIND.QCF.Object.Keywords.PercentageLimit.Maximum.QCFExplanation
xFIND.QCF.Object.Keywords.PercentageLimit.Maximum.QCFAllowedSections
xFIND.QCF.Object.Keywords.PercentageLimit.Maximum.QCFValues
xFIND.QCF.Object.Keywords.PercentageLimit.Maximum.QCFDefaultValue
xFIND.QCF.Object.Meta
xFIND.QCF.Object.Meta.QCFExplanation
xFIND.QCF.Object.Meta.QCFAllowedWildcards
xFIND.QCF.Object.Meta.<&DOCTAG-Name>
xFIND.QCF.Object.Meta.<&DOCTAG-Name>.QCFExplanation
xFIND.QCF.Object.Meta.<&DOCTAG-Name>.QCFAllowedSections
xFIND.QCF.Object.Meta.<&DOCTAG-Name>.QCFValues
xFIND.QCF.Object.Meta.<&DOCTAG-Name>.QCFDefaultValue
xFIND.QCF.Object.Quality
xFIND.QCF.Object.Quality.QCFExplanation
xFIND.QCF.Object.Quality.QCFAllowedSections
xFIND.QCF.Object.Quality.QCFValues
xFIND.QCF.Object.Quality.QCFDefaultValue
xFIND.QCF.Object.Quality.Abstract
xFIND.QCF.Object.Quality.Abstract.QCFExplanation
xFIND.QCF.Object.Quality.Abstract.QCFAllowedSections
xFIND.QCF.Object.Quality.Abstract.QCFValues
xFIND.QCF.Object.Quality.Abstract.QCFDefaultValue
xFIND.QCF.Object.Quality.Body
xFIND.QCF.Object.Quality.Body.QCFExplanation
xFIND.QCF.Object.Quality.Body.QCFAllowedSections
xFIND.QCF.Object.Quality.Body.QCFValues
xFIND.QCF.Object.Quality.Body.QCFDefaultValue
xFIND.QCF.Object.Quality.Target
xFIND.QCF.Object.Quality.Target.QCFExplanation
xFIND.QCF.Object.Quality.Target.QCFAllowedSections
xFIND.QCF.Object.Quality.Target.QCFValues
xFIND.QCF.Object.Quality.Target.QCFDefaultValue
xFIND.QCF.Object.ResultLimit
xFIND.QCF.Object.ResultLimit.QCFExplanation
xFIND.QCF.Object.ResultLimit.QCFAllowedSections
xFIND.QCF.Object.ResultLimit.QCFValues
xFIND.QCF.Object.ResultLimit.QCFDefaultValue
xFIND.QCF.Object.Title
xFIND.QCF.Object.Title.QCFExplanation
xFIND.QCF.Object.Title.QCFAllowedSections
xFIND.QCF.Object.Title.QCFValues
xFIND.QCF.Object.Title.QCFDefaultValue
xFIND.QCF.Object.DC.Title
xFIND.QCF.Object.DC.Title.QCFExplanation
xFIND.QCF.Object.DC.Title.QCFMapping
xFIND.QCF.Object.DC.Title.QCFDefaultValue
Seite 182
Anhang A - QCF-Spezifikation
xFIND.QCF.Object.LOM.Title
xFIND.QCF.Object.LOM.Title.QCFExplanation
xFIND.QCF.Object.LOM.Title.QCFAllowedSections
xFIND.QCF.Object.LOM.Title.QCFMapping
xFIND.QCF.Object.LOM.Title.QCFDefaultValue
xFIND.QCF.Object.URL
xFIND.QCF.Object.URL.QCFExplanation
xFIND.QCF.Object.URL.QCFAllowedSections
xFIND.QCF.Object.URL.QCFValues
xFIND.QCF.Object.URL.QCFDefaultValue
xFIND.QCF.Object.URL.Text
xFIND.QCF.Object.URL.Text.QCFExplanation
xFIND.QCF.Object.URL.Text.QCFAllowedSections
xFIND.QCF.Object.URL.Text.QCFValues
xFIND.QCF.Object.URL.Text.QCFDefaultValue
xFIND.QCF.Object.Weight
xFIND.QCF.Object.Weight.QCFExplanation
xFIND.QCF.Object.Weight.QCFAllowedSections
xFIND.QCF.Object.Weight.QCFValues
xFIND.QCF.Object.Weight.QCFDefaultValue
xFIND.QCF.Object.Weight.Body
xFIND.QCF.Object.Weight.Body.QCFExplanation
xFIND.QCF.Object.Weight.Body.QCFAllowedSections
xFIND.QCF.Object.Weight.Body.QCFValues
xFIND.QCF.Object.Weight.Body.QCFDefaultValue
xFIND.QCF.Object.Weight.Keyword
xFIND.QCF.Object.Weight.Keyword.QCFExplanation
xFIND.QCF.Object.Weight.Keyword.QCFAllowedSections
xFIND.QCF.Object.Weight.Keyword.QCFValues
xFIND.QCF.Object.Weight.Keyword.QCFDefaultValue
xFIND.QCF.Object.Weight.Meta.<&DOCTAG-Name>
xFIND.QCF.Object.Weight.Meta.<&DOCTAG-Name>.QCFExplanation
xFIND.QCF.Object.Weight.Meta.<&DOCTAG-Name>.QCFAllowedSections
xFIND.QCF.Object.Weight.Meta.<&DOCTAG-Name>.QCFValues
xFIND.QCF.Object.Weight.Meta.<&DOCTAG-Name>.QCFDefaultValue
xFIND.QCF.Object.Weight.Title
xFIND.QCF.Object.Weight.Title.QCFExplanation
xFIND.QCF.Object.Weight.Title.QCFAllowedSections
xFIND.QCF.Object.Weight.Title.QCFValues
xFIND.QCF.Object.Weight.Title.QCFDefaultValue
xFIND.QCF.Object.LastModificationTime
xFIND.QCF.Object.LastModificationTime.QCFExplanation
xFIND.QCF.Object.LastModificationTime.QCFAllowedSections
xFIND.QCF.Object.LastModificationTime.QCFRequiredOperators
xFIND.QCF.<&QCF-KEY-Name>
xFIND.QCF.<&QCF-KEY-Name>.QCFAllowedSubKeys
xFIND.QCF.<&QCF-KEY-Name>.QCFExplanation
xFIND.QCF.<&QCF-KEY-Name>.QCFAllowedSections
xFIND.QCF.<&QCF-KEY-Name>.Content
xFIND.QCF.<&QCF-KEY-Name>.Content.QCFAllowedSubKeys
xFIND.QCF.<&QCF-KEY-Name>.Content.QCFExplanation
xFIND.QCF.<&QCF-KEY-Name>.Content.QCFAllowedSections
Seite 183
xFIND.QCF.<&QCF-KEY-Name>.Content.Type
xFIND.QCF.<&QCF-KEY-Name>.Content.Type.QCFAllowedSubKeys
xFIND.QCF.<&QCF-KEY-Name>.Content.Type.QCFExplanation
xFIND.QCF.<&QCF-KEY-Name>.Content.Type.QCFAllowedSections
xFIND.QCF.<&QCF-KEY-Name>.Content.Type.QCFValues
xFIND.QCF.<&QCF-KEY-Name>.Content.Type.QCFDefaultValue
xFIND.QCF.<&QCF-KEY-Name>.Content.Language
xFIND.QCF.<&QCF-KEY-Name>.Content.Language.QCFAllowedSubKeys
xFIND.QCF.<&QCF-KEY-Name>.Content.Language.QCFExplanation
xFIND.QCF.<&QCF-KEY-Name>.Content.Language.QCFAllowedSections
xFIND.QCF.<&QCF-KEY-Name>.Content.Language.QCFValues
xFIND.QCF.<&QCF-KEY-Name>.Content.Language.QCFDefaultValue
xFIND.QCF.<&QCF-KEY-Name>.Content.MIME
xFIND.QCF.<&QCF-KEY-Name>.Content.MIME.QCFAllowedSubKeys
xFIND.QCF.<&QCF-KEY-Name>.Content.MIME.QCFExplanation
xFIND.QCF.<&QCF-KEY-Name>.Content.MIME.QCFExample
xFIND.QCF.<&QCF-KEY-Name>.Content.MIME.QCFAllowedSections
xFIND.QCF.<&QCF-KEY-Name>.Content.MIME.QCFValues
xFIND.QCF.<&QCF-KEY-Name>.Content.MIME.QCFDefaultValue
xFIND.QCF.<&QCF-KEY-Name>.Content.MIMEVersion
xFIND.QCF.<&QCF-KEY-Name>.Content.MIMEVersion.QCFAllowedSubKeys
xFIND.QCF.<&QCF-KEY-Name>.Content.MIMEVersion.QCFExplanation
xFIND.QCF.<&QCF-KEY-Name>.Content.MIMEVersion.QCFAllowedSections
xFIND.QCF.<&QCF-KEY-Name>.Content.MIMEVersion.QCFValues
xFIND.QCF.<&QCF-KEY-Name>.Content.MD5
xFIND.QCF.<&QCF-KEY-Name>.Content.MD5.QCFAllowedSubKeys
xFIND.QCF.<&QCF-KEY-Name>.Content.MD5.QCFExplanation
xFIND.QCF.<&QCF-KEY-Name>.Content.MD5.QCFAllowedSections
xFIND.QCF.<&QCF-KEY-Name>.Content.MD5.QCFValues
xFIND.QCF.<&QCF-KEY-Name>.Content.MD5.QCFDefaultValue
xFIND.QCF.<&QCF-KEY-Name>.Content.Length
xFIND.QCF.<&QCF-KEY-Name>.Content.Length.QCFAllowedSubKeys
xFIND.QCF.<&QCF-KEY-Name>.Content.Length.QCFExplanation
xFIND.QCF.<&QCF-KEY-Name>.Content.Length.QCFAllowedSections
xFIND.QCF.<&QCF-KEY-Name>.Content.Length.QCFValues
xFIND.QCF.<&QCF-KEY-Name>.Content.Length.QCFDefaultValue
xFIND.QCF.<&QCF-KEY-Name>.Content.Encoding
xFIND.QCF.<&QCF-KEY-Name>.Content.Encoding.QCFAllowedSubKeys
xFIND.QCF.<&QCF-KEY-Name>.Content.Encoding.QCFExplanation
xFIND.QCF.<&QCF-KEY-Name>.Content.Encoding.QCFAllowedSections
xFIND.QCF.<&QCF-KEY-Name>.Content.Encoding.QCFValues
xFIND.QCF.<&QCF-KEY-Name>.Content.Encoding.QCFDefaultValue
xFIND.QCF.<&QCF-KEY-Name>.Content.Compression
xFIND.QCF.<&QCF-KEY-Name>.Content.Compression.QCFAllowedSubKeys
xFIND.QCF.<&QCF-KEY-Name>.Content.Compression.QCFExplanation
xFIND.QCF.<&QCF-KEY-Name>.Content.Compression.QCFAllowedSections
xFIND.QCF.<&QCF-KEY-Name>.Content.Compression.QCFValues
xFIND.QCF.<&QCF-KEY-Name>.Content.Compression.QCFDefaultValue
Seite 184
12.2.6. COMPARATOR – Section
xFIND.QCF.COMP.SectionVersionNumber
xFIND.QCF.COMP.SectionVersionNumber.QCFExplanation
xFIND.QCF.COMP.SectionVersionNumber.QCFAllowedSections
xFIND.QCF.COMP.SectionVersionNumber.QCFValues
xFIND.QCF.COMP.SectionVersionNumber.QCFDefaultValue
xFIND.QCF.COMP
xFIND.QCF.COMP.QCFExplanation
xFIND.QCF.COMP.QCFExample
xFIND.QCF.COMP.QCFAllowedSections
xFIND.QCF.COMP.QCFValues
xFIND.QCF.COMP.QCFDefaultValue
12.2.7. MARK - Section = Parenthesis
xFIND.QCF.MARK.SectionVersionNumber
xFIND.QCF.MARK.SectionVersionNumber.QCFExplanation
xFIND.QCF.MARK.SectionVersionNumber.QCFAllowedSections
xFIND.QCF.MARK.SectionVersionNumber.QCFValues
xFIND.QCF.MARK.SectionVersionNumber.QCFDefaultValue
xFIND.QCF.MARK
xFIND.QCF.MARK.QCFExplanation
xFIND.QCF.MARK.QCFExample
xFIND.QCF.MARK.QCFAllowedSections
xFIND.QCF.MARK.QCFValues
xFIND.QCF.MARK.QCFDefaultValue
12.2.8. OPERATOR – Section
xFIND.QCF.OP.SectionVersionNumber
xFIND.QCF.OP.SectionVersionNumber.QCFExplanation
xFIND.QCF.OP.SectionVersionNumber.QCFAllowedSections
xFIND.QCF.OP.SectionVersionNumber.QCFValues
xFIND.QCF.OP.SectionVersionNumber.QCFDefaultValue
xFIND.QCF.OP
xFIND.QCF.OP.QCFExplanation
xFIND.QCF.OP.QCFExample
xFIND.QCF.OP.QCFAllowedSections
xFIND.QCF.OP.QCFValues
xFIND.QCF.OP.QCFDefaultValue
12.2.9. QUERY – Section
xFIND.QCF.Query.SectionVersionNumber
xFIND.QCF.Query.SectionVersionNumber.QCFExplanation
xFIND.QCF.Query.SectionVersionNumber.QCFAllowedSections
xFIND.QCF.Query.SectionVersionNumber.QCFValues
xFIND.QCF.Query.SectionVersionNumber.QCFDefaultValue
xFIND.QCF.Query
xFIND.QCF.Query.QCFExplanation
xFIND.QCF.Query.QCFAllowedSections
xFIND.QCF.Query.QCFValues
xFIND.QCF.Query.QCFDefaultValue
xFIND.QCF.Query.Costs
xFIND.QCF.Query.Costs.QCFExplanation
xFIND.QCF.Query.Costs.QCFAllowedSections
Anhang A - QCF-Spezifikation
Seite 185
xFIND.QCF.Query.Costs.QCFValues
xFIND.QCF.Query.Costs.QCFDefaultValue
xFIND.QCF.Query.Costs.QCFRequiredOperators
xFIND.QCF.Query.Evaluation
xFIND.QCF.Query.Evaluation.QCFExplanation
xFIND.QCF.Query.Evaluation.QCFAllowedSections
xFIND.QCF.Query.Evaluation.QCFValues
xFIND.QCF.Query.Evaluation.QCFDefaultValue
xFIND.QCF.Query.Results.Min
xFIND.QCF.Query.Results.Min.QCFExplanation
xFIND.QCF.Query.Results.Min.QCFAllowedSections
xFIND.QCF.Query.Results.Min.QCFValues
xFIND.QCF.Query.Results.Min.QCFDefaultValue
xFIND.QCF.Query.Results.Max
xFIND.QCF.Query.Results.Max.QCFExplanation
xFIND.QCF.Query.Results.Max.QCFAllowedSections
xFIND.QCF.Query.Results.Max.QCFValues
xFIND.QCF.Query.Results.Max.QCFDefaultValue
xFIND.QCF.Query.Results.Offset
xFIND.QCF.Query.Results.Offset.QCFExplanation
xFIND.QCF.Query.Results.Offset.QCFAllowedSections
xFIND.QCF.Query.Results.Offset.QCFValues
xFIND.QCF.Query.Results.Offset.QCFDefaultValue
xFIND.QCF.Query.Results.ID
xFIND.QCF.Query.Results.ID.QCFExplanation
xFIND.QCF.Query.Results.ID.QCFAllowedSections
xFIND.QCF.Query.Results.ID.QCFValues
xFIND.QCF.Query.Results.ID.QCFDefaultValue
12.2.10. RESULT – Section
xFIND.QCF.Result.SectionVersionNumber
xFIND.QCF.Result.SectionVersionNumber.QCFExplanation
xFIND.QCF.Result.SectionVersionNumber.QCFAllowedSections
xFIND.QCF.Result.SectionVersionNumber.QCFValues
xFIND.QCF.Result.SectionVersionNumber.QCFDefaultValue
xFIND.QCF.Result
xFIND.QCF.Result.QCFExplanation
xFIND.QCF.Result.QCFAllowedSections
xFIND.QCF.Result.Object
xFIND.QCF.Result.Object.QCFExplanation
xFIND.QCF.Result.Object.QCFAllowedSections
xFIND.QCF.Result.Object.Body
xFIND.QCF.Result.Object.Body.QCFExplanation
xFIND.QCF.Result.Object.Body.QCFAllowedSections
xFIND.QCF.Result.Object.Body.QCFValues
xFIND.QCF.Result.Object.Body.QCFDefaultValue
xFIND.QCF.Result.Object.Number
xFIND.QCF.Result.Object.Number.QCFExplanation
xFIND.QCF.Result.Object.Number.QCFAllowedSections
xFIND.QCF.Result.Object.Number.QCFValues
xFIND.QCF.Result.Object.Number.QCFDefaultValue
Seite 186
xFIND.QCF.Result.Object.Title
xFIND.QCF.Result.Object.Title.QCFExplanation
xFIND.QCF.Result.Object.Title.QCFAllowedSections
xFIND.QCF.Result.Object.Title.QCFValues
xFIND.QCF.Result.Object.Title.QCFDefaultValue
xFIND.QCF.Result.Object.URL
xFIND.QCF.Result.Object.URL.QCFExplanation
xFIND.QCF.Result.Object.URL.QCFAllowedSections
xFIND.QCF.Result.Object.URL.QCFValues
xFIND.QCF.Result.Object.URL.QCFDefaultValue
xFIND.QCF.Result.Object.Quality
xFIND.QCF.Result.Object.Quality.QCFExplanation
xFIND.QCF.Result.Object.Quality.QCFAllowedSections
xFIND.QCF.Result.Object.Quality.QCFValues
xFIND.QCF.Result.Object.Quality.QCFDefaultValue
xFIND.QCF.Result.Object.Keywords
xFIND.QCF.Result.Object.Keywords.QCFExplanation
xFIND.QCF.Result.Object.Keywords.QCFExample
xFIND.QCF.Result.Object.Keywords.QCFAllowedSections
xFIND.QCF.Result.Object.Keywords.QCFValues
xFIND.QCF.Result.Object.Keywords.QCFDefaultValue
xFIND.QCF.Result.Hits
xFIND.QCF.Result.Hits.QCFExplanation
xFIND.QCF.Result.Hits.QCFAllowedSections
xFIND.QCF.Result.Hits.QCFValues
xFIND.QCF.Result.Hits.QCFDefaultValue
xFIND.QCF.Result.Hits.Returned
xFIND.QCF.Result.Hits.Returned.QCFExplanation
xFIND.QCF.Result.Hits.Returned.QCFAllowedSections
xFIND.QCF.Result.Hits.Returned.QCFValues
xFIND.QCF.Result.Hits.Returned.QCFDefaultValue
xFIND.QCF.Result.Site
xFIND.QCF.Result.Site.QCFExplanation
xFIND.QCF.Result.Site.QCFAllowedSections
xFIND.QCF.Result.Site.Body
xFIND.QCF.Result.Site.Body.QCFExplanation
xFIND.QCF.Result.Site.Body.QCFAllowedSections
xFIND.QCF.Result.Site.Body.QCFValues
xFIND.QCF.Result.Site.Body.QCFDefaultValue
xFIND.QCF.Result.Site.Quality
xFIND.QCF.Result.Site.Quality.QCFExplanation
xFIND.QCF.Result.Site.Quality.QCFAllowedSections
xFIND.QCF.Result.Site.Quality.QCFValues
xFIND.QCF.Result.Site.Quality.QCFDefaultValue
xFIND.QCF.Result.Site.Title
xFIND.QCF.Result.Site.Title.QCFExplanation
xFIND.QCF.Result.Site.Title.QCFAllowedSections
xFIND.QCF.Result.Site.Title.QCFValues
xFIND.QCF.Result.Site.Title.QCFDefaultValue
xFIND.QCF.Result.Site.URL
xFIND.QCF.Result.Site.URL.QCFExplanation
xFIND.QCF.Result.Site.URL.QCFAllowedSections
Anhang A - QCF-Spezifikation
Seite 187
xFIND.QCF.Result.Site.URL.QCFValues
xFIND.QCF.Result.Site.URL.QCFDefaultValue
xFIND.QCF.Result.ReturnLayout
xFIND.QCF.Result.ReturnLayout.QCFExplanation
xFIND.QCF.Result.ReturnLayout.QCFAllowedSections
xFIND.QCF.Result.ReturnLayout.QCFValues
xFIND.QCF.Result.ReturnLayout.QCFDefaultValue
12.2.11. SITE-DESCRIPTION – Section
xFIND.QCF.Site.SectionVersionNumber
xFIND.QCF.Site.SectionVersionNumber.QCFExplanation
xFIND.QCF.Site.SectionVersionNumber.QCFAllowedSections
xFIND.QCF.Site.SectionVersionNumber.QCFValues
xFIND.QCF.Site.SectionVersionNumber.QCFDefaultValue
xFIND.QCF.Site.Body
xFIND.QCF.Site.Body.QCFExplanation
xFIND.QCF.Site.Body.QCFAllowedSections
xFIND.QCF.Site.Body.QCFValues
xFIND.QCF.Site.Body.QCFDefaultValue
xFIND.QCF.Site.Title
xFIND.QCF.Site.Title.QCFExplanation
xFIND.QCF.Site.Title.QCFAllowedSections
xFIND.QCF.Site.Title.QCFValues
xFIND.QCF.Site.Title.QCFDefaultValue
xFIND.QCF.Site.URL
xFIND.QCF.Site.URL.QCFExplanation
xFIND.QCF.Site.URL.QCFAllowedSections
xFIND.QCF.Site.URL.QCFValues
xFIND.QCF.Site.URL.QCFDefaultValue
xFIND.QCF.Site.Quality
xFIND.QCF.Site.Quality.QCFExplanation
xFIND.QCF.Site.Quality.QCFAllowedSections
xFIND.QCF.Site.Quality.QCFValues
xFIND.QCF.Site.Quality.QCFDefaultValue
12.2.12. STATISTIC – Section
xFIND.QCF.Stats.SectionVersionNumber
xFIND.QCF.Stats.SectionVersionNumber.QCFExplanation
xFIND.QCF.Stats.SectionVersionNumber.QCFAllowedSections
xFIND.QCF.Stats.SectionVersionNumber.QCFValues
xFIND.QCF.Stats.SectionVersionNumber.QCFDefaultValue
xFIND.QCF.Stats.Hits
xFIND.QCF.Stats.Hits.QCFExplanation
xFIND.QCF.Stats.Hits.QCFAllowedSections
xFIND.QCF.Stats.Hits.QCFValues
xFIND.QCF.Stats.Hits.QCFDefaultValue
xFIND.QCF.Stats.Object.Hits
xFIND.QCF.Stats.Object.Hits.QCFExplanation
xFIND.QCF.Stats.Object.Hits.QCFAllowedSections
xFIND.QCF.Stats.Object.Hits.QCFValues
xFIND.QCF.Stats.Object.Hits.QCFDefaultValue
Seite 188
xFIND.QCF.Stats.Site.Hits
xFIND.QCF.Stats.Site.Hits.QCFExplanation
xFIND.QCF.Stats.Site.Hits.QCFAllowedSections
xFIND.QCF.Stats.Site.Hits.QCFValues
xFIND.QCF.Stats.Site.Hits.QCFDefaultValue
xFIND.QCF.Stats.Costs
xFIND.QCF.Stats.Costs.QCFExplanation
xFIND.QCF.Stats.Costs.QCFAllowedSections
xFIND.QCF.Stats.Costs.QCFValues
xFIND.QCF.Stats.Costs.QCFDefaultValue
xFIND.QCF.Stats.Error.Count
xFIND.QCF.Stats.Error.Count.QCFExplanation
xFIND.QCF.Stats.Error.Count.QCFAllowedSections
xFIND.QCF.Stats.Error.Count.QCFValues
xFIND.QCF.Stats.Error.Count.QCFDefaultValue
xFIND.QCF.Stats.Warning.Count
xFIND.QCF.Stats.Warning.Count.QCFExplanation
xFIND.QCF.Stats.Warning.Count.QCFAllowedSections
xFIND.QCF.Stats.Warning.Count.QCFValues
xFIND.QCF.Stats.Warning.Count.QCFDefaultValue
xFIND.QCF.Stats.DifferentWebAreas
xFIND.QCF.Stats.DifferentWebAreas.QCFExplanation
xFIND.QCF.Stats.DifferentWebAreas.QCFAllowedSections
xFIND.QCF.Stats.DifferentWebAreas.QCFValues
xFIND.QCF.Stats.DifferentWebAreas.QCFDefaultValue
xFIND.QCF.Stats.SearchWord.<&ID-Number>
xFIND.QCF.Stats.SearchWord.<&ID-Number>.QCFExplanation
xFIND.QCF.Stats.SearchWord.<&ID-Number>.QCFAllowedSections
xFIND.QCF.Stats.SearchWord.<&ID-Number>.QCFValues
xFIND.QCF.Stats.SearchWord.<&ID-Number>.QCFDefaultValue
xFIND.QCF.Stats.SearchWord.<&ID-Number>.Count
xFIND.QCF.Stats.SearchWord.<&ID-Number>.Count.QCFExplanation
xFIND.QCF.Stats.SearchWord.<&ID-Number>.Count.QCFAllowedSections
xFIND.QCF.Stats.SearchWord.<&ID-Number>.Count.QCFValues
xFIND.QCF.Stats.SearchWord.<&ID-Number>.Count.QCFDefaultValue
xFIND.QCF.Stats.OldestObject
xFIND.QCF.Stats.OldestObject.QCFExplanation
xFIND.QCF.Stats.OldestObject.QCFAllowedSections
xFIND.QCF.Stats.OldestObject.QCFValues
xFIND.QCF.Stats.OldestObject.QCFDefaultValue
xFIND.QCF.Stats.NewestObject
xFIND.QCF.Stats.NewestObject.QCFExplanation
xFIND.QCF.Stats.NewestObject.QCFAllowedSections
xFIND.QCF.Stats.NewestObject.QCFValues
xFIND.QCF.Stats.NewestObject.QCFDefaultValue
xFIND.QCF.Stats.Language.Count
xFIND.QCF.Stats.Language.Count.QCFExplanation
xFIND.QCF.Stats.Language.Count.QCFAllowedSections
xFIND.QCF.Stats.Language.Count.QCFValues
xFIND.QCF.Stats.Language.Count.QCFDefaultValue
Anhang A - QCF-Spezifikation
Seite 189
12.2.13. URL – Section
xFIND.QCF.URL.SectionVersionNumber
xFIND.QCF.URL.SectionVersionNumber.QCFExplanation
xFIND.QCF.URL.SectionVersionNumber.QCFAllowedSections
xFIND.QCF.URL.SectionVersionNumber.QCFValues
xFIND.QCF.URL.SectionVersionNumber.QCFDefaultValue
xFIND.QCF.URL
xFIND.QCF.URL.QCFExplanation
xFIND.QCF.URL.QCFAllowedSections
xFIND.QCF.URL.QCFValues
xFIND.QCF.URL.QCFDefaultValue
xFIND.QCF.URL.QCFRequiredOperators
12.2.14. WARNING – Section
xFIND.QCF.Warning.SectionVersionNumber
xFIND.QCF.Warning.SectionVersionNumber.QCFExplanation
xFIND.QCF.Warning.SectionVersionNumber.QCFAllowedSections
xFIND.QCF.Warning.SectionVersionNumber.QCFValues
xFIND.QCF.Warning.SectionVersionNumber.QCFDefaultValue
xFIND.QCF.Warning.Key.<&REQUEST-KEY-Name>
xFIND.QCF.Warning.Key.<&REQUEST-KEY-Name>.QCFExplanation
xFIND.QCF.Warning.Key.<&REQUEST-KEY-Name>.QCFExample
xFIND.QCF.Warning.Key.<&REQUEST-KEY-Name>.QCFAllowedSections
xFIND.QCF.Warning.Key.<&REQUEST-KEY-Name>.QCFValues
xFIND.QCF.Warning.Explanation.<&REQUEST-KEY-Name>
xFIND.QCF.Warning.Explanation.<&REQUEST-KEY-Name>.QCFExplanation
xFIND.QCF.Warning.Explanation.<&REQUEST-KEY-Name>.QCFExample
xFIND.QCF.Warning.Explanation.<&REQUEST-KEY-Name>.QCFAllowedSections
xFIND.QCF.Warning.Explanation.<&REQUEST-KEY-Name>.QCFValues
xFIND.QCF.Warning.Message.<&REQUEST-KEY-Name>
xFIND.QCF.Warning.Message.<&REQUEST-KEY-Name>.QCFExplanation
xFIND.QCF.Warning.Message.<&REQUEST-KEY-Name>.QCFExample
xFIND.QCF.Warning.Message.<&REQUEST-KEY-Name>.QCFAllowedSections
xFIND.QCF.Warning.Message.<&REQUEST-KEY-Name>.QCFValues
xFIND.QCF.Warning.ID.<&REQUEST-KEY-Name>
xFIND.QCF.Warning.ID.<&REQUEST-KEY-Name>.QCFExplanation
xFIND.QCF.Warning.ID.<&REQUEST-KEY-Name>.QCFExample
xFIND.QCF.Warning.ID.<&REQUEST-KEY-Name>.QCFAllowedSections
xFIND.QCF.Warning.ID.<&REQUEST-KEY-Name>.QCFValues
xFIND.QCF.Warning.Type.<&REQUEST-KEY-Name>
xFIND.QCF.Warning.Type.<&REQUEST-KEY-Name>.QCFExplanation
xFIND.QCF.Warning.Type.<&REQUEST-KEY-Name>.QCFAllowedSections
xFIND.QCF.Warning.Type.<&REQUEST-KEY-Name>.QCFValues
xFIND.QCF.Warning.Recover.<&REQUEST-KEY-Name>
xFIND.QCF.Warning.Recover.<&REQUEST-KEY-Name>.QCFExplanation
xFIND.QCF.Warning.Recover.<&REQUEST-KEY-Name>.QCFExample
xFIND.QCF.Warning.Recover.<&REQUEST-KEY-Name>.QCFAllowedSections
xFIND.QCF.Warning.Recover.<&REQUEST-KEY-Name>.QCFValues
Seite 190
Anhang B - xQMS Spezifikation
Anhang B
13. xQMS Spezifikation
xQMS steht für xFIND Quality Metadata Scheme. xQMS liegt zurzeit in der Version
V1.0 vor. Die vorliegende Version umfasst 34 Elemente die in zwei grobe
Unterkategorien unterteilt werden. Beschreibende Attribute und bewertende Attribute.
Die beschreibenden Attribute bzw. Elemente sind an den DDC und LOM Standard
angelehnt. Für die bewertenden Attribute sind diese Standards erweitert worden, um ein
„Rating“ der Quellen durch eine qualifizierte Person oder Organisation zu ermöglichen.
[Heber 2000]
Beschreibende Attribute:
xQMS.Creator.Person
xQMS.Creator.Organisation
verantwortlich ist
xQMS.Creator.Publisher
xQMS.Tech.Ident
xQMS.Tech.Scope
Webbereich)
xQMS.Tech.Signature
xQMS.Content.Type
xQMS.Content.Title
xQMS.Content.Topic
xQMS.Content.Alt_Topic
Schema
xQMS.Content.Alt_Classident
xQMS.Content.Keywords
xQMS.Content.Description
xQMS.Content.Quotation
xQMS.Content.Language
xQMS.Version.Number
xQMS.Version.Prev
xQMS.Version.Next
xQMS.Version.Create
xQMS.Version.Last_modified
Person, die den Inhalt der Ressource verfasst hat
Organisation, die für die Erstellung des
Inhaltes
Person, Organisation etc., die die Ressource zugänglich macht
Ort der Ressource (z.B. URL, URN, URI oder DOI)
Gültigkeitsbereich der Beschreibung (z.B. Webpage,
Checksumme für Kontrollzwecke
Art des Inhaltes der Ressource (z.B. Text, Audio)
Name der Ressource
Thema des Inhaltes der Ressource nach Dewey
zusätzliches Thema entsprechend dem nach genannten
zusätzlich verwendetes Klassifikationsschema
frei wählbare Schlüsselwörter zum Inhalt der Ressource
Zusammenfassung des Inhaltes der Ressource
Art und Weise, wie die Ressource zitiert werden soll
Sprache, in der Inhalt der Ressource verfasst ist
Versionsnummer der beschriebenen Ressource
Referenz der vorherigen Version, Angabe der URL
Referenz der folgenden Version, Angabe der URL
Datum der Erstellung
Datum der letzten Aktualisierung
Bewertende Attribute:
xQMS.Myop.Diction
xQMS.Myop.Audience.Age
xQMS.Myop.Audience.Knowledge
xQMS.Myop.Authority
xQMS.Myop.Accuracy.Depth
xQMS.Myop.Accuracy.Width
xQMS.Rating.Creator.Person
xQMS.Rating.Creator.Organisation
xQMS.Rating.Creator.Publisher
xQMS.Rating.Content.Language
xQMS.Rating.Version.Last_modiefied
xQMS.Rating.Version.Time_to_live
xQMS.Rating.Tech.Signature
Ausdruck, Stil der Sprache (z.B. einfach, anspruchsvoll)
empfohlenes Mindestalter der Zielgruppe
vorausgesetztes Vorwissen der Zielgruppe
Bewertung nach wissenschaftlichem Ansehen
Informationstiefe
Informationsbreite
Person, die die Bewertung durchführt
Bewertungsagentur
Organisation, die die Bewertung zugänglich macht
Sprache, in der die Bewertung verfasst ist
Datum der letzten Aktualisierung der Bewertung
Lebensdauer der Bewertung
verschlüsselte Signatur der Bewertung
Seite 191
Anhang C
14. Profiling Analyse Ergebnisse
Aus der Profiling Analyse wurden für die verschiedenen Testdurchlaufe die „CallTrees“ extrahiert. Diese zeigen Schematisch den strukturellen Ablauf des
Datentransportes. Aus Platzgründen bez. der Darstellung ist nur die Minimaldarstellung
der jeweiligen Call-Trees abgebildet. Vergrößerungen dieser Call-Trees sind auf der
beiliegenden CD-ROM enthalten.
14.1. Call Graph xFIND Client
Abbildung 14.1: xFIND-Client Call Graph Main Thread
Abbildung 14.2: xFIND-Client Call Graph Sender Thread
14.2. Call Graph xFIND Manager
Abbildung 14.3: xFIND-Manager Call Graph Main Thread
Seite 192
Anhang C - Profiling Analyse Ergebnisse
14.3. Call Graph BEEP Client N-N
Abbildung 14.4: Beep-Client Call Graph Main Thread
Abbildung 14.5: Beep-Client Call Graph Worker Thread 1
14.4. Call Graph BEEP Daemon N-N
Abbildung 14.6: Beep-Daemon Call Graph Worker Thread 1
Abbildung 14.7: Beep-Daemon Call Graph Worker Thread 2
Abbildung 14.8: Beep-Daemon Call Graph Worker Thread 3
Seite 193
Abbildung 14.9: Beep-Daemon Call Graph TCP Thread 1
14.5. Call Graph BEEP Client N-TLS
Abbildung 14.10: Beep-Client Call Graph TLS Main Thread
Abbildung 14.11: Beep-Client Call Graph TLS Worker Thread 1
Seite 194
Anhang D - Verzeichnisse
Anhang D
15. Verzeichnisse
15.1. Tabellenverzeichnis
Tabelle 2.1: Internet Wachstumsrate Jahr 2002 (http://www.netcraft.com/survey) ...........................................9
Tabelle 4.1: Übersicht über Topologien verteilter Anwendungen nach [Minar 2001][Minar 2002]................26
Tabelle 4.2: Unterschiede zwischen NFS und AFS/DFS – Systemen [Transarc 1996]. ..................................35
Tabelle 4.3: Übersicht der von ONE unterstützten Kernstandards [SUN 2001] ..............................................60
Tabelle 5.1: Eigenschaften von Transport Protokollen ....................................................................................96
Tabelle 7.1: Datenpaket des xFIND Server-Ticket ........................................................................................ 120
Tabelle 7.2: Datenpaket des xFIND Service-Requests .................................................................................. 120
Tabelle 7.3: Datenpaket des xFIND Data-Header.......................................................................................... 121
Tabelle 7.4: Datenpaket des xFIND Data-Footer........................................................................................... 121
Tabelle 7.5: Benchmark-Test Übertragungszeit xFIND Kommunikationsschicht ......................................... 123
Tabelle 8.1: Benchmark-Test BEEP ECHO-Profil, localhost PC1 ................................................................ 134
Tabelle 8.2: Benchmark-Test BEEP ECHO-Profil, remote (Client-PC2, Deamon-PC3) .............................. 135
Tabelle 8.3: Vergleich des Datendurchsatzes der Kommunikation von xFIND und BEEP ........................... 138
15.2. Listingverzeichnis
Listing 5.1: Beispiel einer BEEP Anfrage an einen Server [RFC 3080] ..........................................................84
Listing 5.2: Beispiel eines serialisierten XML-RPC Aufrufes [Userland] .......................................................85
Listing 8.1: BEEP Initialisierungsvorgang zwischen Client und Server [RFC 3080] .................................... 131
Listing 9.1: JXTA Discovery Query Schema [JXTA v2.0] ........................................................................... 144
Listing 9.2: JXTA Discovery Response Schema [JXTA v2.0] ...................................................................... 145
Listing 9.3: JXTA PIP Query Message Schema [JXTA v2.0] ....................................................................... 146
Listing 9.4: JXTA PIP Response Message Schema [JXTA v2.0].................................................................. 146
Listing 9.5: JXTA Pipe Advertisement Schema [JXTA v2.0] ....................................................................... 147
Listing 9.6: JXTA Pipe Resolver Message Schema [JXTA v2.0].................................................................. 147
Listing 9.7: JXTA Resolver Query Message Schema [JXTA v2.0]............................................................... 148
Listing 9.8: JXTA Resolver Response Schema [JXTA v2.0] ........................................................................ 148
Listing 9.9: JXTA Rendezvous Advertisement Schema [JXTA v2.0] ........................................................... 149
Listing 9.10: JXTA Rendezvous Propagate Message Schema [JXTA v2.0].................................................. 149
Listing 9.11: JXTA Route Advertisement Schema [JXTA v2.0]................................................................... 150
Listing 9.12: JXTA Route Query Message Schema [JXTA v2.0] ................................................................. 150
Listing 9.13: JXTA Route Response Message Schema [JXTA v2.0] ............................................................ 151
Listing 9.14: JXTA Peer Advertisement Schema [JXTA v2.0] ..................................................................... 152
Listing 9.15: JXTA Peer Group Advertisement Schema [JXTA v2.0] .......................................................... 152
Listing 9.16: JXTA Module Class Advertisement Schema [JXTA v2.0]....................................................... 153
Listing 9.17: JXTA Module Specification Advertisement Schema [JXTA v2.0] .......................................... 154
Listing 9.18: JXTA Module Implementation Advertisement Schema [JXTA v2.0] ...................................... 154
Listing 9.19: JXTA Framework starten ......................................................................................................... 157
Listing 9.20: Erstellen eines neuen JXTA Service......................................................................................... 160
Seite 195
15.3. Abbildungsverzeichnis
Abbildung 2.1: Wachstum des Internet (Anzahl an Webseiten) [Zakon 2002]..................................................8
Abbildung 2.2: Discovery vermittelt zwischen Dienstleister und Konsument [Ianella 1997]..........................10
Abbildung 3.1: Verteiltes System ohne Betriebssystemunterstützung [Weber 1998]......................................19
Abbildung 3.2: Netzwerkbetriebssystem [Weber 1998] ..................................................................................19
Abbildung 3.3: Verteiltes Betriebssystem [Weber 1998].................................................................................19
Abbildung 3.4: RPC - Funktionsweise [Weber 1998]......................................................................................21
Abbildung 3.5: RPC - OSI Schichtenmodell [Schlichter 2000] .......................................................................22
Abbildung 4.1: Struktur in einem AFS System mit eindeutiger Namensgebung [Transarc 1996]...................35
Abbildung 4.2: Granularität in Komponentenbasierter Softwareentwicklung [Fähnrich 2001].......................37
Abbildung 4.3: Architektur der DCE Systemumgebung [Nehmer et all 1998]................................................46
Abbildung 4.4: COM Schnittstelle: Schnittstellenzeiger, Methodenzeiger [Stal 1998] ...................................49
Abbildung 4.5: Schematischer Verbindungsaufbau im COM-Objektmodell [Koch 1998]..............................50
Abbildung 4.6: COM Objektreferenzierung mittels Proxy/Stub Technologie [Williams et all 1994] .............50
Abbildung 4.7: Architektur des DCOM Ansatzes [Horstmann 1997]..............................................................51
Abbildung 4.8: Isolierung Kritischer Prozesse und Auslagerung auf eigene Server [MS 1996]......................53
Abbildung 4.9: Lastverteilung mittels Brokermechanismus in DCOM [MS 1996] .........................................53
Abbildung 4.10: Entwicklung von Web-Services mit .NET Component Ware [Vawter et al. 2001] ..............55
Abbildung 4.11: J2EE Multi-Tier Applikationen [Bodoff et al. 2002] ............................................................57
Abbildung 4.12: Entwicklung von Web-Services mittels J2EE [Vawter et al. 2001] ......................................58
Abbildung 4.13: J2EE Server und Container [Bodoff et al. 2002]...................................................................59
Abbildung 4.14: Web-Service Architektur in der ONE Plattform [SUN 2001]...............................................61
Abbildung 4.15: ONE DART Modell zum effizienten Entwurf online basierter Dienste [SUN 2001] ...........61
Abbildung 4.16 Ein einfaches Dinopolis Objekt [Schmaranz 2002]................................................................63
Abbildung 4.17 Dinopolis System Architektur [Schmaranz 2002]..................................................................65
Abbildung 4.18: UDDI Business Registry [Sleeper 2001]...............................................................................67
Abbildung 4.19: Konzept möglicher UDDI Register Typen und deren Interaktionen [Stencil 2002]..............68
Abbildung 4.20: UDDI Register Schema [UDDI 2000] ..................................................................................69
Abbildung 5.1: Darstellung des abstrakten Protokollmodells [Gottswinter 1996]...........................................77
Abbildung 5.2: Designvergleich des BEEP Protokolls zu herkömmlichen Protokollen [RR 2002] ................83
Abbildung 5.3: XML-RPC Datenfluss [Userland]...........................................................................................85
Abbildung 5.4: Objektmethodenaufruf in SOAP über HTTP [Skribner et all 2001] .......................................88
Abbildung 5.5: Herkömmlicher Datentransfer im Internet, Seriell, fest verbunden [Jabber 2002a] ................90
Abbildung 5.6: Jabber Datentransfer: XML-Streaming, asynchron, lose gekoppelt [Jabber 2002a] ...............90
Abbildung 5.7: Jabber in Zusammenhang mit Firewall geschütztem Zugriff [Jabber 2002a]..........................90
Abbildung 5.8: Vereinfachte Architektur der Jabber Communication Plattform [Saint-Andre 2003] .............91
Abbildung 5.9: JXTA Core Protokollstruktur [Duigou 2003]..........................................................................93
Abbildung 6.1: Freenet Search Algorithmus [Clark et al. 2002]......................................................................99
Abbildung 6.2: JXTA Software Architektur [Gong 2002]............................................................................. 102
Abbildung 6.3: Netzwerk Architektur von JXTA Search [Waterhouse 2001] ............................................... 103
Abbildung 6.4: Verteilte Suche in JXTA Search [Waterhouse 2001]............................................................ 104
Abbildung 6.5: Verteilte Architektur eines Harvest Suchsystems [Bowman et al. 1995] .............................. 106
Abbildung 6.6: Verteilte Architektur des xFIND Suchsystems [Gütl 2002].................................................. 107
Abbildung 7.1: Datenfluss der xFIND Kommunikation zwischen Client und Server [xFIND 2003] ............ 117
Abbildung 7.2: Blockdarstellung der xFIND Indexer-Gatherer Kommunikation [xFIND 2003] .................. 118
Abbildung 7.3: Blockdarstellung einer Broker-Indexer Suchanfrage [xFIND 2003]..................................... 119
Abbildung 7.4: Blockdiagramm der xFIND Client-Server Simulation .......................................................... 122
Seite 196
Anhang D - Verzeichnisse
Abbildung 7.5: Kennlinien für Benchmark-Test xFIND Client-Server 1kB-200kB...................................... 124
Abbildung 7.6: Kennlinien für Benchmark-Test xFIND Client-Server 200kB-5MB .................................... 124
Abbildung 8.1: BEEP Frame Syntax [RFC 3080] ......................................................................................... 128
Abbildung 8.2: BEEP Sequence Frame Syntax [RFC 3081] ......................................................................... 129
Abbildung 8.3: Grafische Darstellung der BEEP Frame-Syntax ................................................................... 130
Abbildung 8.4: Blockdiagramm des BEEP Client-Server Testaufbaus ......................................................... 132
Abbildung 8.5: Kennlinien für Benchmark-Test BEEP ECHO-Profil, localhost-PC1................................... 134
Abbildung 8.6: Kennlinien für Benchmark-Test BEEP ECHO-Profil, remote (Client-PC2, Deamon-PC3) . 136
Abbildung 8.7: Profiling-Test, Speicherauslastung von xFIND (links) und BEEP (rechts)........................... 139
Abbildung 8.8: CPU Belastung und Speicherabbild von Windows Taskmanager für xFIND und BEEP ..... 139
Abbildung 9.1: JXTA Protokoll Stack [Wilson 2002] ................................................................................... 143
Abbildung 9.2: Blockdiagramm der JXTA Client-Server Testimplementierung ........................................... 157
Abbildung 9.3: Klassendiagramm der xFIND JXTA Testimplementierung .................................................. 158
Abbildung 14.1: xFIND-Client Call Graph Main Thread .............................................................................. 191
Abbildung 14.2: xFIND-Client Call Graph Sender Thread ........................................................................... 191
Abbildung 14.3: xFIND-Manager Call Graph Main Thread.......................................................................... 191
Abbildung 14.4: Beep-Client Call Graph Main Thread ................................................................................. 192
Abbildung 14.5: Beep-Client Call Graph Worker Thread 1 .......................................................................... 192
Abbildung 14.6: Beep-Daemon Call Graph Worker Thread 1....................................................................... 192
Abbildung 14.7: Beep-Daemon Call Graph Worker Thread 2....................................................................... 192
Abbildung 14.8: Beep-Daemon Call Graph Worker Thread 3....................................................................... 192
Abbildung 14.9: Beep-Daemon Call Graph TCP Thread 1............................................................................ 193
Abbildung 14.10: Beep-Client Call Graph TLS Main Thread ....................................................................... 193
Abbildung 14.11: Beep-Client Call Graph TLS Worker Thread 1 ................................................................ 193
Seite 197
15.4. Numerische Aufzählung von RFC Referenz Dokumenten
[RFC 791] [STD 5]
[RFC 822]
[RFC 850]
[RFC 977]
[RFC 1035]
[RFC 1036]
[RFC 1094]
[RFC 1123]
[RFC 1150] [FYI 1]
[RFC 1153]
[RFC 1264]
[RFC 1305]
[RFC 1311]
[RFC 1813]
[RFC 1818] [BCP 1]
[RFC 1866]
[RFC 2026]
[RFC 2076]
[RFC 2141]
[RFC 2223]
[RFC 2234]
[RFC 2251]
[RFC 2500]
[RFC 2629]
[RFC 2779]
[RFC 3000] [STD 1]
[RFC 3080]
[RFC 3081]
[RFC 3288]
[RFC 3529]
Internet Protocol DARPA Internet Program Protocol Specification
Standard for the format of ARPA INTERNET Text Messages
Standard for Interchange of USENET Messages
Network News Transfer Protocol
Domain Names - Implementation and Specification
Standard for Interchange of USENET Messages
NFS: Network File System Protocol Specification [RFC 1813]
Requirements for Internet Hosts -- Application and Support
F.Y.I. on F.Y.I.; Introduction to the F.Y.I. Notes
Digest Message Format
Internet Routing Protocol Standardization Criteria
Network Time Protocol (Version 3)
Introduction to the STD Notes
NFS Version 3 Protocol Specification
Best Current Practices
Hypertext Markup Language - 2.0
The Internet Standards Process -- Revision 3
Common Internet Message Headers
URN Syntax
Instructions to RFC Authors
Augmented BNF for Syntax Specifications: ABNF
Lightweight Directory Access Protocol (v3)
Internet Official Protocol Standards
Writing I-Ds and RFCs using XML
Instant Messaging / Presence Protocol Requirements
Internet Official Protocol Standards
The Blocks Extensible Exchange Protocol Core
Mapping the BEEP Core onto TCP
Using SOAP in BEEP
Using XML-RPC in BEEP
[STD 1] [RFC 3000]
[STD 5] [RFC 791]
Internet Official Protocol Standards
Internet Protocol DARPA Internet Program Protocol Specification
Seite 198
Anhang D - Verzeichnisse
15.5. Literatur und Quellenverzeichnis
[Aichriedler et al. 2000] Aichriedler, T.; Gütl, C.; Forstinger, H.; Heber, J.; Knögler, B.; Maurer, H.; Neussl,
D.; Reif, G.; Weizer, J.: WWW-Wissensorganisation, Forschungsbereicht an der
Technischen Universität Graz, IICM, Februar 2000, Last Visit: 01.04.2001;
http://www2.iicm.edu/cguetl/papers/km_www/wissen_end_v08.htm
[Balzert 2001]
Balzert, H.: Lehrbuch der Softwaretechnik – Softwareentwicklung, Verlag
Spektrum, April 2001, Band 1, 2. Auflage, S 858 - 870
[Birrel et al. 1993]
Birrel, D. A.; Hisgen, A.; Jerian, C.; Mann, T.; Swart, G.: The Echo
Distributed File System, digital SystemsResearch Center, 10.9.1993
[Bjorklund 1997]
Bjorklund G.: Transaction Logging Concepts, Engine Crew Monograph No.4,
Progress Software Corporation, Last Update: 20.07.1997 Last Visit: 07.10.2001;
http://www.peg.com/techpapers/monographs/logging/logging.html
[Bodoff et al. 2002]
Bodoff, S.; Green, D.; Haase, K.; Jendrock, E.; Pawlan, M.; Stearns, B.:
The J2EE Tutorial, Addison-Wesley, März 2002, S 1 – 20
[Booth et al. 2003]
Booth D.; Haas H.; McCabe F.; Newcomer I.; Champion M.; Ferris C.; Orchard
D.: Web Services Architecture, W3C Working Draft, August 2003, last Visit:
04.01.2004, last Update 08.08.2003; http://www.w3.org/TR/ws-arch/
[Bowman et al. 1995]
Bowman, C. M., Danzig, P. B.; Hardy, D. R.; Manber, U.; Schwartz, M. F.;
Wessels, D. P.: Harvest: A Scalable, Customizable Discovery and Access System,
Technical Report CU-CS-732-94, Department of Computer Science University of
Colorado - Boulder, März 1995, Last Visit: 30.05.2004;
http://www.codeontheroad.com/papers/Harvest.Jour.pdf
[Cailliau 1995]
Cailliau, R.: A Little History of the World Wide Web, from 1945 to 1995, W3C,
Last Update: 24.11.2001, Last Visit: 30.12.2002;
http://www.w3.org/History.html
[Cerami 2002]
Cerami E.: Web Services Essentials, O’Reilly, O’Reilly Online Catalog, Februar
2002, Kapitel 6 WSDL Essentials
[Chen 1995]
Chen G.: Distributed Transaction Processing Standards and their applications; CiTR
Technical Journal Volume 1 1996, Seiten 41-51; Computer Standards and Interfaces
17 1995, Seiten 363-373.
[Clark et al. 2002]
Clark. I.; Miller, S.: Protecting Free Expression Online with Freenet, IEEE
INTERNET COMPUTING,
[Dreßler 2002]
Dreßler S.: Daten - Information - Wissen – Bildung, Friedrich Nauman Stiftung,
Arbeitskreis Bildung der Stipendiaten; Last Update: 17.04.2002,
Last Visit: 20.03.2003; http://surjo.bei.t-online.de/seb.htm
[Duigou 2003]
Duigou M.: JXTA v2.0 Protocols Specification, draft-jxta-protocols-03, IETF,
15. Oktober 2003, Last Visit: 08.01.2003, Last Update: 15.10.2003;
http://spec.jxta.org/nonav/v1.0/docbook/JXTAProtocols.txt
[Fähnrich 2001]
Fähnrich, K. P.: Vorlesung Componentware, Universität Leipzig für Institut für
Informatik, Wintersemester 2001/2001, Last Visit: 07.10.2001 ;
http://pcai007.informatik.uni-leipzig.de
[Freismuth 2002]
Freismuth, D.: Peer-to-Peer Eintagsfliege oder Zukunftsmodell, IICM, Februar 2002
[Glossar 2003]
ARCHmatic – Alfons Oebbeke; ARCHmatic-Glossar und –Lexikon;
Lat Update: 07.03.2003, Last Visit: 20.03.2003;
http://www.glossar.de/glossar/z_verschluessel.htm
[Gong 2002]
Gong. L.: Project JXTA: A Technology Overview, Sun Microsystems, Inc., 29.
Oktober 2002, Last Visit: 15.10.2003;
http://www.jxta.org
Seite 199
[Gottswinter 1996]
Gottswinter, E.: Praktischer Einsatz einer SR-Testumgebung Projektbericht: Das
SR/Z39.50—1995 Protokoll, Universitätsbibliothek Karlsruhe, 12.01.1996,
Last Update: 30.01.1996, Last Visit: 17.10.2002;
http://www.ubka.uni-karlsruhe.de/dfg/bericht/node29.html
[Gütl 2002]
Gütl, C.: Ansätze zur modernen Wissensauffindung im Internet, Dissertation
an der Technischen Universität Graz, IICM, 09.2002, Last Update:
29.11.2002, Last Visit: 30.12.2002;
http://www.iicm.edu/thesis/cguetl_diss/diss_cguetl.pdf
[Hamilton 1997]
Hamilton, G.: JavaBeans API specification, Sun Microsystems, version 1.01,
Last Update: 25.08.2003, Last Visit: 30.05.2004;
http://java.sun.com/products/javabeans
[Hardy et al. 2002]
Hardy, D. R.; Schwartz, M. F.; Wessels, D.; Lee, K.: Harvest User's Manual,
Version 1.8, University of Edingburgh, 29. Oktober 2002, Last Visit: 30.05.2004;
http://harvest.sourceforge.net/harvest-1.8/doc/html/manual.html
[Hartmann 1999]
Hartmann, F.: Cyber.Philosophy, Medientheoretische Auslotungen, PassagenVerlag, unveränderte Neuauflage von 1996, Seiten 141-143
[Heber 2000]
Heber, J.: Knowledge Discovery Broker-Entwicklungsarbeiten für das xFINDSuchsystem, Diplomarbeit an der Technischen Universität Graz, IICM, 07.2000,
Last Update: 14.08.2000, Last Visit: 12.12.2004;
http://www.iicm.edu/thesis/jheber
[Hoffmann 2002]
Hoffmann, R.: Entwicklung einer benutzerunterstützten automatisierten
Klassifikation von Web – Dokumenten, Diplomarbeit an der Technischen
Universität Graz, IICM, Dezember 2002, Last Update: 13.03.2003, Last Visit:
14.06.2003; http://www.iicm.edu/thesis/rhoff
[Hofstetter et al. 2003]
Hofstetter S., Ilg A.: Einführung in ebXML, Bericht zum Fachseminar Information
und Kommunikation, Inst. f. Informationssysteme ETH Zürich, 25 Juni 2003, Last
Update: 25.06.2003, Last Visit: 02.01.2004;
http://n.ethz.ch/student/jodaniel/37-310/reports/ebxml-bericht_Ilg&Hofstetter.pdf
[Ianella 1997]
Ianella, R.: The Resource Discovery Poroject, Ariadne, März 1997,
Last Update: 17.03.1997, Last Visit: 20.02.2003;
http://www.ariadne.ac.uk/issue8/resource-discovery
[IFLANET 1995]
IFLANET: Models for Open System Protocol Development; UDT Series on Data
Communication Technologies and Standards for Libraries, International Federation
of Library Associations and Institutions, Last Update: 06.03.2003, Last Visit:
12.12.2004; http://www.ifla.org/VI/5/reports/rep6/68.htm
[Jabber 2001a]
Jabber: Jabber Communications Platform 1.2, Document J112, Product Guide,
Dezember 2001, Jabber Inc., Last Visit: 20.02.2003;
http://www.jabber.com/pdf/JCP_ProductGuide.pdf
[Jabber 2001b]
Jabber: Jabber Communications Platform Architecture Description, A technical
white paper, Dezember 2001, Jabber Inc., Last Visit: 20.02.2003
http://www.jabber.com/pdf/Jabber_Architecture.pdf
[Jabber 2002a]
Jabber: Jabber for Web Services: Extensible Messaging to Executable Internet,
Jänner 2002, white paper, Jabber Inc., Last Visit: 20.02.2003
http://www.jabber.com/pdf/Jabber_Messaging_Web_Services.pdf
[Jabber 2002b]
Jabber: Advantages of Jabber as a Platform for Developing Collaborative
Applications, Mai 2002, Jabber Inc., Last Visit: 20.02.2003
http://www.jabber.com/pdf/Jabber_Advantages.pdf
[JXTA v2.0]
JXTA v2.0 Protocols Specification, 2001-2002 SUN Microsystems, 2002-2003 The
Internet Society, Letzte Überarbeitung am 15. Oktober 2003, Revisionsnummer
2.1.1, Last Visit: 06.11.2004; http://spec.jxta.org/
[Knögler 1999]
Knögler, B.: Lokale Suchmaschine und Informationsaufbereitung für externe
Suchdienste, IICM TU-Graz, September 1999, Last Update: 02.10.2000, Last Visit:
16.06.2003; http://www.iicm.edu/thesis/knoegler
Seite 200
Anhang D - Verzeichnisse
[Koch 1998]
Koch, K.: Softwaretechnik für Ingenieuranwendungen: MFC COM ATL ActiveX
Tutorial, Bauhaus Universität Weimar, 1998
[Kon 1996]
Kon, F.: Distributed File Systems Past, Present and Future A Distributed File
System for 2006, Systems Software Research Group of Department of Computer
Science University of Illinois at Urbana-Champaign, 6 März 1996, Last Visit:
20.10.2001; http://choices.cs.uiuc.edu/~f-kon/publications.html
[Korpela 1999]
Korpela, J.: What are RFC’s, Dezember 1999, irt.org, Last Update: 03.12.2001,
Last Visit: 30.07.2002; http://tech.irt.org/articles/js197
[Kronfol 2002]
Kronfol, A.Y.: FASD: A Fault-tolerant, Adaptive, Scalable, Distributed Search
Engine, Princeton University, 6 Mai 2002, Last Visit: 31.05.2004;
http://www.cs.princeton.edu/~akronfol/fasd/
[Kunze et al. 1995]
Kunze, J. A.; Rodgers, R. P. C.: Z39.50 in a Nutshell (An Introduction to Z39.50),
Lister Hill National Center for Biomedical Communications National Library of
Medicine, Juli 1995, Last Update: 04.10.1996, Last Visit: 02.08.2001;
http://www.informatik.tu-darmstadt.de/VS/Infos/Protocol/Z39.50/z39.50-nutshell.html
[Lackner et al. 2001]
Lackner, W.; Gütl, C.: WebSave - Archiving the Web for Scholar Work, IICM TUGraz, Last Update: 21.02.2001, Last Visit: 31.12.2002;
http://www2.iicm.edu/0x811bc833_0x00638735
[Lamersdorf 1996]
Lamersdorf, W.: Middleware – Ein Überblick, Vorlesungsunterlagen, Universität
Hamburg, Arbeitsgruppe verteilte Systeme, 1996,
Last Update: 17.05.1996, Last Visit: 15.10.2003;
http://avs-www.informatik.uni-hamburg.de/teaching/ss-96/ss-96.html
[Lamport 1989]
Lamport, L.; Lynch, N.: Distributed Computing, Feber 1989, Seiten 2-10
[Larmouth 1999]
Larmouth, J.: ASN.1 Complete, October 1999, Morgan Kaufmann Publishers
[Leiner et al. 2000]
Leiner B.; M., Cerf V. G.; Clark D.; Kahn R., E.; Kleinrock L.; Lynch D., C.;
Postel J.; Roberts L., G.; Wolff S.: A Brief History of the Internet, Internet Society,
Last Update: 04.03.2002, Last Visit: 30.12.2002;
http://www.isoc.org/internet/history/brief.shtml
[Löwy 2001]
Löwy, J.: COM and .NET, Component Services, Erste Ausgabe, September 2001,
O’Reilly
[Maurer et al. 2000]
Maurer, H; Aichriedler, T.; Gütl, C.; Forstinger, H.; Heber, Knögler, B.; Neussl, D.;
Reif, G.; Weitzer, J: WWW-Wissensorganisation, Februar 2000, Forschungsbericht,
IICM TU-Graz,
[Minar 2001]
Minar, N.: Distributed Systems Topologies: Part 1, O’Reillys Open Source
Convention, Dezember 2001, Last Visit: 12.12.2004;
http://www.openp2p.com/lpt/a//p2p/2001/12/14/topologies_one.html
[Minar 2002]
Minar, N.: Distributed Systems Topologies: Part 2, O’Reillys Open Source
Convention, Juli 2002, Last Visit: 12.12.2004;
http://www.openp2p.com/lpt/a//p2p/2002/01/08/p2p_topologies_pt2.html
[Möller 2001a]
Möller, E.: Treffen unter Gleichen, Teil I: Napster, SETI, Freenet, Gnutella, espra
und Groove, Bericht von der O’Reilly Peer-to-Peer-Konferenz in San Francisco, 1416. Februar 2001, Telepolis, Heise Verlag, Februar 2001,
Last Updatet: 25.02.2002, Last Visit: 15.03.2003;
http://www.heise.de/tp/deutsch/inhalt/te/7008/1.html
[Möller 2001b]
Möller, E.: Treffen unter Gleichen oder die Zukunft des Internets, Teil II: JXTA,
Slashdot, Open-Source-Cola und Metadaten, Telepolis, Heise Verlag,
Last Updatet: 05.03.2001, Last Visit: 15.03.2003;
http://www.heise.de/tp/deutsch/inhalt/te/7051/1.html
[Möller 2001c]
Möller, E.: Sicherheit in Peer-to-Peer-Netzen, Telepolis, Heise Verlag, Juni 2001,
Last Updatet: 29.06.2001, Last Visit: 15.03.2003;
http://www.heise.de/tp/deutsch/inhalt/te/7972/1.html
Seite 201
[Möller 2001d]
Möller E.: Das Netz der Nutzer, Peer-to-Peer Netze auf dem Vormarsch, Juni 2001,
c’t, Heise Verlag, Last Updatet: 08.03.2001, Last Visit: 15.03.2003;
http://www.heise.de/ct/01/06/080
[Mullender 1993]
Mullender, S.: Distributed Systems, 1993, second Edition, M. Satyanarayanan –
Distributed File Systems Seiten 353-380, Addison-Wesley
[MS 1996]
Microsoft Corporation: DCOM Technical Overview, November 1996, Last Visit:
20.02.2003;
http://msdn.microsoft.com/library/en-us/dndcom/html/msdn_dcomtec.asp
[Nehmer et al. 1998]
Nehmer, J.; Sturm, P.; Schmitt. T: Middleware: Betriebssysteme der Zukunft,
Gemeinsames Seminar der AG Systemsoftware und Verteilte Systeme, Universität
Kaiserslautern, Universität Trier, Juni-Juli 1998, Last Visit: 15.03.2003;
http://bowmore.uni-trier.de/systemsoftware/Download/Seminare/Middleware/middleware.book.html
[Neubauer et al. 1998]
Neubauer, B.; Stoinski, F.: F@N - Ein verteiltes Dateisystem mit CORBA, Institut
für Informatik Humboldt-Universität zu Berlin, Diplomarbeit, 4 August 1998,
Seiten 6 – 12, http://www.hu-berlin.de/deutsch/stu_d.htm
[O’Reilly 2001]
O’Reilly, T.: Peer to Peer oder das Netz als Computer, O’Reilly Verlag, Deutsche
Übersetzung von Reinhard Gantar, 2001, Last Update: 02.07.2002, Last Visit:
12.12.2004; http://www.oreilly.de/artikel/peer_to_peer.html
[OSF 1991a]
OSF: File Systems in a Distributed Computing Environment, Open
Software Foundation, 1991, white paper;
http://www.transarc.ibm.com/Library/whitepapers/OSF_Whitepapers/dfs.ps
[OSF 1991b]
OSF: Remote Procedure Call in a Distributed Computing Environment, Open
Software Foundation, 1991, white paper;
http://www.transarc.ibm.com/Library/whitepapers/OSF_Whitepapers/rpc.ps
[OSF 1991c]
OSF: Directory Services for a Distributed Computing Environment, Open Software
Foundation, 1991, white paper;
http://www.transarc.ibm.com/Library/whitepapers/OSF_Whitepapers/directory.ps
[OSF 1991d]
OSF: Security in a Distributed Computing Environment, Open Software
Foundation, 1991, white paper;
http://www.transarc.ibm.com/Library/whitepapers/OSF_Whitepapers/security.ps
[Puder et al. 2000]
Puder, A.; Römer, K.: Middleware für verteilte Systeme, depunkt Verlag, Dezember
2000, Seiten 7-34 (verteilte Systeme, Middleware), Seiten 37ff (CORBA)
[Röder 1999]
Röder, L.: Komponentenentwicklung mit dem Component Object Model,
Objektspektrum Nr3, SIGS Conferences GmbH Juni 1999, Seite 18-25
[RR 2002]
RoadRunner: BEEP - Blocks Extensible Exchange Protocol, CodeFactory AB,
Last Update 2002, Last Visit: 04.01.2004; http://rr.codefactory.se/beep.php
[Saint-Andre 2002]
Saint-Andre P.; Jabber FAQ, 1 März 2002, Last Visit: 10.06.2002;
http://www.jabber.org/faq.htm
[Saint-Andre 2003]
Saint-Andre P.; Extensible Messaging and Presence Protocol (XMPP), XMPP
Working Group, Jabber Software Foundation, 20. November 2003, Last Update:
20.11.2003, Last Visit: 07.01.2004;
http://www.ietf.org/internet-drafts/draft-ietf-xmpp-core-20.txt
[Schlichter 2000]
Schlichter, J.: Verteilte Anwendungen;
München, Institut für Informatik, SS 2000
[Schmaranz 2001]
Schmaranz, K.: Softwareentwicklungen in Inter- und Intranetumgebungen, IICM,
Oktober 2001, Vorlesungsunterlagen
[Schmaranz 2002]
Schmaranz, K.: Dinopolis - A Massively Distributable Componentware System,
IICM, Juni 2002, Habilitation Thesis
Vorlesungs
Skript
der
TU-
Seite 202
Anhang D - Verzeichnisse
[Scribner et al. 2001]
Scribner, K.; Stiver, M.: SOAP developer’s guide, spezifikation, xml, BizTalkServer,
deutsche
Übersetzung
Petra
Alm,
2001,
Markt+Technik;
authorisierte Übersetzung der amerikanischen Originalausgabe: Understandig
SOAP – The autoritative Solution /2000/Sams Publishing
[Sleeper 2001]
Sleeper B.: Why UDDI Will Succeed, Quietly, The Stencil Group, April 2001, Last
Visit: 20.12.2002, Last Update: 04.2001;
http://www.stencilgroup.com/ideas_scope_200104uddi.html
[Stal 1998]
Stal, M.: COMmunication everywhere - Microsoft DCOM im Überblick,
Objektspektrum, SIGS Datacom, Ausgabe 01/1998
[Stallings 1998]
Stallings, W.: Operating Systems Internals and Design Principles, third
edition, Prentice-Hall International 1998, Seiten 543-576
[Stencil 2002]
The Stencil Group, The Evolution of UDDI, UDDI.org White Paper, 19. Juli 2002,
The Stencil Group, Inc., Last Visit: 06.01.2004, Last Update: 19.07.2002;
http://www.uddi.org/pubs/the_evolution_of_uddi_20020719.pdf
[SUN 2001]
SUN microsystems; Open Net Environment (ONE) Software Architecture,
Copyright 2001 Sun Microsystems Inc., 901 San Antonio Road, Palo Alto,
California 94303 U.S.A.,
[Szyperski 1998]
Szyperski, A. C.: Component Software: Beyond Object-Oriented
Programming, Addison-Wesley / ACM Press, first edition,
[Tanenbaum 1992]
Tanenbaum, A.: Modern Operating Systems, Prentice-Hall International Editions,
1992, Seiten 362-462, 549-587
[TechTarget 1999a]
TechTarget: ACID, 23.09.1999, TechTarget Enterprise IT, Last Visit: 17.04.2001;
http://iroi.seu.edu.cn/books/whatis/acid.htm
[TechTarget 1999b]
TechTarget: two/phase/commit 2pc, 13.10.1999, TechTarget Enterprise IT, Last
Visit: 17.04.2001; http://iroi.seu.edu.cn/books/whatis/2pc.htm
[TechTarget 1999c]
TechTarget: transaction, 29.11.1999, TechTarget Enterprise IT, Last Visit:
17.04.2001: http://iroi.seu.edu.cn/books/whatis/transac.htm
[Transarc 1996]
Transarc: The AFS File System In Distributed Computing Environments, Transarc
Corporation, white paper, Mai 1996, Last Visit: 17.04.2001;
http://www.transarc.ibm.com/Product/EFS/AFS/afswp.html
[Transarc 1999]
Transarc: DCE Product Overview, Transarc Corporation, 1999, last Last Visit:
17.04.2001
http://www.transarc.ibm.com/Product/DCE/DCEOverview/dceoverview.html
[Transarc et al.]
Transarc and IBM: Enterprise File Systems Strategy Paper, white paper, Last Visit:
17.04.2001; http://www.transarc.ibm.com/Library/whitepapers/efs_strategy.html
[UDDI 2000]
UDDI Technical White Paper, OASIS, 6. September 2000, Last Visit: 20.12.2002,
Last Update: 06.09
.2000; www.uddi.org/pubs/Iru_UDDI_Technical_White_Paper.pdf
[Userland]
XML-RPC Home Page: Last Update: 02.01.2004, Last Visit: 02.01.2004
http://www.xmlrpc.com/spec
[Vawter et al. 2001]
Vawter, C.; Roman, E.: J2EE vs. Microsoft .NET, a comparsion of building XMLbased web services, Sun Microsystems Inc. The Middleware Company, Juni 2001,
Last Visit: 02.01.2004; http://www.middleware-company.com
[Weber 1998]
Weber, M.: Verteilte Systeme; Spektrum
Hochschultaschenbuch, Seiten 1-18, 76-90
[W3C SOAP 2000]
Box, D.; Ehnebuske D.; Kakivaya G.; Layman A.; Mendelsohn N.;
Frystyk Nielsen H.; Thatte S.; Winer D.: Simple Object Access Protocol
(SOAP) 1.1, W3C Note, may 2000, Last Visit: 15.03.2001;
http://www.w3.org/TR/SOAP/
Akademischer
Verlag,
1998,
Seite 203
[W3C WSDL 2001]
Web Services Description Language (WSDL) 1.1, Ariba, International Business
Machines Corporation, Microsoft, W3C Note, 15. März 2001, Last Visit:
06.01.2004, Last Update: 15.03.2001; http://www.w3.org/TR/wsdl
[Waterhouse 2001]
Waterhouse, S.: JXTA Search: Distributed Search for Distributed Networks, Sun
Microsystems, Inc., 29 Mai 2001, Last Visit: 06.11.2004;
http://search.jxta.org
[Wendt 1991]
Wendt,
S.:
Nichtphysikalische
zweite Auflage, Springer 1991
[Williams et al. 1994]
Williams, S.; Kindel, C.: The Component Object Model: A Technical Overview,
Developer Relations Group Microsoft Corporation, MSDN Library, Microsoft
Corporation, Oktober 1994, Last Visit: 20.02.2003;
http://msdn.microsoft.com/library/en-us/dncomg/html/msdn_comppr.asp
[Wilson 2002]
Wilson, B.: JXTA, New Riders Publishing; 1 Ausgabe, 15 Juni 2002, Last Visit:
06.11.2004; http://www.brendonwilson.com/projects/jxta/
[xFIND 2003]
xFIND Programmers Documentation, IICM TU-Graz, Version 0.96c;
http://xfind.iicm.edu
[XHTML 2002]
W3C: XHTML 1.0: The Extensible HyperText Markup Language, Last Update:
01.08.2002, Last Visit: 02.01.2004; http://www.w3.org/TR/xhtml1
[Zakon 2002]
Zakon, R., H.: Hobbes' Internet Timeline, Hobbes' Internet Timeline Copyright (c)
1993-2002, Version: 5.6, Last Update: 01.04.2002, Last Visit: 30.12.2002;
http://www.zakon.org/robert/internet/timeline
Grundlagen
der
Informationstechnik,