Implementierung eines Simulators für verteilte Rechnersysteme mit

Werbung
Universität Rostock
Institut für Informatik
Lehrstuhl für Rechnerarchitektur
Diplomarbeit
Implementierung eines Simulators
für verteilte Rechnersysteme mit
beispielhafter Implementierung
eines assoziativen Speicherkonzeptes
von Dipl.-Ing.(FH) Henry Ristau
Erstgutachter
:
Zweitgutachter :
Betreuer
:
Datum
:
Prof. Dr-Ing. habil. Djamshid Tavangarian
Prof. Dr. rer. nat. habil. Peter Luksch
Dipl.-Inf. Daniel Versick, Dipl.-Inf. Ulrike Lucke
30.11.2004
Kurzfassung
In dieser Arbeit wird ein Modell zur Nachbildung verteilter Systeme, insbesondere
Systemen zur Speicherung großer Datenmengen, entworfen und ein Simulator entwickelt, der das Verhalten dieser Systeme auf Basis des Modells sehr genau nachbilden
kann.
Weiterhin wird ein bestehender Algorithmus zur verteilten assoziativen Datenspeicherung erweitert und auf diesem Simulator realisiert. Es werden Simulationen
durchgeführt, die dieses Speicherkonzept und die Erweiterungen hinsichtlich Skalierungsfähigkeit und Performance untersuchen.
Außerdem wird eine grafische Benutzerschnittstelle implementiert, die die Verteilung der Daten auf die einzelnen Knoten und die Funktionsweise des implementierten
Speicherkonzeptes veranschaulicht.
Abstract
In this thesis a model for distributed systems, especially systems for data-storage,
will be developed. Based on that model a simulator will be realised which is capable
to simulate the behaviour of distributed systems in much detail.
Moreover, an algorithm for distributed associative data access will be enhanced and
implemented on that simulator. Afterwards, the algorithm and enhancements will be
tested in simulation to determine performance and scaling features.
A graphical user interface in order to show the distribution of data onto every node
inside the system and the functionality of the algorithm will be implemented.
Stichworte und Klassifikation nach ACM
Stichworte:
Keywords:
Klassifikation:
Simulation, inhaltsadressierte Speicher, verteilte Systeme
simulation, content addressable memory, distributed systems
C.2.4. (Distributed Systems)
C.4. (Performance of Systems)
E.2. (Data Storage Representations)
I.6.0. (Simulation and Modeling)
I.6.5. (Model Development)
Inhaltsverzeichnis
1 Einleitung
1.1 Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2 Ziel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2.1 Simulator zur Nachbildung verteilter Rechnersysteme
1.2.2 Verteiltes Speicherkonzept . . . . . . . . . . . . . . .
1.2.3 Simulationen und Messungen . . . . . . . . . . . . .
2 Grundlagen
2.1 Peer-to-Peer . . . . . . . . . . . .
2.1.1 Peer-to-Peer als Konzept .
2.1.2 Peer-to-Peer-computing .
2.1.3 File-Sharing . . . . . . . .
2.2 Grid . . . . . . . . . . . . . . . .
2.2.1 Erste Generation . . . . .
2.2.2 Zweite Generation . . . .
2.2.3 Dritte Generation . . . . .
2.3 Assoziative Speicher . . . . . . .
2.3.1 Assoziationsfunktionen . .
2.3.2 Neuronale Netzwerke . . .
2.3.3 Inhaltsadressierte Speicher
2.4 Simulation . . . . . . . . . . . . .
2.4.1 System . . . . . . . . . . .
2.4.2 Modell . . . . . . . . . . .
2.4.3 Simulationsarten . . . . .
2.4.4 Pseudo-Zufall . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1
1
2
2
2
3
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
4
4
4
6
7
7
8
9
13
14
15
16
16
18
18
20
21
22
i
INHALTSVERZEICHNIS
INHALTSVERZEICHNIS
3 Bisherige Arbeiten
3.1 Simulatoren . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.1 P2psim und Myns . . . . . . . . . . . . . . . . . .
3.1.2 Peersim . . . . . . . . . . . . . . . . . . . . . . .
3.2 Algorithmen zur verteilten Speicherung von Daten . . . .
3.2.1 Technologien aus dem frühen File-Sharing-Umfeld
3.2.2 DHT-basierende Algorithmen . . . . . . . . . . .
3.2.3 Content-Addressable Network . . . . . . . . . . .
3.2.4 Chord . . . . . . . . . . . . . . . . . . . . . . . .
3.2.5 Distance Halving . . . . . . . . . . . . . . . . . .
4 Konzept
4.1 Die Simulation . . . . . . . . . . . . . . . .
4.1.1 Das simulierte System . . . . . . . .
4.1.2 Entwicklung eines geeigneten Modells
4.1.3 Simulationsumgebung . . . . . . . .
4.2 Algorithmenentwicklung . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
5 Implementation
5.1 Realisierung des Simulators . . . . . . . . . . .
5.1.1 Der Netzwerksimulator . . . . . . . . . .
5.1.2 Ein einzelner Speicherknoten . . . . . . .
5.2 Implementation des verteilten Speicherkonzeptes
5.2.1 Taskstruktur . . . . . . . . . . . . . . .
5.2.2 Graphische Schnittstelle . . . . . . . . .
5.3 Messungen . . . . . . . . . . . . . . . . . . . .
5.3.1 Topologie T1 . . . . . . . . . . . . . . .
5.3.2 Topologie T2 . . . . . . . . . . . . . . .
5.3.3 Simulationen . . . . . . . . . . . . . . .
6 Ergebnisse und Diskussion
6.1 Vergleich verschiedener Optionen . . . . .
6.1.1 Die Benutzung von L2N-Tabellen .
6.1.2 Die Verwaltung mehrerer Zonen pro
6.2 Skalierungsfähigkeit des Algorithmus’ . . .
6.2.1 Hinzufügen eines weiteren Knotens
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. . . . .
. . . . .
Knoten
. . . . .
. . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
24
24
25
25
25
26
27
28
32
34
.
.
.
.
.
37
37
37
38
41
43
.
.
.
.
.
.
.
.
.
.
47
47
47
49
49
50
51
51
51
54
54
.
.
.
.
.
58
58
58
61
62
62
ii
INHALTSVERZEICHNIS
6.3
6.4
6.2.2 Durchschnittliche Routingkomplexität . .
6.2.3 Zeitverhalten beim Speichern und Suchen .
Simulationsdauer . . . . . . . . . . . . . . . . . .
Erkenntnisse aus den Simulationen . . . . . . . .
INHALTSVERZEICHNIS
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
63
64
65
66
7 Zusammenfassung
68
8 Ausblick
70
Abkürzungsverzeichnis
71
Literaturverzeichnis
73
Abbildungsverzeichnis
77
A Messergebnisse Simulationsreihe 1
A.1 Simulationsreihe 1 auf Topologie T1 . . . . . . . . . . . . . . . . . . . .
A.2 Simulationsreihe 1 auf Topologie T2 . . . . . . . . . . . . . . . . . . . .
80
80
80
B Messergebnisse Simulationsreihe 2
B.1 Simulationsreihe 2 auf Topologie T1 . . . . . . . . . . . . . . . . . . . .
B.2 Simulationsreihe 2 auf Topologie T2 . . . . . . . . . . . . . . . . . . . .
86
86
86
C Thesen
91
iii
Kapitel 1
Einleitung
Den Einstieg in diese Arbeit bildet eine kurze Motivation des Lesers für die Themengebiete, in denen die Arbeit angesiedelt ist. Im Anschluss daran wird das Ziel der Arbeit
beschrieben. An einigen Stellen werden Technologien erwähnt und nur kurz erläutert.
Eine detaillierte Beschreibung dieser Technologien erfolgt im nächsten Kapitel.
1.1
Motivation
Die zunehmende Verfügbarkeit leistungsfähiger Kommunikationstechnologien erleichtert den Zugriff von Benutzern auf entfernte Ressourcen. Dabei ist es nicht länger
wünschenswert nur gezielt auf einzelne Ressourcenprovider, wie zum Beispiel FileServer, zuzugreifen, sondern einen ganzen Pool an unterschiedlichen Ressourcen, wie
zum Beispiel Speicherplatz oder Prozessorleistung, zur unmittelbaren Verfügung zu
haben. Wichtige Kriterien hierbei sind Transparenz, Sicherheit und nicht zuletzt auch
Performance.
Zur Realisierung dieses Anspruchs sind momentan verschiedene Technologien
verfügbar. Das Peer-to-Peer (P2P)-computing, also die dezentrale Kommunikation zwischen Teilnehmern, stellt die technische Grundlage dar, während das Grid-computing
das Konzept des transparenten und sicheren Zugriffs auf beliebige Ressourcen zu realisieren versucht.
Ein wichtiges Anwendungsgebiet für diese Technologien ist die verteilte Speicherung
großer Datenmengen. Hierfür eignen sich insbesondere assoziative Speicherkonzepte,
da diese die Suche nach Inhalten unterstützen und keinen einheitlichen Adressraum
benötigen.
1
Ziel
Einleitung
Verteilung, Replikation und schnelle, effektive Suche nach Daten auf über komplexe Netzwerkstrukturen verbundenen Rechnern verlangen nach aufwändigen adaptiven
Algorithmen. Zur Entwicklung und Verbesserung derartiger Algorithmen sind Simulatoren nötig, die zur Nachbildung entsprechender Netzwerkstrukturen in der Lage sind.
Auf diese Weise lassen sich Schwachstellen in Algorithmen finden und beseitigen sowie
auf spezielle Netzwerktopologien optimierte Algorithmen entwickeln und testen.
1.2
Ziel
Ziel dieser Arbeit ist die Entwicklung eines Simulators, der ein verteiltes Rechnersystem
nachbilden kann. Darauf aufbauend wird ein Algorithmus zur verteilten Datenspeicherung entwickelt und implementiert. Es werden Verschiedene Simulationen, unterschiedlich sowohl in der nachgebildeten Netzwerktopologie als auch in der Konfiguration des
Algorithmus’, durchgeführt und deren Ergebnisse diskutiert. Eine detailliertere Darstellung dieser drei Ziele erfolgt in den nächsten Abschnitten.
1.2.1
Simulator zur Nachbildung verteilter Rechnersysteme
Im Verlauf der Arbeit wird ein Simulator zur Nachbildung verteilter Rechnersysteme
entwickelt. Konfigurierbar sind dabei sowohl die Eigenschaften des Netzwerkes als auch
der einzelnen vernetzten Rechner, im weiteren Verlauf der Arbeit als Knoten bezeichnet.
Die Netzwerktopologie wird über Kosten für jede einzelne Verbindung in Form von
Bandbreite und Latenz definiert. Außerdem werden auch Netzwerkkomponenten wie
Hubs, Switches und Router nachgebildet und sind mit Latenzeigenschaften konfigurierbar.
Die Anzahl der simulierten Knoten ist variabel, genau wie deren Eigenschaften.
Dazu gehören Größe, Bandbreite und Latenzeigenschaften von Festspeichern zur dauerhaften Datenspeicherung sowie Cache-Speichern zur vorübergehenden Datenspeicherung.
1.2.2
Verteiltes Speicherkonzept
Aufbauend auf den zuvor beschriebenen Simulator wird ein assoziatives Speicherkonzept zur verteilten Datenspeicherung auf den simulierten Knoten realisiert. Der dafür
2
Ziel
Einleitung
implementierte Algorithmus ist gut auf die Anzahl der Knoten skalierbar und unanfällig
gegenüber dem Ausfall einzelner Knoten.
In diesem simulierten verteilten Speicher ist die Ablage von Daten, die Suche nach
bestimmten Datensätzen sowie die Suche nach Datensätzen mit einer einfachen bitweisen Suchmaske möglich.
1.2.3
Simulationen und Messungen
In dem implementierten verteilten Speicher werden verschiedene Messungen durchgeführt und ausgewertet. Dabei wird das Verhalten des Algorithmus auf verschiedenen
Netzwerktopologien verglichen. Weiterhin werden verschiedene Einstellungsmöglichkeiten des Algorithmus’ auf ihren Einfluss auf die Geschwindigkeit der Suche im verteilten
Speicher untersucht.
3
Kapitel 2
Grundlagen
In diesem Kapitel werden die dieser Arbeit zugrundeliegenden Technologien vorgestellt.
Den Einstieg bildet die Beschreibung des Begriffes P2P und der damit verbundenen
Technologien. Darauf folgt ein kurzer Abriss über die geschichtliche Entwicklung und
die wesentlichen Merkmale von Grids als die zur Zeit vielversprechendsten Vertreter
heterogener verteilter Systeme. Anschließend werden Funktionsweise und Entwicklung
assoziativer Speicher vorgestellt. Den Abschluss bildet ein Überblick über Simulation.
2.1
Peer-to-Peer
Der Begriff P2P ist in der Informatik schon seit einigen Jahren kein eindeutiger Begriff
im Sinne einer Bezeichnung für eine spezielle Technologie mehr. In den nachfolgenden Abschnitten sollen drei verschiedene Sichtweisen auf diese vieldeutige Bezeichnung
erläutert werden. Den Anfang bildet das P2P-Konzept, darauf folgt das P2P-computing
und zuletzt ein kurzer Überblick über das File-Sharing, die Form des P2P-computing,
der der P2P-Begriff seine momentane Berühmtheit verdankt.
2.1.1
Peer-to-Peer als Konzept
P2P beschreibt die gleichberechtigte Zusammenarbeit verschiedener informationsverarbeitender Systeme zur Erbringung eines Services, dessen Realisierung die Möglichkeiten eines Einzelsystemes übersteigt. Dieses Konzept basiert auf drei grundsätzlichen
Prinzipien [1]:
4
Peer-to-Peer
Grundlagen
Ressourcenteilung – In jedem P2P-System werden die Ressourcen der einzelnen
Teilnehmer unter allen Teilnehmern verteilt. Dabei kann es sich zum Beispiel
um Rechenleistung, Speicherplatz oder Informationen handeln.
Dezentralisierung – In einem P2P-System gibt es keine zentrale Instanz zur Überwachung der Ressourcenverteilung. Damit werden Probleme wie zentrale Fehlerquellen (single points of failure) und punktuelle Systemüberlastungen (bottlenecks)
vermieden.
Selbstorganisation – Aus dem Fehlen einer zentralen Überwachungsinstanz ergibt
sich die Notwendigkeit zur eigenständigen Verwaltung des P2P-Systems.
Anhand der bisherigen Beschreibung sind viele verschiedene P2P-Systeme denkbar. Eine Gruppe von Wissenschaftlern, die an einem gemeinsamen Projekt arbeitet
und Informationen über das Telefon austauscht, ist genauso ein P2P-System wie das
Internet, in dem jeder Computer mit jedem anderen Daten austauschen kann. Eine
Unterscheidung kann hier anhand eines Schichtenmodells, wie in Abbildung 2.1 dargestellt, erfolgen.
Benutzer
benutzt
Service
Anwendung
benutzt
Service
Informations−
verwaltung
benutzt
Service
Netzwerk
Abbildung 2.1: Darstellung der Systemschichten, auf denen das P2P-Konzept angewandt werden kann [1]
Die beiden zuvor erwähnten Beispiele lassen sich anhand dieses Schichtenmodells
wie folgt einordnen: Die Gruppe Wissenschaftler betreibt P2P auf Benutzerebene,
während das Internet P2P auf Netzwerkebene zur Verfügung stellt. Dies sind die beiden älteren Formen der Anwendung von P2P. Die Grundlage für P2P auf Anwendungs5
Peer-to-Peer
Grundlagen
und Informationsverwaltungsebene bildet das P2P-computing, welches im nächsten Abschnitt vorgestellt wird.
2.1.2
Peer-to-Peer-computing
Die zwei ältesten Formen der Zusammenarbeit von informationsverarbeitenden Systemen in Netzwerken sind das Client-Server-computing und das P2P-computing. Abbildung 2.2 versucht eine vergleichende Gegenüberstellung dieser beiden Formen.
Client−Server−computing
Peer−to−Peer−computing
Server
Client
Teilnehmer
Teilnehmer
Client
Client
Teilnehmer
Teilnehmer
Request
Request
Service
Service
Abbildung 2.2: Gegenüberstellung der Zusammenarbeit zwischen informationsverarbeitenden Systemen beim Client-Server-computing und beim P2Pcomputing
Beim Client-Server-computing übernehmen die Teilnehmer unterschiedliche Rollen.
Ein Server stellt eine Ressource zur Verfügung, die von einem Client in Anspruch
genommen werden kann. Der Client äußert den Wunsch zur Inanspruchnahme durch
einen Request und der Server stellt daraufhin die Ressource zur Verfügung.
Beim P2P-computing gibt es keine derartige Rollenverteilung. Jeder Teilnehmer
ist sowohl Server, beim P2P-computing auch Servent genannt, und stellt damit eine
Ressource zur Verfügung als auch Client bei der Benutzung derselben Ressource von
anderen Teilnehmern.
Eine mögliche Anwendung des P2P-Konzeptes auf Anwendungs- und/oder Informationsverwaltungsebene unter Verwendung von P2P-computing stellt das im nächsten
Abschnitt näher betrachtete File-Sharing dar.
6
Grid
2.1.3
Grundlagen
File-Sharing
Den Großteil seiner Popularität verdankt der Begriff P2P dem File-Sharing. Häufig
wird die Bezeichnung P2P sogar mit dem File-Sharing gleichgesetzt, obwohl es sich
dabei, wie in den vorhergehenden Abschnitten beschrieben, nur um eine von vielen
Anwendungsmöglichkeit handelt. Die hierbei zur Verfügung gestellten Ressourcen sind
Informationen, oder genauer Daten. Diese werden durch einen Teilnehmer für alle anderen zur Verfügung gestellt.
Das erste als File-Sharing-Applikation bekannt gewordene P2P-System ist Napster
[31]. Napster verwendet das P2P-Konzept auf Benutzer-, Anwendungs- und Netzwerkebene. Die Informationsverwaltung, also in diesem Fall die Verwaltung der Metadaten, insbesondere die Zuordnung von Dateinamen zum Teilnehmer, der die Datei zur
Verfügung stellt, findet bei Napster zentralisiert statt.
Seit der Entwicklung von Gnutella [24] wird das P2P-Konzept auch zur Verwaltung der Metadaten verwendet. Es ist keine zentrale Instanz mehr vorhanden. Daraus
ergeben sich die weiter oben genannten Vorteile, die Vermeidung von single-points-of
failure und bottlenecks. Allerdings entstehen dadurch neue, vor allem juristische Probleme. Diese sollen im Rahmen dieser Arbeit nicht näher betrachtet werden.
Die Weiterentwicklung im Bereich des File-Sharing zielt seit dem auf die Verbesserung der Zugriffsverfahren um eine optimalere Selbstverwaltung zu ermöglichen. Ein
genauerer Einblick in die, dem File-Sharing zugrundeliegenden Algorithmen und deren
Optimierungen wird im Abschnitt 3.2 gegeben.
2.2
Grid
Ein Forschungszweig, der sich ebenfalls des P2P-Konzeptes bedient, ist das Gridcomputing. In [16] arbeitet Foster drei Eigenschaften heraus, die ein verteiltes System
als Grid kennzeichnen. Diese sind:
1. Die Koordination von Ressourcen, die nicht einer zentralen Kontrollinstanz unterstehen,
2. das Basieren auf offenen general-purpose Standardprotokollen und -schnittstellen
sowie
3. das Anbieten einer erweiterten Quality of Service.
7
Grid
Grundlagen
Dabei dient Punkt eins der Abgrenzung eines Grids zu einem Cluster. Das Grid soll
eben nicht, wie ein Cluster von einer zentralen Instanz, einem Administrator, einem
Lehrstuhl, einer Firma oder ähnlichem, kontrolliert werden. Punkt zwei unterscheidet
ein Grid von vielen heutzutage weit verbreiteten Systemen zum verteilten Rechnen, die
jeweils auf proprietären Implementationen basieren. Ein solches Beispiel ist Seti@Home
[38]. Punkt drei letztlich unterscheidet das Grid vom heutigen Internet. Bei einem Grid
muss der Nutzen des Gesamtsystems deutlich größer sein, als der Nutzen der Summe
seiner Bestandteile.
Wie man außerdem an Punkt eins erkennt, bedient sich das Grid-computing zwar
des P2P-Konzeptes was die Koordination von Ressourcen angeht, stellt aber in den
beiden folgenden Punkten Anforderungen, die weit darüber hinaus gehen.
Die Entwicklung des Grids lässt sich in drei Generationen [36] einteilen. Im Folgenden werden diese kurz beschrieben und die Merkmale und Fortschritte einer jeden
Generation dargelegt.
2.2.1
Erste Generation
Seine Ursprünge hat das Grid-Computing Anfang der 1990er Jahre unter der Bezeichnung Metacomputing. Ziel war es, Rechenleistung für high-performance-Anwendungen
zur Verfügung zu stellen. Dazu sollten viele einzelne Workstations oder auch
Supercomputing-Zentren miteinander verbunden werden. Um dieses Ziel zu erreichen,
waren verschiedene Probleme zu überwinden, die Kommunikation zwischen den Einzelkomponenten, die Ressourcenverwaltung und die Manipulation von entfernt gespeicherten Daten. Zwei solche Projekte waren Factoring via Network-Enabled Recursion (FAFNER) [13] und Information Wide Area Year (I-WAY) [17].
Beispiele für Grids der ersten Generation
Ziel von FAFNER war das Faktorisieren großer Zahlen, die Basis für das asymmetrische
Rivest, Shamir, Adelman (RSA)-Verschlüsselungsverfahren. Grundlage der Implementierung war ein Netz von Web-Servern und das Hypertext Transfer Protocol (HTTP).
Über die Web-Server konnte eine große Anzahl von Clients ohne menschliches Eingreifen verwaltet werden. FAFNER war damit der Vorläufer vieler proprietärer verteilter
Applikationen wie zum Beispiel SETI@home [38] oder Distributed.Net [12].
Bei I-WAY handelte es sich um ein experimentelles Hochleistungsnetzwerk, das
Hochleistungsrechner und fortschrittliche Visualisierungsumgebungen verschiedener
8
Grid
Grundlagen
US-amerikanischer Forschungseinrichtungen verbinden sollte. Anschließend sollte es
möglich sein, Applikationen auf das Gesamtsystem zu verteilen. Das Projekt war ein
Erfolg und Vorläufer weiterer Grid-Systeme. Die im Zusammenhang mit I-WAY entwickelten Protokolle und Ideen wurden die Basis für das Globus-Projekt [18], auf das
im nächsten Abschnitt näher eingegangen wird.
Ein weiteres Projekt zur Bearbeitung von DV-Problemen in Weitverkehrsnetzen
ist das Projekt Hypercomputing[42] des Lehrstuhls für Rechnerarchitektur der Universität Rostock. Hier wurde ein verteiltes System geschaffen, dass Workstation-Cluster
verschiedener, über Deutschland verteilter Institutionen zu einem Hypercomputer verbindet. Mit diesem lassen sich Applikationen nebenläufig bearbeiten. Die Realisierung
erfolgte größtenteils in Java und zeichnet sich durch ein hohes Maß an Plattformunabhängigkeit und Modularisierung aus. Neben der Bereitstellung von Modulen zum
Ressourcen-, Performance- und Job-Management sowie Sicherheitsmodulen wurde insbesondere Wert auf eine einfache Bedienung, zum Beispiel durch grafische Benutzeroberflächen, gelegt.
2.2.2
Zweite Generation
Mit der Entwicklung von Standards zur Realisierung einer Middleware für GridSysteme begann in den späten 1990er Jahren die Entstehung der zweiten GridGeneration. Dabei sollte es möglich werden, ein Grid über das Internet beliebig zu
verteilen und neue Probleme mussten bewältigt werden:
Heterogenität – Die Ressourcen für ein solches Internet-weites Grid unterscheiden
sich stark voneinander und stehen nicht mehr unter zentraler Verwaltung. Selbst
Ländergrenzen spielen im Internet keine Rolle mehr, bringen aber neue Probleme
bei der Internationalisierung von Grids mit sich.
Skalierbarkeit – Ein Grid soll in der Anzahl der partizipierenden Knoten nicht begrenzt sein. Es kann aus wenigen Rechnern in einem Rechenzentrum oder mehreren Millionen Rechnern weltweit bestehen. Dazu sind besondere Strategien nötig,
um Latenzen zu minimieren und eventuell vorhandene Lokalität von Ressourcen
auszunutzen. Außerdem entstehen neue Anforderungen an Authentifizierung und
Autorisierung von Ressourcen und Benutzern.
9
Grid
Grundlagen
Anpassungsfähigkeit – Der Ausfall von Ressourcen in Internet-weiten Grids ist
nicht zu vermeiden und muss von der Middleware erkannt und toleriert werden
können.
Ziel der Bestrebungen war es, allgemein für Grids benötigte Services zu erkennen
und durch Standards und deren Implementationen verfügbar zu machen. Basierend auf
dieser Middleware sollte es dann möglich sein, spezialisierte Grids für bestimmte Arten
von Anwendungen zu konzipieren und zu realisieren.
Folgende Anforderungen an die Middleware eines Grids der zweiten Generation
werden in [36] aufgeführt:
Administrationshierarchie – Sie stellt sicher, wie administrative Informationen im
Grid verbreitet werden.
Kommunikationsdienste – Standards zur Kommunikation im Grid gewährleisten
Datentransport, Streaming, Gruppenkommunikation bis hin zum Austausch von
Objekten.
Informationdienste – Sie stellen sicher, dass Informationen überall im Grid jederzeit
zur Verfügung stehen.
Namensdienste – Besonders in verteilten Systemen, wo die Adresse einer Ressource
von geringer Bedeutung ist, spielen Namen eine wesentliche Rolle.
Verteilte Dateisysteme und Caching – Genau wie Informationen müssen auch
Daten im Grid möglichst schnell dort zur Verfügung stehen, wo sie benötigt
werden.
Sicherheit – Große verteilte Systeme bieten viele Angriffspunkte. Die Gewährleistung von Nutzerauthentifizierung, Nachvollziehbarkeit von Handlungen, Vertraulichkeit zwischen den Systemen und die Integrität der Daten sind von enormer
Bedeutung.
Fehlertoleranz – Um den Einfluss von Fehlern und Systemausfällen innerhalb des
Grids in Grenzen zu halten sind neben einer fehlertoleranten Systemstruktur
auch Überwachungswerkzeuge nötig.
Ressourcenverwaltung und Scheduling – Eine Grid-weite Verwaltung der vorhandenen Ressourcen ist genauso notwendig wie eine enge Zusammenarbeit mit
den lokal installierten Mechanismen zur Verwaltung der Systemressourcen.
10
Grid
Grundlagen
grafische Benutzer- und Administrationsschnittstelle – Um auch Grids von
enormer Größe effektiv verwalten zu können ist eine übersichtliche Administrationsschnittstelle notwendig.
Diese Anforderungen wurden seitdem in verschiedenen Projekten umgesetzt. Die
am weitesten verbreiteten Kerntechnologien werden nachfolgend kurz vorgestellt.
Globus
Das Globus-Projekt [18] entstand aus den Ergebnissen und dem Know-How des I-Way
Projektes als US-amerikanisches, multiinstitutionelles Forschungsprojekt. Zentrale Idee
war die Entwicklung einer allgemeinen Grid-Middleware, des Globus-Toolkits [43]. Es
besteht aus einer Reihe von Komponenten, die die grundsätzlichen Anforderungen an
Grids der zweiten Generation, wie Sicherheit, Ressourcenlokalisierung, Ressourcenverwaltung und Kommunikation gewährleisten.
GRAM
GridFTP
MDS
HTTP
FTP
LDAP
TLS / GSI
IP
Abbildung 2.3: Ausschnitt aus der Schichtenarchitektur des Globus-Toolkit in den Versionen 2.x
Diese Komponenten bilden eine modulare Schichtenarchitektur, die einen flexiblen
Einsatz des Toolkits gewährleistet. Abbildung 2.3 zeigt einen Teil dieser Architektur.
Über bestehende Protokolle und Schnittstellen hinaus wurden einige neue Protokolle
entwickelt, die speziell auf die Anforderungen von Grids zugeschnitten sind:
Globus Resource Allocation Manager (GRAM) – Das
HTTP-basierende
GRAM Protokoll dient der Allokation, Kontrolle und Überwachung von
Ressourcen im Grid.
Grid File Transfer Protocol (GridFTP) – Beim GridFTP handelt es sich um eine erweiterte Version des File Transfer Protocol (FTP), die um spezielle Eigen11
Grid
Grundlagen
schaften, wie die Nutzung von Sicherheitsschichten, den Zugriff auf Dateiteile und
Parallelität erweitert wurde.
Monitoring and Discovery System (MDS) – Das Monitoring and Discovery System stellt Informationen über verfügbare Ressourcen im Grid und deren Status
zur Verfügung.
Grid Security Infrastructure (GSI) – dient der Authentifizierung im Grid.
Global Access to Secondary Storage (GASS) – realisiert
parallelen Datenzugriff.
sequentiellen
und
Globus Executable Management (GEM) – zur Verwaltung von ausführbaren
Applikationen im Grid.
Globus Advanced Reservation and Allocation (GARA) – ist für die Reservierung und Verteilung von Ressourcen zuständig.
Das Globus-Toolkit wird noch immer weiterentwickelt und ist in der inzwischen
vorliegenden Version 3.2 bereits ein Vertreter der dritten Grid-Generation. Bevor diese
genauer charakterisiert wird, wird ein anderer Ansatz, die Anforderungen an die zweite
Generation von Grids umzusetzen, kurz vorgestellt.
Legion
Einen objektorientierten Ansatz zur Realisierung von Grid-Umgebungen verfolgt Legion [25]. Hier werden alle Systemkomponenten als Objekte realisiert. Dieser Ansatz
bietet alle Vorteile eines objektorientierten Systems wie Datenabstraktion, Kapselung,
Vererbung und Polymorphie.
Ein weiterer Vorteil ist die Plattformunabhängigkeit dieses Ansatzes. Objektdefinitionen werden von einem Generator für die jeweilige Plattform übersetzt und anschließend ausgeführt. Legion nutzt weiterhin einen eindeutigen Namensraum für das
gesamte Grid. Jedes Objekt erhält einen global eindeutigen Identifikator über den es
im Grid referenziert wird.
Um eine sehr hohe Anzahl von Objekten zu ermöglichen, unterscheidet Legion zwischen aktiven und inaktiven Objekten. Aktive Objekte liegen im Speicher eines Systems
und werden ausgeführt. Inaktive Objekte sind als Schnappschüsse in Festspeichern abgelegt. Zwischen den Zuständen eines Objektes kann bei Bedarf, zum Beispiel bei Erhalt
12
Grid
Grundlagen
einer Nachricht, umgeschaltet werden, so dass der momentane Zustand eines Objektes
für den Benutzer völlig transparent bleibt.
Legion unterstützt verschiedene Programmiersprachen, darunter auch Fortran und
C. Interfaces und Object-Wrapper, so genannte Interface Manager, stellen hierbei sicher, dass der objektorientierte Zugriff auf in imperativen Programmiersprachen entwickelte Objekte möglich bleibt.
Weitere Vertreter der zweiten Grid-Generation
Neben den soeben vorgestellten Systemen, die versuchen, alle Kerntechnologien von
Grids umzusetzen, wurden verschiedene auf einzelne Anforderungen spezialisierte Systeme entwickelt. Dazu gehören verschiedene Batch- und Schedulingsysteme, Storage
Resource Broker und Grid-Portale auf die nicht näher eingegangen wird.
Aus der zweiten Grid-Generation sind verschiedene Projekte hervorgegangen, die
auf den vorgestellten Kerntechnologien aufsetzen, um einer Gruppe von Nutzern konkrete Grid-basierende Services zur Verfügung zu stellen. Einige Beispiele sind Cactus
[7], DataGrid [11] und UNICORE [14].
2.2.3
Dritte Generation
Im Jahr 2001 begann sich die Sichtweise auf Grids noch einmal zu verändern. Foster
beschreibt in [20] die Nutzer eines Grids als virtuelle Organisation und das Grid selbst
als Erbringer von Services. Um dieser Sichtweise gerecht zu werden, schlägt er eine
strikt serviceorientierte Schichtenarchitektur vor.
Die unterste Schicht bildet ein breiter Pool an Basistechnologien (Fabric) wie zum
Beispiel der Zugriff auf Festspeicher, Netzwerk und Sensoren, auf dem eine schmale
Schicht von Verbindungs- und Zugriffsprotokollen (Ressource and Connectivity Protocols) aufsetzt. Diese Schicht bildet wiederum die Basis für eine breite Schicht von
high-level-Services (Collective Services), von denen die Anwendungen (User Applications) Gebrauch machen können. Aus diesem, in Abbildung 2.4 dargestellten, “hourglass
model” ging dann ca. 2002 die Open Grid Service Architecture (OGSA) [19], die einen
vollständig transparenten Ansatz aus Services und Interfaces vorstellt, hervor. Nachfolgend soll die OGSA kurz beschrieben werden.
13
Assoziative Speicher
Grundlagen
User Applications
Collective Services
Ressource and
Connectivity Protocols
Fabric
Abbildung 2.4: Das von Foster in [15] vorgestellte “hourglass model”
Open Grid Service Architecture
Die OGSA definiert alle Bestandteile und Leistungen eines Grids als Services. Dazu
gehören zum Beispiel Rechenleistung, Speicher, Netzwerke, Programme und Datenbanken. Zur Zusammenarbeit zwischen Gridkomponenten, also zwischen Services, werden
Service-Interfaces und Protokolle benötigt.
Lokale und Remote-Transparenz sowie Unabhängigkeit von Betriebssystemen wird
durch eine standardisierte Interface-Beschreibung gewährleistet. Dazu kommen die Web
Service Definition Language (WSDL) oder verschiedene auf die WSDL abbildbare Technologien zum Einsatz.
Zentrales Element im OGSA ist der Grid-Service. Er stellt eine festgelegte Menge
an Interfaces zur Verfügung, um folgende Aufgaben erfüllen zu können: Auffinden, dynamische Erstellung, Lebenszyklusverwaltung, Benachrichtigung und Verwaltung von
Services sowie Namensauflösung, Aktualisierung, Autorisierung und Zugriffssteuerung.
Eine Implementierung der OGSA stellt das Globus-Toolkit in der aktuellen Version
3.2 dar.
2.3
Assoziative Speicher
Neben dem Speichern und Löschen von Daten ist die wesentliche Eigenschaft eines
assoziativen Speichers die “Wiedergewinnung, Verarbeitung sowie Manipulation ge-
14
Assoziative Speicher
Grundlagen
speicherter Daten gemäß ihrer Inhalte oder Teilinhalte durch Assoziationsfunktionen”
[41].
Es werden auf Grund ihrer unterschiedlichen Funktionsweise zwei Arten assoziativer Speicher unterschieden: neuronale Netzwerke und inhaltsadressierte Speicher. Diese werden im Anschluss näher beschrieben, wobei der Fokus auf Grund der höheren
Relevanz für diese Arbeit auf inhaltsadressierten Speichern liegt. Bevor mit der Beschreibung der Arten assoziativer Speicher begonnen wird, folgt ein kurzer Überblick
über die verschiedenen Formen assoziativen Zugriffs.
2.3.1
Assoziationsfunktionen
Assoziationsfunktionen werden vorwiegend zur Suche in assoziativen Speichern eingesetzt. Sie werden auf die Inhalte oder Teilinhalte angewandt, nach denen im Speicher
gesucht wird. Unter Teilinhalten können zum Beispiel Schlüssel verstanden werden,
wenn der Speicher Schlüssel-Wert-Paare aufnimmt.
In [41] werden folgende fünf Gruppen von Assoziationsfunktionen genannt:
Äquivalenzrelationen – Folgende vier Relationen gehören in diese Gruppe:
Identität – Ein gegebener Wert dient als Suchargument für sich selbst im Speicher.
Teilidentität – Ein Teil des gesuchten Wertes dient als Suchargument.
Näherung – Es findet eine unscharfe Suche nach allen Werten, die einem
Suchargument ähneln, statt.
Ungleichheit – Diese Operation liefert alle Werte aus dem Speicher, die ungleich einem Suchargument sind.
Relationale Suchoperationen mit einem Grenzwert – In diese Gruppe gehören
alle Suchoperationen, bei denen die Suche über Vergleiche mit einem Grenzwert
stattfindet. Dazu gehören Größer-Gleich-, Kleiner-Gleich, Größer- und KleinerSuchoperationen.
Relationale Suchoperationen mit zwei Grenzwerten – Suchoperationen über
Intervalle von zwei Grenzwerten gehören dieser Gruppe an. Dabei kann sowohl
nach Werten innerhalb des gegebenen Intervalls gesucht werden als auch nach
Werten außerhalb dieses Intervalls, sowohl unter Einbeziehung als auch ohne
Einbeziehung der Grenzwerte.
15
Assoziative Speicher
Grundlagen
Suchoperationen nach Extremwerten – Die Suche nach Minimal- und Maximalwerten innerhalb des Speichers gehört in diese Gruppe.
Nachbarschaftssuchoperationen – Diese Gruppe von Operationen enthält die Suche nach Werten anhand der Operationen Vorgänger, Nachfolger und Nachbar.
Welche Assoziationsfunktionen implementiert sind, die Geschwindigkeit der
Ausführung und die Güte der Ergebnisse ist von der Art des assoziativen Speichers
abhängig.
2.3.2
Neuronale Netzwerke
Die grundsätzliche Funktionsweise neuronaler Netzwerke orientiert sich an der Funktion
des menschlichen Gehirns und Nervensystems. Sie bestehen aus einer großen Anzahl
von Neuronen, die in Netzwerken verschiedener Form verschaltet sind. Die Speicherung
der Informationen erfolgt hierbei über die Gewichtung der Verbindungen zwischen den
Neuronen.
Ein Nachteil neuronaler Netze ist, dass das Speichern und Löschen von Daten über
aufwändige Lernprozesse erfolgt, wobei das Löschen von Informationen nicht immer
möglich und meist auf Grund des Aufwands nicht sinnvoll ist. Ein enormer Vorteil
neuronaler Netze besteht in der durch Parallelität sehr schnellen Suche über Identitätsund Näherungs-Relationen.
2.3.3
Inhaltsadressierte Speicher
Es gibt zwei Ansätze zur Realisierung inhaltsadressierter Speicher mit Unterschieden
in Funktionsweise und Eigenschaften, als Hardware und als Software. [28]
Inhaltsadressierte Speicher als Hardware
Der Aufbau eines einfachen wortorientierten inhaltsadressierten Speichers besteht neben dem eigentlichen Speicher mindestens aus einem Suchregister, in dem das Argument für die Suchoperation gespeichert wird, einem Maskenregister, mit dessen Hilfe
bei Bedarf Teile des Suchregisters ausgeblendet werden können, einem Adressdekoder,
der die Wortadressen in Steuersignale umsetzt, einem Treffervektor, der die Treffer einer Suchanfrage markiert, und einem Output-Register, das die Ergebnisse sequentiell
zur Verfügung stellt. Ein solcher Speicher ist in Abbildung 2.5 dargestellt. Bei Bedarf
16
Assoziative Speicher
Grundlagen
kann der inhaltsadressierte Teil des Speichers um einen Datenteil ergänzt werden, so
dass Schlüssel-Daten-Paare abgelegt und gesucht werden können.
0
1
Suchregister
b
0
1
Maskenregister
b
0
1
Speicherwort W0
b
T0
0
1
Speicherwort W1
b
T1
0
1
Speicherwort Wn
b
0
1
Outputregister
b
Trefferregister
Adressdekoder
Wortadresse
Treffervektor T
Tn
Abbildung 2.5: Aufbau eines einfachen wortorientierten inhaltsadressierten Speichers
Mit Hardware-Lösungen sind wortparallele oder bitparallele Suchoperationen über
Identität und Teilidentität sehr effektiv möglich. Es gibt auch Algorithmen und Speziallösungen zur Realisierung weiterer Assoziationsfunktionen. Inhaltsadressierte Speicher sind in der Herstellung deutlich teurer als gewöhnlicher Random Access Memory (RAM). Dies ist zugleich die Motivation für die Implementation als Software.
Inhaltsadressierte Speicher als Software
Die Grundidee bei der Implementation inhaltsadressierter Speicher als Software ist die
möglichst effektive Umsetzung von Inhalten auf Adressen, so dass Daten in gewöhnlichem RAM abgelegt und trotzdem über ihre Inhalte adressiert werden können.
Eine sehr effektive Möglichkeit, diese Umsetzung zu bewältigen, stellt die Verwendung von Hash-Funktionen [28] dar. Hash-Funktionen dienen der Umsetzung von Inhalten in Hash-Werte. Hash-Werte liegen in einem festen Wertebereich, der gewöhnlich
über die Anzahl der, von einem Hash-Wert verwendeten Bits definiert ist. Ein Qua-
17
Simulation
Grundlagen
litätsmerkmal für Hash-Funktionen ist in diesem Zusammenhang1 die Gleichverteilung
der Hash-Werte über den Wertebereich.
Mit Hilfe der Hash-Werte lassen sich Inhalte auf Speicheradressen umsetzen. Dabei
kann zum Beispiel der Hash-Wert direkt als Adresse im Speicher (direkte Adressierung) oder als Adresse eines Zeigers, der dann auf den eigentlichen Datensatz zeigt,
(indirekte Adressierung) dienen. Ein Problem, das hierbei bewältigt werden muss, sind
Kollisionen. Kollisionen treten auf, wenn verschiedene Inhalte auf den gleichen HashWert abgebildet werden. Zur Kollisionsvermeidung gibt es verschiedene Ansätze, die
hier nicht weiter detailliert werden.
Hash-Funktionen sind der effektivste Ansatz bei der Umsetzung von Inhalten auf
Adressen und somit bei der Abbildung der Identität als Assoziationsfunktion. Zur Abbildung anderer Assoziationsfunktionen in inhaltsadressierten Speichern gibt es andere
Zugriffsverfahren, wie zum Beispiel Baumstrukturen, die hier nicht näher beschrieben
werden.
2.4
Simulation
Die Simulation, 1987 noch als letzter Ausweg [5] bezeichnet, gewinnt zunehmend an
Bedeutung. Ursachen hierfür liegen in immer leistungsfähigeren Rechnerumgebungen
sowie im Vergleich zu Experimenten häufig deutlich geringeren Kosten. Abbildung
2.6 stellt dar, wo die Simulation im Prozess des Erkenntnisgewinnes über ein System
angeordnet ist.
Im Zusammenhang mit Simulationen fallen immer die Begriffe System und Modell.
Diese werden im Anschluss charakterisiert. Im darauf folgenden Abschnitt werden verschiedene Simulationsarten vorgestellt. Den Abschluss bildet ein kurzer Überblick über
Pseudo-Zufall, der bei Simulationen eine wichtige Rolle spielt.
2.4.1
System
Ein System besteht aus einer Gruppe von Objekten, die zur Erfüllung einer bestimmten
Aufgabe in Beziehung zueinander stehen. Außerdem wird ein System durch verschiedene Ereignisse, die außerhalb des Systems stattfinden, beeinflusst [4]. Ein Beispiel für
ein solches System sei ein Fließband, an dem Kraftfahrzeuge montiert werden. Objek1
Im Bereich der Kryptographie unterliegen Hash-Funktionen weit mehr Anforderungen, die im
Zusammenhang mit inhaltsadressierten Speichern nicht von Bedeutung sind.
18
Simulation
Grundlagen
ex
pe
en
rim
System
r
tie
en
mit einem Modell
des Systems
an
mit dem eigent−
lichen System
ys
al
r
ie
en
bn
r
ie
ul
ge
abstraktes
Modell
sim
Er
physikalisches
Modell
er
uv
ez
en
iss
er
sig
s
lä
analytische
Lösung
Simulation
Ergebnisse unzuverlässiger
Abbildung 2.6: Methodik des Studiums eines Systems [32]
te sind hier die Maschinen, Komponenten und Arbeiter, die miteinander interagieren.
Einflüsse von außen sind zum Beispiel die Belieferung mit Material und Energie.
Die in einem System befindlichen Objekte lassen sich durch Eigenschaften beschreiben. Diese Eigenschaften können sich verändern und stellen damit die Variablen eines
Systems dar. Der Zustand eines solchen Systems ist definiert als die Gesamtheit der
Zustände aller Variablen zu jedem beliebigen Zeitpunkt [4]. Sei zum Beispiel ein Fachhandel ein System, in dem Kunden von Verkäufern beraten werden. So könnte der
Zustand dieses Systems durch die Anzahl der Verkäufer, die Anzahl der wartenden
Kunden und die Zeit, die vergangen ist, seit ein jeder Kunde das Geschäft betreten
hat, beschrieben werden.
Diskrete und kontinuierliche Systeme
Ein diskretes System zeichnet sich dadurch aus, dass die Variablen nur bestimmte
Zustände annehmen können. Zum Beispiel sind für die Anzahl der Verkäufer und Kunden im vorangehenden Beispiel nur ganze Zahlen zulässig. Auch die Zeit kann in diesem
Beispiel hinreichend genau durch ganze Zahlen in Minuten beschrieben werden.
Systeme, in denen die Variablen beliebige Zustände annehmen können, werden als
kontinuierliche Systeme bezeichnet. Ein Beispiel für ein kontinuierliches System ist der
19
Simulation
Grundlagen
Zusammenstoß eines Fahrzeuges mit einem Hindernis. Die hierbei auftretenden Kräfte
verändern sich kontinuierlich nach bestimmten physikalischen Gesetzmäßigkeiten.
Komplexere Systeme sind häufig nicht in allen Eigenschaften diskret oder kontinuierlich. Deshalb wird bei der Betrachtung der Eigenschaften häufig eine Auswahl
getroffen und es entsteht das Modell.
2.4.2
Modell
Ein Modell ist die Repräsentation eines Systems zu Studienzwecken. Dabei wird das
System auf die, für die Betrachtung relevanten Objekte und Eigenschaften beschränkt.
Es sind also bei verschiedenen Fragestellungen unterschiedliche Modelle für das selbe
System denkbar.
Modelle lassen sich anhand verschiedener Eigenschaften klassifizieren [32]:
Statische und dynamische Modelle
Ein statisches Modell repräsentiert ein System zu einem bestimmten Zeitpunkt oder
ein System, in dem Zeit keine Rolle spielt. Ein dynamisches Modell repräsentiert ein
System, dass sich in Abhängigkeit von der Zeit verändert.
Deterministische und stochastische Modelle
Ein Modell, das keine zufallsabhängigen Variablen enthält, wird als deterministisch
bezeichnet. Der Vorteil von deterministischen Modellen liegt darin, dass der Endzustand bereits feststeht, wenn der Anfangszustand und die äußeren Einflüsse definiert
sind. Das heißt, jeder Simulationslauf mit einem deterministischen Modell führt zum
gleichen, überprüfbaren Ergebnis.
Häufig sind Systeme nicht ohne zufällige Einflüsse modellierbar. Modelle, die zufallsabhängige Variablen enthalten, werden als stochastische Modelle bezeichnet. Hierbei
liefern Simulationen nur mögliche beziehungsweise wahrscheinliche Ergebnisse. Um Simulationen mit stochastischen Modellen wiederholbar und überprüfbar zu machen,
spielen Pseudo-Zufallszahlen eine entscheidende Rolle. Diese werden in Abschnitt 2.4.4
ausführlicher beschrieben.
20
Simulation
Grundlagen
Kontinuierliche und diskrete Modelle
Genau wie bei den Systemen werden auch Modelle anhand der Veränderung ihrer Variablen in kontinuierliche und diskrete Modelle unterschieden. Hier ergeben sich allerdings
drei Kategorien [44]:
Differentialgleichungsmodelle Der Zustand der Systemvariablen verändert sich
kontinuierlich über die Zeit. Diese Modelle werden meist durch eine Reihe differentieller Gleichungen repräsentiert. Die “Zukunft” wird in solchen Simulationen durch
Integrationsmethoden “berechnet”.
Zeitdiskrete Modelle Die Zeitachse ist in diskrete Intervalle konstanter Länge eingeteilt und der Zustand des Modells verändert sich nur zu diesen diskreten Zeitpunkten.
Den häufigsten Anwendungsfall für derartige Modelle bildet die detaillierte Simulation
digitaler Systeme.
Ereignisdiskrete Modelle Der Zustandswechsel der Variablen erfolgt hier durch
Ereignisse, die zu beliebigen Zeitpunkten auftreten können. Diese Art von Modellen
lassen sich zur Nachbildung digitaler Systeme sehr effektiv einsetzen.
2.4.3
Simulationsarten
Zur Simulation digitaler Systeme werden meist zeitdiskrete oder ereignisdiskrete Modelle verwandt. Entsprechende Simulationsarten werden nachfolgend kurz vorgestellt.
Zeitgesteuerte Simulation
Diese Simulationen werden schrittweise ausgeführt. Dabei wird die Zeit in gleichbleibenden Schritten, dem so genannten Takt, vorgegeben und die Veränderungen im Modell
entsprechend schrittweise berechnet. Der Folgezustand Z[i + 1] der Variablen hängt
hierbei lediglich vom vorhergehenden Zustand Z[i] und den äußeren Einflüssen ab.
Diese Vorgehensweise eignet sich für die Simulation zeitdiskreter Modelle. Ein Nachteil ist, dass entweder die zeitliche Auflösung sehr eingeschränkt ist oder die Simulation
aus einer sehr großen Anzahl von Simulationsschritten mit häufig sehr geringen oder
gar keinen Zustandsänderungen besteht.
21
Simulation
Grundlagen
Ereignisgesteuerte Simulation
Hier ist die Vorgehensweise wie folgt:
1. Die Simulationszeit wird auf Null initialisiert.
2. Die Simulationszeit wird auf den Zeitpunkt des zeitlich nächstgelegenen Ereignissen gesetzt.
3. Der Zustand des Systems wird entsprechend des Ereignisses angepasst.
4. Das Wissen um zukünftige Ereignisse wird aktualisiert und das Vorgehen wird
bei Schritt zwei fortgesetzt.
Ereignisgesteuerte Simulation hat den Vorteil, dass die Zustände des Systems nur
verändert werden, wenn ein äußeres Ereignis stattgefunden hat. Außerdem ist die
Zeitachse nicht diskretisiert und damit eine optimale zeitliche Auflösung möglich. Die
Simulation von zeitdiskreten und ereignisdiskreten Modellen ist hiermit möglich.
2.4.4
Pseudo-Zufall
Der Einfluss von zufälligen Ereignissen beziehungsweise Variablen, deren Zustand von
zufälligen Ereignissen abhängig ist, ist in Simulationen häufig nicht zu umgehen. Um
die exakte Wiederholbarkeit und somit Überprüfbarkeit von Simulationsläufen sicherzustellen, kommen Pseudo-Zufallszahlen zum Einsatz.
In [4] werden fünf Anforderungen an Routinen zur Generierung von PseudoZufallszahlen gestellt:
• Die Routine zum Generieren der Pseudo-Zufallszahlen muss schnell sein, da sie
meist häufig benötigt wird und damit signifikanten Einfluss auf die Geschwindigkeit der Simulation hat.
• Sie muss portabel sein, damit die Simulation auf unterschiedlichen Plattformen
die gleichen Ergebnisse liefert.
• Die Routine muss einen ausreichend langen Zyklus haben. Die Länge eines Zyklus’
gibt an, wie viele Pseudo-Zufallszahlen generiert werden können, bis sich eine
Menge von Werten in der gleichen Reihenfolge wiederholt. Außerdem darf die
Routine nicht degenerieren, das heißt nach einer bestimmten Anzahl produzierter
Werte anfangen, wiederholt den gleichen Wert zu generieren.
22
Simulation
Grundlagen
• Die Reihenfolge der generierten Werte muss wiederholbar sein. Das heißt, bei gleichem Startwert muss die Routine auch die gleiche Folge an Pseudo-Zufallswerten
zur Verfügung stellen.
• Die produzierten Werte müssen Gleichverteilung und Unabhängigkeit möglichst
gut simulieren.
Es gibt mehrere Algorithmen, um solche Zahlen zu produzieren. Außerdem werden verschiedene Tests beschrieben, um Algorithmen auf diese Eigenschaften hin zu
überprüfen. Diese werden hier nicht im Einzelnen vorgestellt.
23
Kapitel 3
Bisherige Arbeiten
Dieses Kapitel gibt einen Überblick über bisherige Arbeiten zum Thema. Im ersten
Abschnitt werden verschiedene Anstrengungen zur Entwicklung von Simulatoren für
verteilte Rechnersysteme vorgestellt. Der zweite Abschnitt gibt einen umfangreichen
Überblick über bisherige Forschungsergebnisse im Bereich der verteilten assoziativen
Datenspeicherung.
3.1
Simulatoren
Komplexitäten und Performanceprognosen für deterministische Algorithmen in verteilten Systemen lassen sich häufig noch berechnen, aber schon bei wenigen adaptiven
Optimierungen oder gar komplett adaptiven Algorithmen ist die Simulation das Mittel
der Wahl, um Aussagen über Performance und Komplexität zu gewinnen.
Grid-Simulatoren wie SimGrid [8], GridSim [6] und MicroGrid [9] bilden ein komplettes Grid-System nach und dienen hauptsächlich der Evaluierung von SchedulingAlgorithmen. Für die Simulation von Algorithmen zur Verteilung von Daten sind sie
weitgehend ungeeignet.
Für die Simulation von Datenverteilungsalgorithmen sind P2P-Simulatoren gut geeignet. Einige Vertreter werden nachfolgend kurz vorgestellt und bezüglich ihrer Eignung für diese Arbeit geprüft. Bei der Beschreibung des Funktionsumfangs einiger
vorgestellter Simulatoren werden Bezeichnungen von Algorithmen benutzt, ohne auf
deren Funktionsweise einzugehen. Eine detaillierte Übersicht über bisher entwickelte
Algorithmen und deren Funktionsweise findet sich im Abschnitt 3.2.
24
Algorithmen zur verteilten Speicherung von Daten
3.1.1
Bisherige Arbeiten
P2psim und Myns
Zwei C-basierte P2P-Simulatoren sind P2psim [23] und Myns [2]. Sie befinden sich
in den Anfängen der Entwicklung und sind somit als Grundlage dieser Arbeit nicht
geeignet.
P2psim stellt bereits eine Reihe von Algorithmen, darunter Chord und Tapestry
zur Verfügung. Die Algorithmen werden in C programmiert. Die Simulation wird über
verschiedene Konfigurationsdateien gesteuert. P2psim bietet keine grafische Benutzerschnittstelle.
Myns stellt einige Application-Level-Multicast-Algorithmen, darunter Narada [10]
und NICE [3], zur Verfügung. Auch hier werden die Algorithmen in C implementiert.
Die Steuerung der Simulation erfolgt über ein Script. Eine grafische Benutzeroberfläche
bietet myns ebenfalls nicht.
3.1.2
Peersim
Peersim [27] ist in Java entwickelt. Er kann eine große Anzahl von Knoten simulieren
und wird über eine umfangreiche Konfigurationsdatei gesteuert. Algorithmen werden
in Java implementiert.
Um bis hin zu mehreren Millionen Knoten simulieren zu können, nimmt peersim keine Rücksicht auf Netzwerktopologien, Verbindungskosten und Eigenschaften einzelner
Knoten. Da ein Ziel dieser Arbeit die Nachbildung von Eigenschaften der Netzwerktopologie und der einzelnen Knoten ist, ist peersim als Grundlage nicht geeignet.
3.2
Algorithmen zur verteilten Speicherung von
Daten
Die Entwicklung von Algorithmen zur assoziativen verteilten Speicherung von Daten
ist eng mit der Entwicklung der File-Sharing-Programme verbunden. Die ersten derartigen Algorithmen fanden dort Verwendung. Zur ersten Generation dieser Programme
gehören Napster [31] und ähnliche Programme. Eine Weiterentwicklung hin zu besserer Skalierbarkeit und Robustheit fand sich in Gnutella-basierenden File-SharingProgrammen [24]. Der erste Distributed Hash Table (DHT)-basierende Algorithmus,
CAN, wurde 2001 veröffentlicht [34].
25
Algorithmen zur verteilten Speicherung von Daten
Bisherige Arbeiten
Zunächst werden die grundlegende Funktionsweise der erstgenannten Verfahren
und deren Nachteile vorgestellt. Anschließend werden einige ausgewählte Vertreter der
DHT-basierenden Algorithmen vorgestellt, um einen Überblick über den Entwicklungsstand dieser Gruppe von Algorithmen zu geben.
3.2.1
Technologien aus dem frühen File-Sharing-Umfeld
Die Motivation der Entwicklung von File-Sharing-Programmen ist der Austausch von
Dateien über das Internet. Dabei ist eine assoziative Zugriffsstruktur gegeben. Der
Dateiname dient hierbei als Schlüssel und verweist auf den Knoten, der diese Datei
zur Verfügung stellt. Dieser Abschnitt soll aufzeigen, wie die gängigen Vertreter der
File-Sharing-Programme diesen assoziativen Zugriff lösen und welche Nachteile hierbei
auftreten.
zentralisierte Ansätze
Zu den ersten File-Sharing-Programmen, die Verbreitung fanden, gehört Napster.
Es benutzt einen zentralisierten Algorithmus, bei dem die gesamte Auflösung von
Schlüsseln auf Adressen über einen zentralen Server erfolgt. Der große Vorteil dieses
Verfahrens liegt in der perfekten Kontrolle über die Daten. Da jeder Datensatz beim
zentralen Server registriert ist, können Replikation und Verteilung sowie Sicherheit und
Zugriffsrechte perfekt gesteuert werden.
Ein scheinbarer Vorteil ist auch, dass die Suchanfragen nicht durch die einzelnen
Knoten geroutet werden müssen und somit deutlich weniger latenzbelastet sind. Allerdings kann es bei einem zentralen Server sehr schnell zu Überlastungserscheinungen
kommen. Der Algorithmus skaliert nicht. Außerdem stellt der zentrale Server einen
single point of failure dar. Der Ausfall nur eines Servers hat den Ausfall des gesamten
verteilten Speichers zur Folge.
Random Power-Law Graphs (RPLG)
Eine vollkommene Dezentralisierung der File-Sharing-Programme wurde durch die Verwendung so genannter overlay networks, einer auf den Anwendungszweck optimierten
Netzwerktopologie auf Anwendungsebene, möglich. Die ersten Implementierungen, wie
zum Beispiel Gnutella, basieren auf einem RPLG. Die Funktionsweise ist ebenso einfach
wie robust. Jeder Knoten im verteilten Speicher kennt eine zufällige Anzahl anderer
Knoten. Jede Suchanfrage wird als Application-Level Multicast durch das gesamte
26
Algorithmen zur verteilten Speicherung von Daten
Bisherige Arbeiten
System geschickt. Dieses Flooding wird von zwei Parametern kontrolliert. Anhand der
Anfrage-ID wird Rückläufigkeit im RPLG verhindert und mit Hilfe der Time to Live (TTL) lässt sich der Grad der Ausbreitung der Anfrage beeinflussen.
Die Vorteile dieses Verfahrens liegen in der hohen Robustheit. Über eine Menge
von sehr stabilen Superknoten wird gewährleistet, dass ein neuer Knoten immer einen
aktiven Knoten im System finden und anschließend vollständig am System teilnehmen
kann. Außerdem ist das System unanfällig gegen den Ausfall vieler einzelner Knoten
und skaliert bis zu mehreren Millionen Knoten.
Zwei entscheidende Nachteile dieses Algorithmus’ sind der Mangel an Kontrolle und
die hohe Netzlast. Der Algorithmus bietet keine Möglichkeit, Verteilung und Replikation deterministisch zu steuern. Die hohe Netzlast durch die weitläufigen Suchoperationen hat ebenfalls eine hohe Latenz bei Suchanfragen zur Folge.
3.2.2
DHT-basierende Algorithmen
Die Idee der DHT-basierenden Algorithmen ist es, sowohl die Schlüssel der Datensätze
als auch die Knotenadressen über eine Hash-Funktion in den gleichen Wertebereich
abzubilden. Ein Knoten ist für die Verwaltung der Daten in seinem Abschnitt des
Wertebereichs zuständig. Ein Overlay-Routing beschreibt dann, wie in diesem Wertebereich von einem Wert beziehungsweise Knoten zu einem Zieldatensatz und damit
dem Knoten, der ihn verwaltet, geroutet wird. Die verschiedenen Algorithmen unterscheiden sich im genutzten Wertebereich und damit der Hash-Funktion sowie dem
Overlay-Routing-Verfahren.
Der Vorteil von DHT-basierenden Verfahren ist, dass sie, obwohl sie sehr gut skalieren, eine gute Kontrolle über die Verteilung und Replikation der Daten ermöglichen.
Als einziger Nachteil bleiben die Differenzen zwischen dem Overlay-Routing und dem
darunter liegenden IP-Routing. Sie haben zur Folge, dass die Pfade von Paketen relativ
zum IP-Routing betrachtet, sehr lang werden können. Die Folge ist eine Erhöhung von
Latenz und Netzlast.
Es gibt zwei Möglichkeiten, diesen Nachteil zu minimieren. Eine ist die Erhöhung
der Lokalität der Overlay-Routing-Verfahren. Durch stark adaptive Algorithmen wird
eine Vermeidung von Umwegen im IP-Routing angestrebt. Die zweite Möglichkeit ist
die Minimierung der Anzahl der Routing-Schritte. Je weniger Schritte nötig sind, desto
weniger Gefahr besteht, Umwege zu beschreiten.
27
Algorithmen zur verteilten Speicherung von Daten
Bisherige Arbeiten
DHT-basierende Algorithmen lassen sich über zwei Eigenschaften charakterisieren,
die durchschnittliche Anzahl der Routing-Schritte und die Anzahl der Einträge in der
Routing-Tabelle eines Knotens. Die ersten Algorithmen wie zum Beispiel CAN [34],
Chord [39] und Pastry [37] stellten einen Kompromiss zwischen beiden Parametern
dar.
Mit Viceroy [29] und Distance Halving [30] gelang es, auch mit konstanter Anzahl
an Routing-Tabellen-Einträgen, logarithmische Routing-Schritt-Komplexitäten zu erreichen.
Die DHT-basierenden Algorithmen wurden inzwischen auch in File-SharingProgrammen adaptiert. Ein Beispiel hierfür ist Overnet [33]. Eine Auswahl an Algorithmen dieser Gruppe, Content-Addressable Network (CAN), Chord und Distance
Halving, werden in den folgenden Abschnitten näher vorgestellt.
3.2.3
Content-Addressable Network
CAN arbeitet auf einem d-dimensionalen Wertebereich, der als Koordinatensystem auf
einem d-Torus angeordnet ist. Das heißt, der Wertebereich ist in allen Dimensionen
begrenzt und der Wert 0 ist direkter Nachfolger des größten Wertes in einer Dimension
(siehe auch Abbildung 3.1).
Zur Erklärung des Algorithmus’ wird von d = 2 ausgegangen. Ein Schlüssel wird von
einer Hash-Funktion auf einen Punkt im Koordinatensystem abgebildet. Der Torus ist
nur beim Routing von Bedeutung, um die maximale Entfernung zwischen zwei Punkten
zu halbieren.
Hinzufügen neuer Knoten
Der Wertebereich wird wie folgt auf die Knoten aufgeteilt: Nimmt ein neuer Knoten
am verteilten Speicher teil, so wählt er einen zufälligen Punkt im Wertebereich, zum
Beispiel durch die Anwendung der Hash-Funktion auf seine IP-Adresse. Der Knoten,
der diesen Punkt bisher verwaltet, halbiert seinen Bereich und überträgt alle Daten aus
der Hälfte, in der sich der gewählte Punkt befindet an den neuen Knoten. So entsteht
ein Gitter, dessen Teil-Rechtecke von einzelnen Knoten verwaltet werden. Jeder Knoten verwaltet also all die Datensätze deren Schlüssel durch die Hash-Funktion in sein
Teil-Rechteck abgebildet werden. In Abbildung 3.1 ist ein solches Gitter beispielhaft
dargestellt.
28
Algorithmen zur verteilten Speicherung von Daten
Bisherige Arbeiten
Datensatz im Wertebereich
der Hash−Funktion
Verwaltungsbereich
eines Knotens
(Schlüssel)
Hash
(14,10)
Abbildung 3.1: CAN-Gitter mit Datensatz
Routing im CAN
Als Overlay-Routing im CAN kommt adaptives x-y-z-Routing [35] zum Einsatz. Dabei
wird die Distanz vom Startpunkt zum Zielpunkt in x- und y-Richtung in beliebiger
Reihenfolge nach bestimmten Kriterien zurückgelegt. Der Ablauf für jeden beteiligten
Knoten ist folgendermaßen:
1. Der Knoten bestimmt seinen Abstand vom Zielpunkt als Länge der kürzesten
direkten Verbindungslinie im CAN-Gitter.
2. Der Knoten bestimmt für jeden Knoten in seiner Nachbartabelle ebenfalls diesen
Abstand.
3. Der Knoten schickt die zu routenden Daten zu einem der Nachbarn, für den dieser
Abstand kleiner ist als der eigene.
Als Kriterium für die Auswahl des nächsten Knotens kann zum Beispiel die RoutingEntfernung zwischen den Knoten in der darunter liegenden Netzwerktopologie dienen.
Als Routing-Tabelle benötigt dazu jeder Knoten einen Zeiger auf jeden Nachbarknoten. Nachbarknoten eines Knotens k sind all diejenigen Knoten, die sich in ihrer
29
Algorithmen zur verteilten Speicherung von Daten
Bisherige Arbeiten
Lage im CAN-Gitter von k in nur einer Dimension unterscheiden und an k angrenzen,
also alle Knoten, die mit k eine (d − 1) -dimensionale Seitenfläche oder -linie teilen.
Entfernen von Knoten aus dem CAN
Will ein Knoten k seine Teilnahme am verteilten Speicher beenden, so sendet er all seine
Daten an den Nachbarknoten, dessen Bereich mit dem von k konvex zusammengefügt
werden kann. Gibt es keinen solchen Nachbarknoten, so muss einer der Nachbarknoten
so lange zwei Bereiche verwalten, bis ein neuer Knoten ihm einen dieser Bereiche wieder
abnimmt.
Um den Ausfall eines Knotens zu erkennen, sendet jeder Knoten in regelmäßigen
Abständen ein Signal an seine Nachbarn. Ist ein Knoten ausgefallen, wird dessen Bereich von einem der Nachbarn übernommen. Die Daten sind verloren.
Routing-Komplexität im CAN
Diese einfache Version des CAN hat pro Knoten O(d) Einträge in der Routing-Tabelle.
Die durchschnittliche Anzahl an Routing-Schritten kann mit der Komplexität O(dN 1/d )
angegeben werden, wobei N die Anzahl der Knoten im CAN ist.
Diese Komplexitäten, insbesondere die Anzahl der Routing-Schritte, ist mit modernen Algorithmen wie zum Beispiel Distance Halving nicht mehr konkurrenzfähig.
Allerdings hat CAN den großen Vorteil, dass er auf Grund seiner Einfachheit viele
Optimierungen zulässt, die das Verhalten des Algorithmus’ deutlich verbessern. Die
wichtigsten werden nachfolgend kurz erklärt, weil an anderen Stellen dieser Arbeit auf
sie zurückgegriffen wird.
Replikation durch Realitäten
Realitäten sind unabhängig voneinander arbeitende Content-Addressable Networks wie
in Abbildung 3.2 dargestellt. Dabei verwaltet jeder Knoten einen Bereich aus jeder
Realität. Dies darf aber niemals in zwei Realitäten der gleiche Bereich sein. Wird ein
Datensatz gespeichert, so wird er immer für jede Realität auf dem Knoten gespeichert,
der diesen Datensatz in der entsprechenden Realität verwaltet. Damit wird sichere
Replikation im CAN möglich. Fällt ein Knoten aus, so können seine Datensätze aus
einer anderen Realität gerettet werden.
Ein weiterer Vorteil bietet sich beim Suchen nach Datensätzen. Jeder Knoten kann
nun flexibel eine seiner Realitäten als Ausgangspunkt für das Routing auswählen. Dies
30
Algorithmen zur verteilten Speicherung von Daten
Bisherige Arbeiten
Realitäten
von einem Knoten
kontrollierte Zonen
Abbildung 3.2: Zonen eines Knotens in einem CAN mit drei Realitäten.
führt auf langen Routen mit hoher Wahrscheinlichkeit zu Abkürzungen weil die Wahrscheinlichkeit, dass ein Knoten in einer anderen Realität dichter am Ziel liegt, mit dem
Abstand vom Ziel steigt.
Caching im CAN
Beim CAN sind zwei verschiedene Arten von Caching möglich. Für den wiederholten
Zugriff auf den gleichen Datensatz durch den gleichen Knoten ist es sinnvoll, diesen Datensatz im zugreifenden Knoten zwischenzuspeichern. Caching im zugreifenden Knoten
beschleunigt die Suche nach genau diesem Datensatz auf genau diesem einen Knoten.
Knoten mit Datensatz
mit vielen Zugriffen
zugreifender Knoten
Zugriffe
Knoten, der den Daten−
satz zwischenspeichert
Abbildung 3.3: Caching durch Replikation im Nachbarknoten
31
Algorithmen zur verteilten Speicherung von Daten
Bisherige Arbeiten
Bei häufigen Zugriffen aus dem verteilten Speicher auf den gleichen Knoten ist es
möglich, die betroffenen Daten auf dessen Nachbarknoten zwischenzuspeichern. Abbildung 3.3 verdeutlicht diesen Vorgang. Replikation auf Nachbarknoten dient in erster
Linie der Vermeidung von hotspots, also Zonen hoher Aktivität, die gefährdet sind,
frühzeitig überlastet zu werden.
3.2.4
Chord
Mit Pastry [37], Tapestry [45] und Chord [39] entstanden die ersten DHT-basierenden
Algorithmen mit logarithmischer Komplexität für die Länge der Routing-Pfade. Allerdings war dafür auch eine logarithmische Komplexität für die Anzahl der RoutingTabellen-Einträge pro Knoten notwendig. Stellvertretend für diese Algorithmen wird
Chord kurz vorgestellt, da er ein sehr einfaches und gut nachvollziehbares OverlayRouting benutzt. In Pastry und Tapestry kommt Hypercube-Routing [35] zum Einsatz.
Dadurch werden die Routing-Tabellen deutlich komplexer.
Chord basiert auf einem Kreis von ID’s Modulo 2m , wobei jeder Schlüssel durch
eine Hash-Funktion auf eine dieser ID’s abgebildet wird. Dabei muss m ausreichend groß gewählt werden, um Überlappungsfreiheit zu gewährleisten. Die IDs h
liegen somit im Bereich 0 < h < 2m − 1. Wie bei DHT-basierenden Algorithmen
üblich werden auch die Knoten in den gleichen Wertebereich, also als Punkte auf
den ID-Kreis abgebildet. Die Operation K = N achf olger(h) liefert den nächstgelegenen Knoten K von der ID h aus gesehen im Uhrzeigersinn. Für jeden Knoten K
gilt K = V orgaenger(N achf olger(K)). Ein Knoten mit der ID K verwaltet alle Datensätze für deren ID h gilt: K = N achf olger(h).
Routing im Chord
Jeder Knoten im Chord kennt seinen Vorgängerknoten und seinen Nachfolgerknoten.
Das simpelste Routing wäre also ein Pfad im Uhrzeigersinn um den Kreis bis zum Ziel.
Um eine logarithmische Anzahl von Routing-Schritten zu gewährleisten, kennt jeder
Knoten N noch eine festgelegte Zahl an Fingerknoten N.f inger[i]. Diese sind wie folgt
rekursiv definiert:
N.F inger[1] = N achf olger(N )
(3.1)
N.F inger[i + 1] = N achf olger(N + 2i )
(3.2)
32
Algorithmen zur verteilten Speicherung von Daten
Bisherige Arbeiten
Das Routing vom Knoten N zur Ziel-ID z erfolgt weiterhin strikt im Uhrzeigersinn. Dabei wird immer der Fingerknoten N.F inger[i] gewählt, für den gilt:
N.F inger[i] < z < N.F inger[i + 1]. Abbildung 3.4 zeigt den Wertebereich mit Knoten sowie die Fingerknoten eines ausgewählten Knotens.
Nachfolger(K)
Knoten K
Abschnitt, der von
Knoten K verwaltet wird
Zeiger auf
K.Finger[i]
Vorgaenger(K)
Hilfslinien: N + 2
i
0
Abbildung 3.4: Chord-Wertebereich mit Knoten und Fingerknoten
Hinzufügen neuer Knoten und Entfernen von Knoten
Das Hinzufügen neuer Knoten erfolgt wiederum durch Wahl eines zufälligen ID durch
den neuen Knoten N . Der Knoten K mit K = N achf olger(N ) übergibt alle Datensätze
mit IDs i < N an den neuen Knoten. Das Entfernen eines Knotens führt zur Abgabe
aller Datensätze an seinen Nachfolger.
Um den Ausfall von Knoten sowie den Zugang neuer Knoten zu bemerken, wird
regelmäßig von allen Knoten eine Selbstheilungsfunktion stab() ausgeführt. Dabei fragt
ein Knoten seinen Nachfolger nach dessen Vorgänger. Hierbei wird bemerkt, wenn sich
ein neuer Knoten zwischen den beiden Knoten angesiedelt hat. Außerdem bemerkt jeder
Knoten auf diese Weise den Ausfall seines Nachfolgers und kann dessen Datenbereich
zukünftig mitverwalten.
33
Algorithmen zur verteilten Speicherung von Daten
3.2.5
Bisherige Arbeiten
Distance Halving
Die Entwicklung der Algorithmen erreichte mit Viceroy [29] einen neuen Meilenstein.
Erstmals war es möglich, eine logarithmische Anzahl von Routing-Schritten mit einer konstanten Anzahl von Routing-Tabellen-Einträgen pro Knoten zu realisieren. Da
Viceroy ein sehr komplexer Algorithmus ist, wird er nicht näher beschrieben.
Eine nochmalige Verringerung der Anzahl der Routingschritte gelang mit Distance
Halving. Dieser Algorithmus kommt mit folgenden Komplexitäten für die Anzahl der
Routing-Schritte (dilatation - Formel 3.3) und Routing-Tabellen-Einträge pro Knoten
(linkage - Formel 3.4) aus. Dabei repräsentiert n die Anzahl der Knoten und d eine zur
Dimensionalität äquivalente Option des Algorithmus’, die am Ende dieses Abschnittes
erklärt wird.
O(dilatation) = O(logd n)
O(linkage) = O(d)
(3.3)
(3.4)
Da es sich bei Distance Halving um einen erstaunlich einfachen Algorithmus handelt, wird er nachfolgend kurz erklärt.
Bei Distance Halving werden die Schlüssel der Datensätze durch eine Hash-Funktion
auf einen Bereich von 0 bis 1 abgebildet. Auch jeder Knoten bekommt eine ID in diesem
Wertebereich. Der Knoten K[i] verwaltet dabei alle Datensätze für deren IDs h gilt:
K[i] ≤ h < K[i + 1].
(3.5)
Aufbau der Routing-Tabelle
Jeder Knoten K verwaltet Zeiger in der Art, dass er sämtliche Knoten Z kennt, die eine
der IDs z verwalten, auf die eine der folgenden Eigenschaften für jede von K verwaltete
ID k zutrifft.
z = k/2
k+1
z =
2
(3.6)
(3.7)
Dabei beschreibt Eigenschaft 3.6 immer Zeiger nach links in die linke Hälfte des Wertebereichs und Eigenschaft 3.7 immer Zeiger nach rechts in die rechte Hälfte des Wertebereichs.
34
Algorithmen zur verteilten Speicherung von Daten
Bisherige Arbeiten
Die beiden Zeiger 3.6 und 3.7 haben eine besondere Eigenschaft, der der Algorithmus seinen Namen verdankt: Gegeben seien zwei beliebige Punkte p1 und p2 im Wertebereich der Hash-Funktion. Wendet man eine der Zeigerfunktionen auf diese beiden
0
0
0
Punkte an, so erhält man p1 und p0 2 . Es gilt dann p1 − p2 = 21 (p1 − p2 ). Der Abstand
zwischen den Punkten halbiert sich bei genau einer Anwendung. Diese Eigenschaft
bildet die Grundlage für das Routing.
Routing durch Distance Halving
Angenommen, Knoten K0 möchte zum Zielpunkt z0 routen. Man stelle sich sowohl
vom Startpunkt K0 als auch von z0 ausgehend eine Ausführung eines beliebigen, aber
für beide gleichen Zeigers vor. Man erhält die Punkte K1 und z1 . Dieser Vorgang wird
so lange wiederholt, bis Kx und zx in den Verwaltungsbereich des gleichen Knotens X
fallen. Dieses Vorgehen wird in Abbildung 3.5 dargestellt.
0
1
0.5 d
Knoten X
d
Ziel z
Knoten K
Hin−Route − Zeiger links (eigentlich beliebig)
Rück−Route − Zeiger rechts (entgegengesetzt)
Abbildung 3.5: Wertebereichsaufteilung
Algorithmus
und
Routing
im
Distance-Halving-
Die Route von K0 zu z0 sieht nun im Wertebereich wie folgt aus: K0 , K1 , . . . ,
Kx , zx−1 , . . . , z1 , z0 . Dabei wird jeder dieser Punkte von einem Knoten verwaltet, der
die entsprechenden Routing-Schritte ausführt. Es fällt auf, dass die erste Hälfte des
Routing-Pfades nur von der Wahl der Zeiger, links oder rechts, abhängig und somit
frei wählbar ist. Die zweite Hälfte stellt den Rückweg dar und ist durch die Wahl der
ersten Hälfte des Pfades festgelegt.
35
Algorithmen zur verteilten Speicherung von Daten
Bisherige Arbeiten
Erweiterungen von Distance Halving
Das soeben beschriebene Verfahren lässt sich nun beliebig skalieren. Wenn statt der
beiden Zeiger 3.6 und 3.7 die folgenden drei Zeiger verwendet werden:
z = k/3
k+1
z =
3
k+2
z =
3
(3.8)
(3.9)
(3.10)
so wird der Abstand zwischen Start- und Zielpunkt pro Schritt gedrittelt. Dies geschieht
auf Kosten der Länge der Routing-Tabelle, die sich um den Faktor 32 verlängert, da an
Stelle von 2 Zeigern nun 3 Zeiger pro Knoten gespeichert werden müssen. Die Anzahl
der verwendeten Zeiger d ist der Parameter von dem die Komplexitäten 3.3 und 3.4
abhängen.
36
Kapitel 4
Konzept
In diesem Kapitel werden konzeptuelle Überlegungen dargelegt. Den Anfang bildet ein
Abschnitt zur geplanten Simulation, insbesondere zur Modellierung des zu simulierenden Systems und der Wahl einer geeigneten Plattform.
Darauf folgen einige Überlegungen zu dem zu implementierenden Algorithmus. Da
als Grundlage CAN verwendet wird und der Algorithmus bereits im letzten Kapitel
ausführlich erklärt wurde, werden hauptsächlich mögliche Optimierungen diskutiert.
4.1
Die Simulation
Dieser Abschnitt charakterisiert die geplante Simulation. Dabei wird zuerst das zu
simulierende System untersucht. Anschließend wird ein passendes Modell entwickelt.
Darauf folgt die Wahl einer geeigneten Simulationsumgebung auf Basis der gewonnenen
Erkenntnisse.
4.1.1
Das simulierte System
Das System besteht aus einer gegebenen Netzwerktopologie, über welche eine Reihe
von Knoten verbunden sind. Diese Knoten kommunizieren nach bestimmten Vorgaben
miteinander. Die Knoten werden von Benutzern gesteuert. Zu untersuchende Objekte
sind also die beteiligten Netzwerkkomponenten, die Knoten sowie die Benutzer.
37
Die Simulation
Konzept
Netzwerkkomponenten
Grundsätzlich unterschiedliche beteiligte Netzwerkkomponenten sind Hubs, Switches
und Router sowie die Knoten selbst. Eine Gemeinsamkeit all dieser Netzwerkkomponenten sind die Verbindungen zwischen ihnen, die bestimmte Kosten bei der Kommunikation verursachen. Außerdem verursachen die Netzwerkkomponenten durch ihre individuellen Eigenschaften Kosten. Die Kosten lassen sich über die zu übertragene Datenmenge, die maximale Paketgröße im verwendeten Netzwerkprotokoll sowie verfügbare
Bandbreite und Latenzeigenschaften charakterisieren.
Knoten
Die Knoten haben neben der Kommunikation über die Netzwerktopologie weitere Eigenschaften, die Kosten verursachen. Dazu gehören in erster Linie die Speicher. Festspeicher sowie flüchtige Speicher sind in ihrer Kapazität begrenzt und verursachen
Kosten, insbesondere Latenz und Bandbreite.
Benutzer
Die Benutzer lösen Ereignisse in Form von Befehlen an die Knoten aus und nehmen
die Reaktionen der Knoten auf diese Befehle entgegen. Sie haben selbst aber keine
Eigenschaften, die für die Simulation von Bedeutung sind. Sie verursachen somit im
System äußere Einflüsse, auf die die im System verbundenen Objekte, Knoten und
Netzwerkkomponenten, in geeigneter Form reagieren.
Damit ergeben sich weitere Eigenschaften für das System. Im Einzelnen sind das die
Zeitpunkte der Befehlsauslösung sowie die Dauer der Ausführung und eine Information
über den Erfolg der Befehlsausführung.
4.1.2
Entwicklung eines geeigneten Modells
Zuerst werden alle im System verbundenen Objekte und ihre Eigenschaften abgebildet.
Darauf folgt die Modellierung der Systemeigenschaften. Den Abschluss bildet eine kurze
Zusammenfassung aller Eigenschaften des Modells.
Netzwerkkommunikation
Stellvertretend für die Netzwerkkommunikation wird die sendende Netzwerkschnittstelle abgebildet und um Eigenschaften der daran angeschlossenen Netzwerkverbin38
Die Simulation
Konzept
dung ergänzt. Für die Untersuchung relevante Eigenschaften sind die durchschnittliche
Bandbreite bnet der Netzwerkverbindung und die Latenz lnet . Sie bestimmen die Übertragungszeit ts eines Netzwerkpaketes mit der Größe snet :
snet
(4.1)
bnet
Die minimale und maximale Größe eines solchen Netzwerkpaketes smin und smax
sowie der Overhead pro Netzwerkpaket sovh , also die durchschnittliche Größe, des nicht
durch Daten nutzbaren Teils, stellen weitere Eigenschaften der Netzwerkkommunika→
−
tion dar. Außerdem sind noch die Größe snet , der Inhalt i net und die Zieladresse znet
der Netzwerkpakete von Bedeutung.
ts = lnet +
Hub
Ein Hub wird als ein Objekt angenommen, das Netzwerkpakete empfängt, eine bestimmte Zeit - seine eigene Latenz lhub - wartet und dann das Paket über all seine
Netzwerkschnittstellen weiter versendet. Damit ergibt sich folgende Bearbeitungszeit
thub eines Paketes im Hub mit ts als die Übertragungszeit des Paketes am langsamsten
Interface (laut Formel 4.1):
thub = lhub + ts
(4.2)
Switch
Ein Switch sendet ein Netzwerkpaket anhand einer Logik nur an bestimmte Interfaces
und ist in der Lage bereits das nächste Paket zu bearbeiten während das vorangehende
Paket noch versandt wird. Eine maximale Queue-Länge wird nicht simuliert. Damit
berechnet sich die Bearbeitungszeit tswi eines Netzwerkpaketes im Switch nach Formel
4.3 aus der Bandbreite der Netzwerkverbindung bnet , von der das Paket empfangen
wird. Der Wert von aswi hängt vom Algorithmus Aswi ab, mit dem der Switch arbeitet.
Die beiden Extrema sind Cut Through und Store and Forward . Bei einem Switch,
der mit Aswi = Cut Through arbeitet, gilt aswi = 14, da nur der Ethernet-Header
gelesen und anhand dessen Inhalt das Ziel-Interface ausgewählt wird. Ein Switch, der
mit Aswi = Store and Forward arbeitet, liest das gesamte Paket ein und entscheidet
erst dann. Hier gilt aswi = snet .
tswi =
aswi
bnet
(4.3)
39
Die Simulation
Konzept
Router
Ein Router empfängt ein Netzwerkpaket zuerst vollständig und entscheidet anschließend, an welche Schnittstellen das Paket versandt wird. Dieser Entscheidungsprozess
nimmt Zeit in Anspruch, die Latenz lrou des Routers. Die Bearbeitungszeit eines Paketes trou ergibt sich demzufolge folgendermaßen aus der Latenz lrou , der Bandbreite bnet
der Netzwerkverbindung, von der das Paket empfangen wurde und der Größe snet des
zu bearbeitenden Netzwerkpaketes:
trou = lrou +
snet
bnet
(4.4)
Knoten
Der Knoten hat über seine Kommunikationsschnittstellen hinaus keine weiteren Eigenschaften in Verbindung mit der Netzwerkkommunikation. Die Speicherung von Daten
im Knoten findet über zwei mögliche Speicher statt, den Festspeicher und den Cache.
Diese werden im Anschluss modelliert.
Speicher
Ein Speicher hat eine maximale Kapazität kmem . Außerdem benötigt er zum Speichern
und Laden von Daten eine Latenzzeit lmem und überträgt auf sein Speichermedium Daten nur mit einer durchschnittlichen Bandbreite bmem . Die Zeit tmem für das Speichern
oder Laden einer Datenmenge der Größe s berechnet sich wie folgt:
smem
(4.5)
bmem
Außerdem hat ein Speicher einen Füllstand d, der die Menge der momentan dort
→
−
abgelegten Daten i netp widerspiegelt.
tmem = lmem +
Systemeigenschaften
Zusätzlich zu den zuvor aufgeführten Attributen der einzelnen Objekte gibt es noch
Eigenschaften, die sich keinem Objekt zuordnen lassen, aber für die Simulation von
Bedeutung sind. Die wichtigste Eigenschaft ist hierbei die Zeit t, auch als Simulationszeit bezeichnet. Außerdem sind noch der Startzeitpunkt Tcmd und die Ausführungszeit
−
tcmd der Befehle der Benutzer an die Knoten von Bedeutung sowie die Rückgabe →
r cmd
und der Ausführungsstatus zcmd dieser Befehle.
40
Die Simulation
Konzept
Zusammenfassung
Tabelle 4.1 stellt zusammenfassend alle Eigenschaften der Simulation dar. Dabei wird
zwischen konstanten Eigenschaften, wie Kommunikationskosten oder Grenzwerten, und
Variablen unterschieden. Die konstanten Eigenschaften werden zu Beginn der Simulation festgelegt und definieren die Ausgangssituation. Die Variablen verändern sich
während der Simulation.
Eine besondere Rolle spielen die Ausführungszeiten und Rückgabewerte von Befehlen an Knoten. Sie werden während des Ablaufes der Simulation ermittelt und stellen
damit die Ergebnisse dar.
4.1.3
Simulationsumgebung
Die Wahl einer geeigneten Simulationsumgebung findet in zwei Schritten statt. Zuerst
wird das entwickelte Modell hinsichtlich bestimmter Kriterien untersucht. Aus diesen
werden Rückschlüsse auf die Anforderungen an die Simulationsumgebung geschlossen.
Einordnung des Modells
Nachfolgend wird versucht, das zuvor entwickelte Modell des zu simulierenden Systems hinsichtlich der in 2.4.2 vorgestellten Kriterien einzuordnen, um eine geeignete
Simulationsumgebung zu finden.
statisch oder dynamisch Es handelt sich um ein dynamisches Modell, da die
Ausführung zeitabhängig ist.
stochastisch oder deterministisch Das Modell, wie es zuvor beschrieben wurde,
ist deterministisch, da keine der Eigenschaften und somit keine Variablenveränderungen
zufallsabhängig sind.
Es wäre denkbar, die Eigenschaften als Durchschnittswerte anzusehen und während
der Simulation mit zufallsabhängigen Abweichungen zu versehen, um eine möglichst
wirklichkeitsnahe Nachbildung des Systems zu erhalten. Ein solches Modell wäre dann
stochastisch.
Für den weiteren Verlauf der Arbeit wird das deterministische Modell benutzt.
kontinuierlich oder diskret Das Verhalten des Modells wird durch äußere und
innere Ereignisse beeinflusst. Diese können zu beliebigen Zeitpunkten auftreten und
41
Die Simulation
Eigenschaft
Konzept
Beschreibung
Kosten der einzelnen Komponenten - konstant
bnetn,p Bandbreite der reinen Netzwerkkommunikation zwischen Gerät n
und Gerät p
lnetn,p Latenz der reinen Netzwerkkommunikation zwischen Gerät n und
Gerät p
lhubh durch den Hub h verursachte Latenz
Aswis vom Switch s verwendeter Algorithmus
lrour durch den Router r verursachte Latenz
bmemk,m Bandbreite des Speichers m im Knoten k
lmemk,m Latenz des Speichers m im Knoten k
Eigenschaften der Netzwerkkommunikation - konstant
smin minimale Größe eines Paketes auf dem Netzwerk
smax maximale Größe eines Paketes auf dem Netzwerk
sovh Größe des Overheads pro Paket durch Header auf dem Netzwerk
Systemeigenschaften - konstant
Tcmdk,x Zeitpunkt, zu dem der Befehl x an den Knoten k abgesetzt wird
tcmdk,x Ausführungszeit des Befehls x an den Knoten k
→
−
r cmdk,x Antwort des Knotens k auf einen Befehl x
zcmdk,x Rückgabewert des Knoten k auf einen Befehl x
Variablen
t Simulationszeit
snetp Größe des Netzwerkpaketes p
→
−
i netp Inhalt der Nutzlast des Netzwerkpaketes p
znetp Zieladresse des Netzwerkpaketes p
fk,x Füllstand des Speichers x im Knoten k
→
−
i netp Inhalt des Speichers x im Knoten k
Tabelle 4.1: Liste aller Eigenschaften des Modells.
42
Algorithmenentwicklung
Konzept
bestimmen Veränderungen in den Variablen des Systems. Die Inhalte sämtlicher Variablen mit Ausnahme der Simulationszeit beschränken sich auf eine diskrete Wertemenge
und verändern sich ausschließlich durch das Auftreten von Ereignissen. Es handelt sich
somit um ein ereignisdiskretes Modell.
Wahl der Simulationsumgebung
Wie in Abschnitt 2.4.3 beschrieben, eignet sich zur Nachbildung eines ereignisdiskreten
Modells eine ereignisgesteuerte Simulation.
Ein Paket zur Realisierung ereignisgesteuerter Simulationen in Java ist simjava
[26]. Simjava unterstützt die Abbildung von Objekten und deren Eigenschaften sowie
die ereignisgesteuerte Simulation der Abläufe im Modell. Außerdem stellt es weitere
Möglichkeiten, darunter Pseudo-Zufall, die Visualisierung von Simulationsläufen, das
Sammeln und Auswerten von Ergebnissen sowie das Schreiben detaillierter Logfiles,
zur Verfügung
4.2
Algorithmenentwicklung
Die Grundlage für den zu implementierenden Algorithmus bildet CAN, obwohl dieser
Algorithmus in der einfachsten Form, betrachtet man der Länge der Routing-Pfade,
eine schlechte Komplexität aufweist. Nachfolgend werden die Gründe für diese Wahl
erläutert. Im Anschluss werden einzelne Optimierungen vorgeschlagen, die bei der Implementierung umgesetzt werden können.
Vorteile von CAN
Die Routingtabellen im CAN bestehen im einfachsten Fall aus den Nachbarn in allen
2d Richtungen. Damit sind die Routingtabellen im Vergleich zu einigen anderen Algorithmen sehr kurz und von einfacher Struktur. Einfach strukturierte Routingtabellen
vereinfachen den Algorithmus selbst. Die einzelnen Knoten werden durch das Routing
nur minimal belastet.
CAN bietet sehr viele Freiheiten in der Wahl der Routing-Pfade. Ohne Umwege benutzen zu müssen, bietet das adaptive x-y-z-Routing meist eine große Anzahl möglicher
Routing-Pfade, um von einem Startpunkt aus ein bestimmtes Ziel zu erreichen.
Ein weiterer Vorteil für die Benutzung von CAN gerade in Simulationen ist die gute
Visualisierbarkeit des zweidimensionalen Wertebereichs.
43
Algorithmenentwicklung
Konzept
Mögliche Optimierungen
Außerdem bietet CAN sehr viele Möglichkeiten zur Optimierung. Einige wurden bereits
in verschiedenen Forschungsprojekten validiert, andere können im Simulator untersucht
werden. Nachfolgend werden die für diese Arbeit interessantesten Optimierungen vorgestellt.
Lastoptimierung und Knotenausfall Wenn die im CAN verwendete HashFunktion nicht selbstständig für eine optimale Gleichverteilung sorgt, ist es möglich,
dass eine Zone überläuft und der Knoten, der diese Zone versorgt, entlastet werden
möchte. Außerdem ist es möglich, dass ein Knoten aus dem Speicher entfernt wird
und seine Zone mit keiner Nachbarzone mehr konvex zusammenfügbar ist. Beide Fälle
führen dazu, dass mehr Zonen als Knoten vorhanden sind und ein Knoten entgegen
seiner vorgesehenen Funktionsweise zwei Zonen verwalten muss.
Die Optimierung sieht vor, dass jeder Knoten im CAN in der Lage ist, zwischen
z1 und z2 voneinander unabhängige Zonen mit ihren jeweiligen Nachbartabellen zu
verwalten. Dabei gilt z1 < z2 . Ziel des CAN ist es, dass jeder Knoten genau z1 Zonen
verwaltet. In den zuvor beschriebenen Ausnahmefällen ist es nun möglich, überschüssige Zonen so auf andere Knoten zu verteilen, dass sie maximal z2 Zonen verwalten.
Damit läuft das gesamte CAN trotz dieser Ausnahmefälle noch immer innerhalb seiner
Spezifikation.
Diese Optimierung hat auch Einfluss auf die Länge der Routing-Pfade. Dadurch,
dass die z1 bis z2 Zonen, die ein Knoten verwaltet zufällig über den Wertebereich
verteilt sind, ist die Wahrscheinlichkeit, dass eine der Zonen dichter am Ziel liegt als
eine andere, sehr hoch. Dies geht allerdings mit einer Erhöhung der Anzahl der Zonen
insgesamt einher. Ob der Vorteil der Verteilung der Zonen hierbei den Nachteil der
größeren Zonenanzahl überwiegt, ist im Simulator leicht überprüfbar.
Lastoptimierung bei Einbringen eines neuen Knotens Einen neuen Knoten
per Zufall in das CAN einzubringen, kann auf Dauer zu einer Ungleichverteilung der
Datenlast im verteilten Speicher führen. Dies wird insbesondere dann passieren, wenn
die Hash-Funktion die Daten nicht gleichmäßig verteilt, weil sie für die Daten nicht gut
geeignet ist.
Um diesem Effekt entgegenzuwirken, ist es sinnvoll, einen neuen Knoten dort in
den Wertebereich einzubringen, wo er benötigt wird. Das heißt, der neue Knoten übernimmt Zonen von Knoten, die bereits z2 Zonen verwalten. Sollten keine solchen Knoten
44
Algorithmenentwicklung
Konzept
vorhanden sein, so teilen Knoten, die besonders stark gefüllte Zonen verwalten, diese
in zwei Hälften und geben eine Hälfte an den neuen Knoten ab.
Durch Broadcasts ermittelte Nachbartabellen Ein großes Problem aller DHTbasierenden Algorithmen ist die Diskrepanz zwischen Overlay- und IP-Routing. Um
diesem Effekt entgegenzuwirken, kann jeder Knoten im CAN über Layer-2-Broadcasts
alle Knoten ermitteln, die sich im gleichen Subnetz befinden und somit besonders
schnell zu erreichen sind und diese in eine zusätzliche Nachbartabelle aufnehmen.
Da diese, im weiteren Verlauf der Arbeit als Layer 2 Nodes (L2N) bezeichneten
Knoten im Overlay-Routing mit hoher Wahrscheinlichkeit nicht-benachbarte Zonen
verwalten, kann somit unter Ausnutzung eventuell vorhandener Lokalität im CANRouting abgekürzt werden.
Caching als Replikation In [34] werden zwei Möglichkeiten des Cachings vorgeschlagen. Eine davon ist das Replizieren von Daten auf die Nachbarn mit dem Ziel,
hotspots im CAN zu vermeiden. Diese Technologie kann zu einer Replikation häufig
verwendeter Daten ausgebaut werden.
Daten, die von einem Knoten im CAN angefragt werden, werden je nach RoutingPfad der Anfrage im entsprechenden Nachbarknoten des Datenverwalters repliziert.
Dies passiert natürlich unter Benutzung von Verdrängungsmechanismen auf Basis der
Häufigkeit von Anfragen, um den Speicherplatz der Nachbarknoten nicht zu überlasten.
Außerdem muss gewährleistet werden, dass bei Veränderung dieser Daten auch die
Replikatseigner informiert werden.
Neu bei diesem Verfahren ist, dass beim Bemerken eines Knotenausfalls durch den
Nachbarknoten sämtliche im Cache befindlichen Datensätze gerettet und an den neuen
Zonenverwalter übermittelt werden können.
Dieses Replikationsverhalten sichert die Replikation häufig verwendeter Datensätze
und spart die Kosten zur Replikation von Datensätzen auf die selten oder nie zugegriffen wird. Das ist immer dann sinnvoll, wenn in einem verteilten Speicher public data
verwaltet wird, also Daten die ohnehin bekannt sind und deren Verlust keine Probleme
mit sich bringt.
Maskierte Anfragen Da DHT-basierende Algorithmen auf Hash-Funktionen basieren, stellen maskierte Anfragen ein Problem dar. Es muss immer der gesamte Datenraum durchsucht werden.
45
Algorithmenentwicklung
Konzept
Dieses Problem kann mit speziellen Hash-Funktionen gelöst werden, die zu Gunsten ihrer Nachvollziehbarkeit Einschränkungen in der Gleichverteilung der Datensätze
über ihren Wertebereich hinnehmen, was auf Grund einiger der vorangehenden Optimierungen nicht mehr problematisch ist.
Nachvollziehbarkeit bedeutet in diesem Zusammenhang, dass die Anwendung der
0
Hash-Funktion auf die Maske M selbst wiederum eine Maske M erzeugt, mit deren
Hilfe im CAN gezielt nach Datensätzen gesucht werden kann, die auf die Maske M
passen. Im Idealfall wird M dabei in einen Flächenteil des Wertebereichs überführt,
dessen Verwalter direkt angesprochen werden können.
Um trotzdem eine annähernde Gleichverteilung der Schlüssel über den Wertebereich
zu gewährleisten, ist eine genaue Kenntnis der zu erwartenden Beschaffenheit und
Verteilung der Schlüssel notwendig. Die Hash-Funktion wird somit vom Einsatzszenario
des verteilten Speichers abhängig.
46
Kapitel 5
Implementation
Dieses Kapitel beschreibt die Implementation des Simulators und des darauf aufsetzenden assoziativen Speicherkonzeptes. Den Anfang bildet die Beschreibung des Schichtenmodells des entwickelten Simulators sowie der darin befindlichen Schnittstellen. Anschließend wird die Implementation des assoziativen Speicherkonzeptes beschrieben.
5.1
Realisierung des Simulators
Der zu realisierende Simulator lässt sich sehr effektiv in drei unabhängige Schichten
untergliedern. Die Simulation der Netzwerkkomponenten als äußere Schicht. Daran
schließt die Nachbildung der Eigenschaften eines Speicherknotens an. Die innere Schicht
stellt die Implementation des assoziativen Speicherkonzeptes dar. Eine schematische
Darstellung dieser Schichtenarchitektur befindet sich in Abbildung 5.1.
In den folgenden zwei Abschnitten werden die äußeren beiden Schichten des Simulators mit ihren Schnittstellen beschrieben. Eine Beschreibung der Implementation der
inneren Schicht erfolgt gesondert im nächsten Kapitel.
5.1.1
Der Netzwerksimulator
Die äußere Schicht des Simulators besteht hauptsächlich aus dem Netzwerksimulator.
Er stellt die notwendigen Netzwerkkomponenten, Hub, Switch, Router und Knoten zur
Verfügung mit denen sich beliebige Netzwerktopologien realisieren lassen.
Eine besondere Rolle kommt dabei dem Knoten zu. Er stellt zwar eine eigenständige
Netzwerkkomponente in der Simulation dar, ist aber über die Netzwerkfunktionalität
47
Realisierung des Simulators
Implementation
User
Algorithmus
Speicherknoten
Output Generator
Reply Receiver Statistics Generator
Console
Caching,
Replication, Data Management, Failure Management
Local Memory Management System Watchdog
Overlay Routing
Hub
Switch
Router
Communication
Host
Network Setup
HDs
Cache
Timer Trigger
Send Receive
Secondary Storage Event Management Network Access
Setup
Logging Setup
Netzwerksimulator
Command
Transmitter
Command Queue
Scenario Setup
Scheduler
Abbildung 5.1: Schematische Abbildung des Netzwerksimulators
hinaus nur abstrakt realisiert. Die jeweilige Implementation entscheidet über die Funktionalität, die auf diesem Knoten realisiert wird.
Zur äußeren Schicht des Simulators gehören außerdem eine Benutzerimplementation, in Abbildung 5.1 als User bezeichnet, und eine Setupkomponente.
Aufgabe der Benutzerimplementation ist die Steuerung der laufenden Simulation
durch das Auslösen externer Ereignisse. Von hier werden über einen Scheduler zu festgelegten Zeitpunkten Kommandos an einen Knoten gegeben, die dieser je nach Implementation verstehen und ausführen kann.
Das Setup ist für den Aufbau der Simulation bis zum Start der selben verantwortlich. Hier wird die Netzwerktopologie initiiert, die aktiven Knoten mit Benutzern und
diese wiederum mit Tasklisten versehen, in denen sich die Anweisungen für den jeweiligen Scheduler befinden. Außerdem werden grundsätzliche Parameter der Simulation,
wie zum Beispiel für das Logging, im Setup initialisiert.
Basierend auf diesem Netzwerksimulator lassen sich alle denkbaren netzwerkbasierten Probleme nachbilden, indem der Knoten mit einer entsprechenden Implementation
48
Implementation des verteilten Speicherkonzeptes
Implementation
versehen wird. Eine besondere Implementation stellt hierbei ein Speicherknoten eines
verteilten Speichers dar.
5.1.2
Ein einzelner Speicherknoten
Die mittlere Schicht besteht aus einer speziellen Implementation des Knotens. Sie stellt
über den Netzwerkzugriff weitere Schnittstellen zur Verfügung. Dazu gehören Nachbildungen von Festspeichern sowie ein Event-Management.
Der Festspeicher stellt zwei verschiedene Speicherformen zur Verfügung, Festspeicher und Cache. Diese können mit unterschiedlichen Werten für Latenz und Bandbreite
versehen werden. Ob und wie diese genutzt werden obliegt der Implementation, also
dem Algorithmus.
Das Event-Management bietet dem Algorithmus die Möglichkeit, unabhängig von
der Netzwerkschicht beim Ablauf von Timern bestimmte Funktionen auszulösen. Dies
ist zur Realisierung von Timeouts und regelmäßig wiederkehrenden Aufgaben sinnvoll.
Ein weiterer Bestandteil der mittleren Schicht verallgemeinert die Benutzerschnittstelle so, dass alle implementierten Algorithmen den gleichen Befehlssatz verarbeiten
und die Auswertungen der Simulation vom Algorithmus unabhängig stattfinden.
5.2
Implementation des verteilten Speicherkonzeptes
An die Implementation des verteilten Speicherkonzeptes werden verschiedene Anforderungen gestellt. Sie soll unabhängig vom darunter liegenden Simulator entwickelt werden. Dabei dürfen als Verbindung ausschließlich die von der Speicherknoten-Schicht
angebotenen Schnittstellen verwendet werden. Damit wäre es zum Beispiel möglich,
den Simulator gegen ein Network-Abstraction-Layer, also eine netzwerkfähige Implementation auszutauschen und das Speicherkonzept tatsächlich zu verwenden.
Sehr nah an der soeben gestellten Anforderung liegt die Forderung nach Austauschbarkeit. Das Speicherkonzept selbst soll ohne Probleme gegen die Implementation anderer Algorithmen ausgetauscht werden können, so dass auch diese auf dem Simulator
untersucht werden können.
Neben diesen Anforderungen ist es sinnvoll, die Implementation des Speicherkonzeptes übersichtlich zu gestalten, so dass spätere Veränderungen mit geringem Aufwand
möglich sind. Außerdem wäre es wünschenswert, dass Teile des Speicherkonzeptes durch
49
Implementation des verteilten Speicherkonzeptes
Implementation
veränderte Versionen austauschbar oder in anderen Algorithmen wiederverwendbar
sind.
5.2.1
Taskstruktur
Alle zuvor gestellten Anforderungen lassen sich durch die Realisierung des Speicherkonzeptes als eine Reihe von Tasks realisieren. Dazu ist eine Untergliederung des Algorithmus’ zur verteilten Datenspeicherung in einzelne Aufgaben notwendig, so dass diese
später als unabhängige Tasks implementiert und zu dem gewünschten Speicherkonzept
zusammengesetzt werden können. Tabelle 5.1 enthält eine solche Untergliederung.
Task
Beschreibung
Join
Ein neue Knoten tritt dem assoziativen verteilten Speicher
bei
Store
Ein Datensatz bestehend aus Schlüssel und Daten wird im
Speicher abgelegt
Query
Anhand eines gegebenen Schlüssels wird nach einem Datensatz im Speicher gesucht
Masked Query Anhand eines gegebenen Schlüssels und einer einfachen Bitmaske wird nach Datensätzen im Speicher gesucht
Leave
Ein Knoten tritt aus dem assoziativen verteilten Speicher
aus
Tabelle 5.1: Zerlegung eines verteilten Datenspeicherungsalgorithmus’ in einzelne
Tasks
Die einzelnen Tasks werden als Ableitungen einer abstrakten Basisklasse implementiert, um Austauschbarkeit und Transparenz zu gewährleisten. Da einige der Tasks, zum
Beispiel Join, in ihrer Realisierung noch immer sehr komplex sind, ist es sinnvoll die
weitere Zergliederung eines Tasks in mehrere Tasks zuzulassen.
Um das Konzept der Transparenz auf die simulierte Netzwerkkommunikation zu
übertragen, werden auch die über das Netzwerk transportierten Daten als Ableitung
einer abstrakten Basisklasse realisiert.
50
Messungen
5.2.2
Implementation
Graphische Schnittstelle
Der Ablauf einer Simulation diesen Umfanges ist sehr komplex. Jedes modellierte Objekt wird zum Beispiel als eigener Thread realisiert, der auf Ereignisse reagiert und
wiederum Ereignisse auslöst. Um die Simulation trotzdem nachvollziehbar zu machen
und das Finden von Fehlern zu erleichtern ist die Implementation einer grafischen
Schnittstelle sinnvoll.
Eine solche Schnittstelle wurde für den implementierten Algorithmus realisiert. Die
einzelnen Rechnerknoten und ihre Aktivität werden genauso dargestellt wie eine Übersicht über alle Zonen, in die der Wertebereich zergliedert ist. Dabei ist mit Hilfe verschiedener Farben eine Zuordnung zwischen Knoten und den von ihm verwalteten Zonen möglich. Eine Abbildung der realisierten grafischen Schnittstelle zeigt Abbildung
5.2.
Im oberen Teil der Grafik sieht man jeweils ein gefärbtes Rechteck pro Knoten.
Die grüne Umrandung bedeutet, dass der umrandete Knoten dem verteilten Speicher
erfolgreich beigetreten ist. Die Zonen, die er verwaltet sind unten in der Abbildung des
CAN-Wertebereichs mit der gleichen Farbe dargestellt.
In den Darstellungen der einzelnen Knoten erkennt man die relativen Füllstände
des Speichers des jeweiligen Knotens. In den einzelnen CAN-Zonen erkennt man die
absolute Anzahl der Datensätze pro Zone. Einziges begrenzendes Element ist die Speichergröße der Knoten. Die Anzahl der Datensätze pro Zone ist theoretisch unbegrenzt.
5.3
Messungen
Es werden verschiedene Simulationsläufe durchgeführt. Diesen liegen zwei unterschiedliche Netzwerktopologien zu Grunde, welche in den nächsten Abschnitten vorgestellt
werden. Anschließend werden die Simulationsläufe selbst vorgestellt. Eine Auswertung
der Ergebnisse erfolgt im nächsten Kapitel.
5.3.1
Topologie T1
Einen Überblick über die Netzwerktopologie T1 gibt Abbildung 5.3. Es handelt sich
hierbei um eine zwei- und drei dreistufige Netzwerke um einen Backbone wie sie zum
Beispiel auf einem Universitätscampus oder in einer mittleren Firma denkbar sind.
Den Backbone bildet der Switch S1. Daran angeschlossen sind die Router R1, R2,
R3 und R4. Die dazwischenliegenden Netzwerkverbindungen haben eine Latenz von
51
Messungen
Implementation
Abbildung 5.2: Grafische Repräsentation einer Simulation eines verteilten Speichers
aus 84 Rechnerknoten mit jeweils drei CAN-Zonen pro Knoten
52
Messungen
Implementation
K1 K2
K31 K32 K33 K34 K35
K3 K4 K5
S2
K6 K7 K8 K9 K10
R1
K45
K44
K43
K42
K41
H6
H8
H1
S5
R4
S1
R2
H7
S3
H2
H3
K11
K12
K13
K14
K15
R3
K40 K39 K38 K37 K36
H5
S4
K20 K19 K18 K17 K16
H4
K30 K29 K28 K27 K26
Rechenknoten
Switch
Router
Hub
K25 K24 K23 K22 K21
LWL − 100 Mb/s − 100 m
LWL − 100 Mb/s − 10 m
10BaseT − 10 Mb/s − 100 m
Abbildung 5.3: Schematische Darstellung der Netzwerktopologie T1
. Das entspricht unlnetS1,R∗ = 0, 505µs und eine Bandbreite von bnetS1,R∗ = 10.000 byte
ms
gefähr einem 100m langen Lichtwellenleiter (LWL) mit einer Bandbreite von 100Mb/s.
An den Router R1 sind über den Switch S2 fünf Knoten angeschlossen. Die anderen
Router führen über einen Switch auf mehrere Hubs und von dort auf fünf Knoten pro
Hub. Die Netzwerkverbindungen zwischen den Routern und den Switches bestehen
aus einem 10m langen LWL mit einer Bandbreite von ebenfalls 100Mb/s. Das ergibt
folgende Parameter:
lnetR∗,S[2−5] = 0, 0505µs
byte
bnetR∗,S[2−5] = 10.000
ms
(5.1)
(5.2)
53
Messungen
Implementation
Die restlichen Verbindungen bestehen aus 100m langem, einfach geschirmtem Kupferkabel 10BaseT mit einer Bandbreite von 10Mb/s, also folgenden Parametern:
lnetS[2−5],H∗ = 0, 570µs
(5.3)
lnetH∗,K∗ = 0, 570µs
byte
bnetR∗,S[2−5] = 1.000
ms
byte
bnetH∗,K∗ = 1.000
ms
(5.4)
(5.5)
(5.6)
Alle
eingesetzten
Switches
verwenden
den
Algorithmus
AswiS∗ = Store and Forward. Die Router haben eine Eigenlatenz von lrouR∗ = 0, 01ms
und alle Hubs kommen ohne Eigenlatenz aus.
5.3.2
Topologie T2
Topologie T2 ist in Abbildung 5.4 dargestellt. Sie ist in der Anzahl der Knoten und
den meisten Eigenschaften mit Topologie T1 identisch. Den wesentlichen Unterschied
stellt eine Verlagerung auf zwei Standorte dar. Es wären zum Beispiel zwei Firmen
oder Universitäten auf unterschiedlichen Kontinenten denkbar.
Den Backbone bilden hier zwei Switches S1 und S5, die sich örtlich weit voneinander
entfernt befinden. Die Verbindung wird als 10.000 km langer LWL mit einer Bandbreite
von 100 Mb/s simuliert. Das ergibt folgende Eigenschaften für diese Verbindung:
lnetS1,S5 = 50, 5ms
byte
bnetS1,S5 = 10.000
ms
5.3.3
(5.7)
(5.8)
Simulationen
Es werden zwei Simulationsreihen durchgeführt. Zuerst wird die Reaktion des Algorithmus’ auf verschiedene Optionen getestet. Anschließend wird die Performance des
verteilten Speicherkonzeptes in Abhängigkeit von der Anzahl der teilnehmenden Knoten ermittelt. Die beiden Simulationsreihen werden jeweils vergleichend auf beiden
Netzwerktopologien T 1 und T 2 durchgeführt.
Bei allen Messungen wird die Performance des verteilten Speicherkonzeptes im Wesentlichen durch drei Faktoren bestimmt. Diese sind in Tabelle 5.2 aufgelistet. Einen
indirekten Einfluss auf die Performance haben die Faktoren in Tabelle 5.3.
54
Messungen
Implementation
K26 K27 K28 K29 K30
K45
K44
K43
K42
K41
K40
K39
K38
K37
K36
K1 K2 K3 K4 K5
S6
S2
R4
R1
H6
S8
H1
R6
S5
S1
R2
H5
S3
K11
K12
K13
H2
R5
R3
S7
S4
K6
K7
K8
K9
K10
K14
K15
H3
H4
K31 K32 K33 K34 K35
K20 K19 K18 K17 K16
K25 K24 K23 K22 K21
Rechenknoten
Router
Switch
Hub
LWL − 100 Mb/s − 10.000 km
LWL − 100 Mb/s − 100 m
LWL − 100 Mb/s − 10 m
10BaseT − 10 Mb/s − 100 m
Abbildung 5.4: Schematische Darstellung der Netzwerktopologie T2
Alle Simulationen laufen wie folgt ab:
1. Alle teilnehmenden Knoten treten in pseudo-zufälliger Reihenfolge dem verteilten
assoziativen Speicher bei. Dabei werden die zeitlichen Abstände so gewählt, dass
es nicht zu Überschneidungen kommt, die die Messung beeinflussen.
2. In der gleichen Reihenfolge, wie die Knoten dem Speicher beigetreten sind, legen
sie jeweils 100 Datensätze mit pseudo-zufälligen Schlüsseln im verteilten Speicher
ab. Auch hier werden die zeitlichen Abstände zwischen den Befehlsausführungen
so gewählt, dass die Ergebnisse der Messungen nicht verfälscht werden.
55
Messungen
Faktor
tjoin
tstore
tquery
Implementation
Beschreibung
Zeit, die ein neuer Knoten benötigt, um sich vollständig in den verteilten Speicher zu integrieren
Zeit, die ein Knoten benötigt, um einen Datensatz im verteilten Speicher abzulegen
Zeit, die ein Knoten benötigt, um einen Datensatz im verteilten Speicher wiederzufinden
Tabelle 5.2: Faktoren, die die Performance des Algorithmus’ bestimmen.
Faktor
rstore
rquery
Beschreibung
Anzahl der Routingschritte beim Ablegen von Daten im verteilten
Speicher
Anzahl der Routingschritte bei der Suche nach Daten im verteilten
Speicher
Tabelle 5.3: Faktoren, die die Performance des Algorithmus’ indirekt bestimmen.
3. Nachdem alle Datensätze im simulierten System abgelegt sind, fragt jeder Knoten
in wiederum der gleichen Reihenfolge sämtliche soeben abgelegten Datensätze aus
dem Speicher ab.
Dabei werden jeweils tjoin , tstore und tquery für jeden Knoten beziehungsweise Datensatz gemessen und ausgewertet. Außerdem werden die Anzahl der Routing-Schritte für
das Ablegen rstore und Wiederfinden rquery im verteilten Speicher sowie verschiedene
Informationen zu den Auslastungen der Netzwerkkomponenten aufgezeichnet.
Die spezifischen Unterschiede der einzelnen Simulationsreihen und der dabei durchzuführenden Messungen werden in den folgenden Abschnitten kurz detailliert.
Vergleich verschiedener Optionen
Die erste Simulationsreihe soll zeigen, welchen Einfluss die Verwaltung mehrerer Zonen
pro Knoten sowie die Verwendung einer L2N-Tabelle auf die Performance des verteilten assoziativen Speichers haben. Dazu wird zuerst auf beiden Netzwerktopologien ein
verteilter Speicher mit 45 Knoten ohne jegliche Optimierungen vermessen. Daraufhin
wird die Anzahl der verwalteten Zonen pro Knoten schrittweise erhöht, um festzustellen, ob ein Trend zu einer besseren oder schlechteren Performance feststellbar ist.
Anschließend werden die gleichen Messungen mit L2N-Tabellen durchgeführt.
56
Messungen
Implementation
Von Interesse sind hier insbesondere tstore und tquery sowie rstore und rquery , da diese durch die Optimierungen verbessert werden sollen. Während die Auswirkung der
Verwaltung mehrerer Zonen pro Knoten nicht ohne weiteres abzuschätzen ist, sollte
die Verwendung der L2N-Tabellen vor allem in der Netzwerktopologie T 2 enorme Verbesserungen in der Ausführungsgeschwindigkeit sowohl der Datenablage als auch der
Datenwiedergewinnung aus dem Speicher mit sich bringen.
Skalierungsfähigkeit des Speicherkonzeptes
Mit dieser Simulationsreihe soll untersucht werden, wie gut das Speicherkonzept skaliert, also ob seine Performance unabhängig von der Anzahl der teilnehmenden Knoten
ist. Dazu werden auf beiden Netzwerktopologien Messungen an einem verteilten Speicher mit schrittweise acht bis 45 teilnehmenden Knoten durchgeführt. Dabei werden die
beiden in der vorangegangenen Simulationsreihe vermessenen Optionen entsprechend
der besten Performance aktiviert oder deaktiviert.
Von besonderem Interesse ist hier vor allem tjoin , da insbesondere die Zeit für das
Beitreten in den verteilten Speicher unabhängig von der Anzahl der teilnehmenden
Knoten sein muss damit der Algorithmus auch auf großen Knotenzahlen skaliert. Weiterhin sollten tstore und tquery nicht proportional zur Knotenanzahl, sondern möglichst
√
mit einer Komplexität von O( K) oder noch besser O(log K) mit K als Anzahl der
Knoten wachsen.
57
Kapitel 6
Ergebnisse und Diskussion
In den folgenden Abschnitten werden die zuvor beschriebenen Simulationsreihen ausgewertet. Begonnen wird mit dem Vergleich der Optionen des Algorithmus’, da sich
daraus Auswirkungen auf die Konfiguration der zweiten Simulationsreihe ergeben. Anschließend folgt die Diskussion der Feststellung der Skalierungsfähigkeit des Speicherkonzeptes. Abschließend werden die aus diesem Prozess gewonnen Erkenntnisse diskutiert.
6.1
Vergleich verschiedener Optionen
Die Simulationsreihe macht Aussagen über das Performanceverhalten des verteilten
Speicherkonzeptes unter dem Einfluss von zwei Optimierungen. Wie sich diese Optimierungen auswirken und welche Einstellungen sinnvoll sind, wird anschließend diskutiert.
In den Text dieses Abschnittes sind der Übersichtlichkeit halber nur einige ausgewählte Diagramme eingegliedert. Die fehlenden Ergebnisdiagramme aller Simulationen dieser Simulationsreihe befinden sich im Anhang A.
6.1.1
Die Benutzung von L2N-Tabellen
Diese, im Abschnitt 4.2 (durch Broadcasts ermittelte Nachbartabellen) vorgestellte
Optimierung verbessert die Geschwindigkeit des Zugriffs auf den verteilten Speicher
auf beiden Netzwerktopologien. Tabelle 6.1 gibt Auskunft über die genauen Werte.
58
Vergleich verschiedener Optionen
Parameter Topologie
rquery
rstore
tquery
tstore
tjoin
Ergebnisse und Diskussion
ohne Opt. optimiert relative Verbesserung
T1
T2
T1
T2
T1
T2
T1
T2
T1
T2
3,19
3,19
3,19
3,19
12,8ms
97,2ms
11,7ms
146ms
6,82ms
268ms
1,82
2,08
1,82
2,08
11,9ms
65,8ms
10,8ms
115ms
6,89ms
268ms
47%
35%
47%
35%
7,0%
32%
7,7%
21%
0,0%
0,0%
Tabelle 6.1: Ermittelte Werte für die zu untersuchenden Parameter mit und ohne L2NTabellen bei einer Zone pro Knoten.
Auswirkung auf das Routing
Die durchschnittliche Anzahl von Routingschritten beim Ablegen von Datensätzen im
Speicher rstore sowie beim Wiederfinden dieser Datensätze rquery sinkt in beiden Netzwerktopologien um mehr als 30%.
Der Unterschied lässt sich mit der unterschiedlichen Anzahl an Subnetzen erklären.
In Topologie T 1 teilen vier Router die Knoten in vier Subnetze während in T 2 sechs
Router sechs Subnetze bilden. Die Auswirkung dieser Optimierung auf die Anzahl der
Routingschritte ist somit von der Topologie abhängig. In verteilten Speichern mit vielen
Knoten in unterschiedlichen Subnetzen wird die Auswirkung weniger stark sein.
Auswirkung auf das Speichern und Suchen von Datensätzen
Die Änderung in den Ausführungszeiten ist noch stärker von der Netzwerktopologie
abhängig. Eine Verbesserung wird aber auch hier deutlich. 7-8% Verbesserung in T 1
erscheinen sehr gering, relativieren sich aber bei Beachtung der durch den Zugriff auf
den Sekundärspeicher induzierten Latenz von 9ms in beiden Simulationen.
Bei Beachtung dieser Latenz, die bei jedem Zugriff auf Daten im verteilten Speicher
unabhängig von der Netzwerktopologie auftritt, ergeben sich relative Verbesserungswerte von 24% für tquery und 33% für tstore in T 1. In T 2 wirken sich diese 9ms kaum
aus, da dort die netzwerkinduzierte Latenz weit größeren Einfluss hat.
59
Vergleich verschiedener Optionen
Ergebnisse und Diskussion
Auswirkung auf die Beitrittszeit
Durch die Nutzung der L2N-Tabellen verändert sich die durchschnittliche Zeit, die
vergeht, bis ein Knoten im verteilten Speicher arbeiten kann, nur unwesentlich. Ursache
hierfür ist, dass der zur Initialisierung der zusätzlichen Nachbartabellen notwendige
Broadcast erst gesendet wird nachdem der Knoten dem CAN beigetreten ist.
Zur Überprüfung, ob sich die, durch die Optimierung verursachten Broadcasts in
einer höheren Belastung des Netzwerkes, auf dem der verteilten Speicher realisiert ist,
widerspiegeln, listet Tabelle 6.2 die durchschnittlichen Belastungen einer ausgewählten
zentralen Netzwerkkomponente pro Topologie auf.
Optimierung durchschnittliche Auslastung durchschnittliche Auslastung
während des CAN-Aufbaus
während der Simulation
deaktiviert
aktiviert
Veränderung
2.01% (0.077%)
5.43% (0.093%)
+170% (+121%)
2.61% (0.060%)
1.65% (0.050%)
-37% (-27%)
Tabelle 6.2: Auslastung des Switches S3 in T 1 (S8 in T 2) mit und ohne L2N-Tabellen
Anhand der Werte wird deutlich, dass bei der Belastung der Netzwerkkomponenten die Verbesserung der Routingschritte und die damit einhergehende Entlastung des
Netzwerkes bereits bei nur 100 Datensätzen pro Knoten deutlich überwiegt.
Diskussion
Die durch die Simulation getestete Optimierung des Algorithmus’ verbessert die Performance der verteilten Speichers in den getesteten Topologien besonders bei der Speicherung und dem Auffinden von Daten, da er das Routing im CAN signifikant beschleunigt.
Die L2N-Tabellen werden demzufolge bei der zweiten Simulationsreihe aktiviert.
Um Aussagen über das Verhalten der Optimierung im Allgemeinen treffen zu
können, ist eine Simulation auf zwei Netzwerktopologien keineswegs ausreichend. Auf
Grund der Wirkungsweise ist allerdings davon auszugehen, dass auch auf anderen,
größeren Netzwerktopologien mit ähnlicher Struktur eine vergleichbare Performanceverbesserung zu erwarten ist.
Nachteile der Optimierung sind eine minimale zusätzliche Belastung der Subnetze,
in denen sich die beteiligten Knoten des verteilten Speichers befinden, nachdem ein
neuer Knoten in den Speicher aufgenommen worden ist, sowie eine geringfügige Stei60
Vergleich verschiedener Optionen
Ergebnisse und Diskussion
gerung der Komplexität des Routingalgorithmus’ in jedem einzelnen Teilnehmer durch
die Verwaltung der L2N-Tabelle.
6.1.2
Die Verwaltung mehrerer Zonen pro Knoten
Wie aus den im Anhang A abgebildeten Diagrammen hervorgeht, führt die in 4.2
erklärte Optimierung, mehrere Zonen pro Knoten abzulegen, nicht zu einer wahrnehmbaren Verbesserung der Performance des verteilten Speichers.
Auswirkung auf das Routing
Mit der Erhöhung der Anzahl der pro Knoten verwalteten Zonen verändert sich die
durchschnittliche Anzahl der Routingschritte in beiden Netzwerktopologien nicht wesentlich.
Auswirkung auf das Speichern und Suchen von Datensätzen
Auch auf die durchschnittlichen Zeiten zum Speichern und Wiederfinden von Datensätzen hat eine Erhöhung der Anzahl der von einem Knoten verwalteten Zonen
keinen sichtbaren Einfluss.
Auswirkung auf die Beitrittszeit
Durch den deutlichen Mehraufwand an Kommunikation beim Einbringen eines neuen
Knotens in den verteilten assoziativen Speicher steigt die durchschnittliche Zeit für den
Beitritt eines Knotens mit der Anzahl der von ihm verwalteten Zonen proportional an.
Ein linearer Zusammenhang ist sowohl in der Netzwerktopologie T 1 (Abbildung 6.1)
als auch in T 2 (Abbildung A.5) deutlich erkennbar.
Diskussion
Der Zugriff auf mehrere gut verteilte Zonen als Ausgangspunkte überwiegt in den
beiden durchgeführten Simulationen nicht die Verlängerung des maximal möglichen
Routingpfades durch die einhergehende Vergrößerung des CAN und rechtfertigt damit
nicht den Mehraufwand beim Einbringen neuer Knoten in den verteilten Speicher. Für
die nachfolgenden Simulationen wird demzufolge mit einer Zone pro Knoten gearbeitet.
Um eine allgemeine Aussage über die Wirksamkeit der Optimierung zu machen, sind
die beiden simulierten Netzwerktopologien nicht ausreichend. Vor allem eine Erhöhung
61
Skalierungsfähigkeit des Algorithmus’
Ergebnisse und Diskussion
durchschnittliche tjoin [ms]
30
25
20
15
10
5
0
f (x) = ax + b mit a = 4.13 und b = 0.959
g(x) = ax + b mit a = 3.83 und b = 1.23
1
f (x)
2
3
4
Anzahl der Zonen pro Rechnerknoten
g(x)
mit L2NT
ohne L2NT
5
Abbildung 6.1: Durchschnittliche Zeit für die Teilnahme eines Knotens am verteilten
Speicher in Abhängigkeit von den Einstellungen des Algorithmus’ auf
Topologie T 1
der Anzahl simulierter Knoten ist für eine genauere Untersuchung dieser Optimierung
sinnvoll.
6.2
Skalierungsfähigkeit des Algorithmus’
Den Ergebnissen der zweiten Simulationsreihe lassen sich Aussagen zur Skalierungsfähigkeit des Algorithmus’, also dem Verhalten in Abhängigkeit von der Anzahl
der beteiligten Knoten, entnehmen.
Die nicht in diesem Abschnitt in Form von Diagrammen dargestellten Messdaten
der durchgeführten Simulationen finden sich wiederum im Anhang B.
6.2.1
Hinzufügen eines weiteren Knotens
Eine für die Skalierungsqualität wichtige Eigenschaft ist die Zeit tjoin . Sie muss weitestgehend unabhängig von der Anzahl der Knoten sein, die sich bereits im verteilten
Speicher befinden.
62
Skalierungsfähigkeit des Algorithmus’
Ergebnisse und Diskussion
Die Simulation mit dem implementierten Algorithmus auf der Netzwerktopologie
T 1 zeigt eine solche Unabhängigkeit. Sämtliche Messwerte gruppieren sich um eine
beinahe waagerechte Regressionsgerade. Auf Grund der geringen Anzahl an tatsächlich
fremden Nachbarn in einem zweidimensionalen CAN können die Zeiten für die ersten
vier Knoten tjoinK1 , tjoinK2 , tjoinK3 und tjoinK4 als Ausreißer betrachtet werden und sind
in der Regression in Abbildung 6.2 nicht beachtet.
10
tjoin [ms]
8
6
4
2
f (x) = ax + b mit a = 0.00723 und b = 5.03
0
0
5
10
f (x)
15
20
25
30
Anzahl der Rechnerknoten
35
40
45
tjoin
Abbildung 6.2: Zeit für die Teilnahme eines Knotens am verteilten Speicher in
Abhängigkeit von der Anzahl der bereits am Speicher teilnehmenden
Knoten auf Topologie T 1
Auch auf T 2 liegen die Werte für tjoin in einem festen Bereich ungefähr zwischen
100ms und 400ms. Allerdings ist durch die Verteilung von nur 45 Messwerten auf diesen
großen Bereich die Regressionsgerade sehr unzuverlässig und nicht wie in Abbildung
B.4 angedeutet mit einem Sinken von tjoin zu rechnen.
6.2.2
Durchschnittliche Routingkomplexität
Die durchschnittliche Routingkomplexität des verteilten Speicherkonzeptes gibt Auskunft darüber, wie sich rstore und rquery in Abhängigkeit von der Anzahl der im verteilten Speicher zusammenarbeitenden Knoten verändert.
63
Skalierungsfähigkeit des Algorithmus’
Ergebnisse und Diskussion
Die maximale Routingkomplexität errechnet sich aus der maximalen Pfad-Länge
und beträgt für CAN, wie in 3.2.3 angegeben, O(dN 1/d ). Die durchschnittliche Routingkomplexität liegt aufgrund der Gleichverteilung der Knoten über das CAN und der
eingebrachten Optimierungen deutlich geringer. Um sie abschätzen zu können, sind in
den Diagrammen 6.3 und B.3 für T 1 sowie B.5 und B.7 für T 2 verschiedene Regressionsfunktionen eingezeichnet.
1.9
durchschnittliche rstore
1.8
1.7
1.6
1.5
1.4
1.3
√
g(x) = a x + b mit a = 0.139 und b = 0.961
h(x) = a log(x) + b mit a = 0.33 und b = 0.611
1.2
1.1
5
10
g(x)
15
20
25
30
Anzahl der Rechnerknoten
h(x)
35
40
45
rstore
Abbildung 6.3: Durchschnittliche Routingschrittanzahl für das Ablegen eines Datensatzes im verteilten Speicher in Abhängigkeit von der Anzahl der am
Speicher teilnehmenden Knoten auf Topologie T 1
Dabei scheint in beiden Topologien der Verlauf von rstore und rquery noch konvexer
zu sein als die Regressionsfunktion a log(x) + b. Das würde eine bessere Routingkomplexität als O(log(x)) nahe legen. Dies sollte aber zuvor mit einer größeren Anzahl an
Messwerten geprüft werden.
6.2.3
Zeitverhalten beim Speichern und Suchen
Von Interesse für den Anwender ist vor allem das Zeitverhalten des Algorithmus’ und
damit die Abhängigkeit von tstore und tquery von der Anzahl der Knoten im verteilten
Speicher. Hier liefern die Diagramme B.1 und B.2 für T 1 sowie 6.4 und B.6 für T 2
Informationen.
64
Simulationsdauer
Ergebnisse und Diskussion
Bei den Messwerten auf T 1 zeigt sich wiederum eine starke Ähnlichkeit zwischen
tstore und tquery zu rstore und rquery . Ursache hierfür ist, dass alle Routingpfade ähnliche
Kosten verursachen, also der zeitliche Unterschied zwischen zwei möglichen Pfaden im
Routing sehr gering ist.
Auf T 2 kann der Unterschied zwischen zwei beliebigen Routingpfaden erheblich
sein. Darin liegt auch die Ursache, dass die Aussagekraft der Diagramme 6.4 und B.6
minimal ist. Hier lassen sich keine Aussagen über die Komplexität gewinnen.
durchschnittliche tstore [ms]
120
118
116
114
112
110
108
√
g(x) = a x + b mit a = 1.88 und b = 106
h(x) = a log(x) + b mit a = 4.79 und b = 99.9
106
104
5
10
g(x)
15
20
25
30
Anzahl der Rechnerknoten
h(x)
35
40
45
tstore
Abbildung 6.4: Durchschnittliche Zeit für das Ablegen eines Datensatzes im verteilten
Speicher in Abhängigkeit von der Anzahl der am Speicher teilnehmenden Knoten auf Topologie T 2
Um zu genaueren Erkenntnissen zu gelangen, ist wiederum eine größere Anzahl von
Messwerten notwendig.
6.3
Simulationsdauer
Die Dauer einer Simulation von Topologie T 2 mit 45 teilnehmenden Knoten, einer Zone
pro Knoten und aktivierten L2N-Tabellen stellt Tabelle 6.3 dar.
Die Testplattform basiert auf einem, mit 2.8 GHz getakteten Intel Pentium IV Prozessor mit aktiviertem Hyperthreading. Das Betriebssystem ist ein Gentoo Base System
65
Erkenntnisse aus den Simulationen
Ergebnisse und Diskussion
Grafische
Erfassung von
Simulationszeit Simulationszeit
Benutzeroberfläche Auslastungsdaten
Gentoo-Linux
Windows XP
aktiviert
deaktiviert
aktiviert
deaktiviert
aktiviert
aktiviert
deaktiviert
deaktiviert
155s
118s
112s
79s
119s
88s
90s
62s
Tabelle 6.3: Die Zeit für die gleiche Simulation in Abhängigkeit von verschiedenen Einstellungen und Betriebssystemen
Version 1.4.16.[22] auf einem 2.6.8er Linux Kern. Verwendet wurde die glibc Version
2.3.3.20040420[21] mit linuxthreads-patch, der die Threads auf Prozesse abbildet.
Als Alternative wurde ein Windows XP Home Edition der Firma Microsoft verwendet. In beiden Fällen kam als Java Virtual Machine (JVM) die Java HotSpot Client VM
(build 1.4.2 05-b04, mixed mode)[40] von Sun Microsystems zum Einsatz. Der JVM
wurde die Benutzung von 768MB Arbeitsspeicher als Heap gestattet.
Die Simulationszeit hängt stark davon ab, wie viele Informationen während der
Simulation aufgenommen werden und ob die grafische Benutzeroberfläche aktiviert ist.
Insbesondere die Erfassung der Auslastungsdaten der einzelnen Netzwerkkomponenten
hat einen großen Einfluss.
Eine wichtige Systemeigenschaft, die die Simulationszeit beeinflusst, ist die Umsetzung von Threads im verwendeten Betriebssystem. Die Realisierung als Prozesse ist
nicht die optimale Lösung. Auf einem Betriebssystem mit Unterstützung für native
Threads wie zum Beispiel Microsoft Windows XP sinkt die Simulationszeit deutlich.
6.4
Erkenntnisse aus den Simulationen
In den zuvor durchgeführten Simulationen hat sich gezeigt, dass zur Überprüfung des
Verhaltens verteilter Algorithmen und deren Optimierung Simulationen mit großen
Knotenzahlen notwendig sind, um eine große Anzahl an Messwerten zu generieren.
Insbesondere bei stark latenzbehafteten Netzwerktopologien sind aufgrund der weiten Streuung der Messergebnisse viele Messwerte notwendig, um Trends zu erkennen
oder Komplexitäten abzuschätzen.
66
Erkenntnisse aus den Simulationen
Ergebnisse und Diskussion
Außerdem hat sich gezeigt, dass bedingt durch die detaillierte Modellierung der
Netzwerktopologien, Simulationen mit großen Knotenzahlen enorm viel Rechenzeit und
Speicherplatz in Anspruch nehmen.
67
Kapitel 7
Zusammenfassung
Im Verlauf dieser Arbeit wurden die einem verteilten System zugrundeliegenden Strukturen untersucht, modelliert und ein Simulator entwickelt, der das Verhalten verteilter
Systeme auf Basis dieses Modells sehr genau nachbilden kann.
Weiterhin wurde ein verteiltes assoziatives Speicherkonzept, das auf dem DHTbasierenden CAN aufbaut und dieses um eigene Erweiterungen ergänzt, entwickelt
und auf diesem Simulator implementiert. Es ermöglicht den Aufbau eines verteilten
assoziativen Speichers, das Ablegen von Datensätzen und deren Verteilung auf die
einzelnen Knoten sowie das Suchen nach einzelnen Datensätzen. Außerdem ist die
Suche nach Datensätzen mit einer bitweisen Suchmaske möglich.
Für den Simulator wurde eine grafische Benutzerschnittstelle implementiert, die die
Verteilung der Daten auf die einzelnen Knoten und die Funktionsweise des implementierten Speicherkonzeptes veranschaulicht.
Durch verschiedene Simulationen wurde gezeigt, dass die Performance von CAN
durch gezielte Optimierungen enorm verbessert werden kann. Insbesondere die Erweiterung der Nachbartabellen im CAN-Routing um durch Broadcasts ermittelte Nachbarknoten kann die Gesamtperformance des Algorithmus deutlich verbessern. Die Verwaltung mehrere Zonen pro Knoten hingegen wirkt sich stark negativ auf die Beitrittszeit
der Knoten in den verteilten Speicher aus, während keine wahrnehmbare Verbesserung
der Routing-Zeiten auftritt.
Außerdem wurde gezeigt, dass die optimierte Version des CAN sehr gut skaliert.
Das Hinzufügen neuer Knoten in den assoziativen verteilten Speicher ist weitgehend
unabhängig von der Anzahl der bereits teilnehmenden Knoten. Die durchschnittliche
Routing-Komplexität des optimierten Algorithmus’ liegt dabei deutlich unter der für
ein nicht optimiertes CAN angegebenen maximalen Komplexität von O(n1/d ).
68
Zusammenfassung
Eine wichtige Erkenntnis aus den durchgeführten Simulationen ist, dass die detaillierte Simulation aller Eigenschaften der einem verteilten Speicher zugrundeliegenden
Netzwerktopologie enorm aufwändig ist und dadurch die Anzahl der simulierbaren
Knoten begrenzt.
69
Kapitel 8
Ausblick
Diese Arbeit stellt mit dem entwickelten Simulator ein Werkzeug zur exakten Nachbildung verteilter Systeme und deren Verhalten auf kleinen Netzwerktopologien mit bis
zu einigen hundert Knoten zur Verfügung. Simulatoren für die Nachbildung von verteilten Systemen mit einer großen Knotenzahl bis hin zu mehreren Millionen Knoten sind
verfügbar, aber nehmen aufgrund begrenzter Ressourcen betreffend Speicherverbrauch
und Rechenzeit keine Rücksicht auf die der Simulation zugrundeliegende Netzwerktopologie.
Wünschenswert wäre eine Kombination beider Prinzipien, also die Nachbildung
großer verteilter Systeme unter Beachtung der darunter liegenden Netzwerktopologie
durch die Einführung von Abstraktionsebenen. Da bei der Simulation vieler Knoten die
Nachbildung der Topologie in allen Einzelheiten zu aufwändig ist, ist die Entwicklung
weniger komplexer aber trotzdem möglichst exakter Modelle für das Verhalten von
verteilten Systemen notwendig. Hierfür kann der in dieser Arbeit entstandene Simulator
eine Grundlage bilden.
Der im Verlauf der Arbeit entwickelte Algorithmus kann weiter untersucht und mit
den aus den vorgenommenen und weiteren Untersuchungen gewonnenen Erkenntnissen
für verteilte Systeme implementiert werden und kann anschließend die Grundlage für
weitere Entwicklungen bilden.
Denkbar wäre zum Beispiel die Nutzung als Ressource für Grid-Systeme. Eine
Möglichkeit wäre die Nutzung als verteilter, dezentraler Namensdienst aber auch die
Implementation von Dateisystemen oder anderen Datenquellen ist auf Basis des entwickelten verteilten assoziativen Speicherkonzeptes möglich.
70
Abkürzungsverzeichnis
P2P Peer-to-Peer
HTTP Hypertext Transfer Protocol
I-WAY Information Wide Area Year
FAFNER Factoring via Network-Enabled Recursion
RSA Rivest, Shamir, Adelman
GRAM Globus Resource Allocation Manager
GridFTP Grid File Transfer Protocol
FTP File Transfer Protocol
MDS Monitoring and Discovery System
GSI Grid Security Infrastructure
GASS Global Access to Secondary Storage
GEM Globus Executable Management
GARA Globus Advanced Reservation and Allocation
OGSA Open Grid Service Architecture
WSDL Web Service Definition Language
GSH Grid Service Handle
DHT Distributed Hash Table
71
Ausblick
RPLG Random Power-Law Graphs
TTL Time to Live
RAM Random Access Memory
CAN Content-Addressable Network
LWL Lichtwellenleiter
L2N Layer 2 Nodes
JVM Java Virtual Machine
72
Literaturverzeichnis
[1] Aberer, K. und M. Hauswirth: An Overview on Peer-to-Peer Information
Systems. In: Litwin, W. und G. Lévy (Hrsg.): WDAS , Bd. 14 d. Reihe Proceedings in Informatics. Carleton Scientific, 2002.
[2] Banerjee, S.: myns Simulator .
myns/, Nov. 2004.
http://www.cs.umd.edu/˜suman/research/
[3] Banerjee, S., B. Bhattacharjee und C. Kommareddy: Scalable Application
Layer Multicast. In: ACM SIGCOMM ’02 , S. 205–220, August 2002.
[4] Banks, J., I. John S. Carson und B. L. Nelson: Discrete-Event System
Simulation. Prentice Hall, 2. Aufl., 1996.
[5] Bratley, P., B. L. Fox und L. E. Schrage: A Guide to Simulation. SpringerVerlag, 2. Aufl., 1987.
[6] Buyya, R. und A. Sulistio: GridSim. http://www.gridbus.org/gridsim/, Nov.
2004.
[7] www.CactusCode.org. http://www.cactuscode.org/, Nov. 2004.
[8] Casanova, H. und A. Legrand: SimGrid . http://gcl.ucsd.edu/simgrid/, Nov.
2004.
[9] Chien, A. A.: MicroGrid - Emulation Tools for Computational Grid Research (a part of the GrADS project). http://www-csag.ucsd.edu/projects/grid/
microgrid.html, Nov. 2004.
[10] Chu, Y. hua, S. G. Rao und H. Zhang: A Case for End System Multicast. In:
Measurement and Modeling of Computer Systems, S. 1–12, 2000.
73
LITERATURVERZEICHNIS
LITERATURVERZEICHNIS
[11] The DataGrid Project. http://eu-datagrid.web.cern.ch/eu-datagrid/, Nov. 2004.
[12] Distributed.Net. http://www.distributed.net/, Nov. 2004.
[13] FAFNER. http://www.npac.syr.edu/factoring.html, Nov. 2004.
[14] Forschungszentrum Jülich, Z.: UNICORE .
zam/RD/coop/unicore/unicore.html, Nov. 2004.
http://www.kfa-juelich.de/
[15] Foster, I.: The Grid: A New Infrastructure for the 21st Century Science. Physics
Today, 2002.
[16] Foster, I.: What is the Grid: A Three Point Checklist. Grid Today, July 2002.
[17] Foster, I., J. Geisler, W. Nickless, W. Smith und S. Tuecke: Software Infrastructure for the I-WAY High-Performance Distributed Computing Experiment.
S. 562–571. IEEE Computer Society Press, 1996.
[18] Foster, I. und C. Kesselman: Globus: A Metacomputing Infrastructure Toolkit.
The International Journal of Supercomputer Applications and High Performance
Computing, 11(2):115–128, Summer 1997.
[19] Foster, I., C. Kesselman, J. Nick und S. Tuecke: The Physiology of the
Grid: An Open Grid Services Architecture for Distributed Systems Integration.
http://www.globus.org/research/papers/ogsa.pdf, 2002.
[20] Foster, I., C. Kesselman und S. Tuecke: The Anatomy of the Grid: Enabling
Scalable Virtual Organizations. Lecture Notes in Computer Science, 2150, 2001.
[21] Free Software Foundation: GNU C Library. http://www.gnu.org/software/
libc/libc.html, Nov. 2004.
[22] Gentoo Foundation: gentoo linux . http://www.gentoo.org/, Nov. 2004.
[23] Gil, T. M., F. Kaashoek, J. Li, R. Morris und J. Stribling: p2psim - a
simulator for peer-to-peer protocols. http://www.pdos.lcs.mit.edu/p2psim/, Nov.
2004.
[24] The Gnutella Protocol Specification v0.4 . http://www.stanford.edu/class/cs244b/
gnutella protocol 0.4.pdf, Nov. 2004.
74
LITERATURVERZEICHNIS
LITERATURVERZEICHNIS
[25] Grimshaw, A. S., W. A. Wulf, J. C. French, A. C. Weaver und P. F.
Reynolds Jr.: Legion: The Next Logical Step Toward a Nationwide Virtual Computer . Techn. Ber. CS-94-21, University of Virginia, August 1994.
[26] Howell, F. und R. McNab: simjava.
hase/simjava/, Nov. 2004.
http://www.dcs.ed.ac.uk/home/
[27] Jelasity, M., A. Montresor und G. P. Jesi: Peersim Peer-to-Peer Simulator .
http://peersim.sourceforge.net/, Nov. 2004.
[28] Kohonen, T.: Content-Addressable Memories. Springer, 1987.
[29] Malkhi, D., M. Naor und D. Ratajczak: Viceroy: A scalable and dynamic
emulation of the butterfly, 2002.
[30] Naor, M. und U. Wieder: Novel Architectures for P2P Applications: the
Continuous-Discrete Approach. http://www.wisdom.weizmann.ac.il/˜uwieder,
2002.
[31] Napster . http://www.napster.com/, Nov. 2004.
[32] Overeinder, B. J.: Distributed Event-driven Simulation - Scheduling Strategies
and Resource Management. Dissertation, ASCI, 2000.
[33] Overnet - the german edonkey resource. http://www.overnet2000.de/, Nov. 2004.
[34] Ratnasamy, S., P. Francis, M. Handley, R. Karp und S. Schenker: A
scalable content-addressable network . In: Proceedings of the 2001 conference on
applications, technologies, architectures, and protocols for computer communications, S. 161–172. ACM Press, 2001.
[35] Richter, H.: Verbindungsnetzwerke für parallele und verteilte Systeme. Spektrum akademischer Verlag, 1997.
[36] Roure, D. D., M. A. Baker, N. R. Jennings und N. R. Shadbolt: Grid
Computing: Making The Global Infrastructure a Reality by Fran Berman, Anthony
J.G. Hey and Geoffrey Fox , Kap. The Evolution of the Grid, S. 65–100. John Wiley
& Sons, April 2003.
75
LITERATURVERZEICHNIS
LITERATURVERZEICHNIS
[37] Rowstron, A. und P. Druschel: Pastry: Scalable, Decentralized Object Location, and Routing for Large-Scale Peer-to-Peer Systems. Lecture Notes in Computer
Science, 2218:329–350, 2001.
[38] SETI@home. http://setiathome.ssl.berkeley.edu/, Nov. 2004.
[39] Stoica, I., R. Morris, D. Karger, M. F. Kaashoek und H. Balakrishnan: Chord: A scalable peer-to-peer lookup service for internet applications. In:
Proceedings of the 2001 conference on applications, technologies, architectures, and
protocols for computer communications, S. 149–160. ACM Press, 2001.
[40] Sun Microsystems: Java Technology. http://java.sun.com/, Nov. 2004.
[41] Tavangarian, D.: Flagorientierte Assoziativspeicher und -prozessoren. Springer,
1990.
[42] Tavangarian, D., U. Lucke und T. Lucke: Hypercomputing: Ein verteiltes
System zur Vearbeitung von DV-Problemen in Weitverkehrsnetzen. Techn. Ber.,
Universität Rostock, 2001.
[43] the globus alliance: Globus Toolkit. http://www-unix.globus.org/toolkit/,
Nov. 2004.
[44] Zeigler, B. P., H. Praehofer und T. G. Kim: Theory of Modeling and Simulation - Integrating Discrete Event and Continuous Complex Dynamic Systems.
Academic press, 2. Aufl., 2000.
[45] Zhao, B. Y., J. D. Kubiatowicz und A. D. Joseph: Tapestry: An Infrastructure for Fault-tolerant Wide-area Location and Routing. Techn. Ber. UCB/CSD01-1141, UC Berkeley, apr 2001.
76
Abbildungsverzeichnis
2.1
2.4
2.5
2.6
Darstellung der Systemschichten, auf denen das P2P-Konzept angewandt werden kann [1] . . . . . . . . . . . . . . . . . . . . . . . . . . .
Gegenüberstellung der Zusammenarbeit zwischen informationsverarbeitenden Systemen beim Client-Server-computing und beim P2P-computing
Ausschnitt aus der Schichtenarchitektur des Globus-Toolkit in den Versionen 2.x . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Das von Foster in [15] vorgestellte “hourglass model” . . . . . . . . . .
Aufbau eines einfachen wortorientierten inhaltsadressierten Speichers .
Methodik des Studiums eines Systems [32] . . . . . . . . . . . . . . . .
11
14
17
19
3.1
3.2
3.3
3.4
3.5
CAN-Gitter mit Datensatz . . . . . . . . . . . . . . . . . . . . . . . . .
Zonen eines Knotens in einem CAN mit drei Realitäten. . . . . . . . .
Caching durch Replikation im Nachbarknoten . . . . . . . . . . . . . .
Chord-Wertebereich mit Knoten und Fingerknoten . . . . . . . . . . .
Wertebereichsaufteilung und Routing im Distance-Halving-Algorithmus
29
31
31
33
35
5.1
5.2
Schematische Abbildung des Netzwerksimulators . . . . . . . . . . . . .
Grafische Repräsentation einer Simulation eines verteilten Speichers aus
84 Rechnerknoten mit jeweils drei CAN-Zonen pro Knoten . . . . . . .
Schematische Darstellung der Netzwerktopologie T1 . . . . . . . . . . .
Schematische Darstellung der Netzwerktopologie T2 . . . . . . . . . . .
48
2.2
2.3
5.3
5.4
6.1
Durchschnittliche Zeit für die Teilnahme eines Knotens am verteilten
Speicher in Abhängigkeit von den Einstellungen des Algorithmus’ auf
Topologie T 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
6
52
53
55
62
77
ABBILDUNGSVERZEICHNIS
6.2
6.3
6.4
ABBILDUNGSVERZEICHNIS
Zeit für die Teilnahme eines Knotens am verteilten Speicher in
Abhängigkeit von der Anzahl der bereits am Speicher teilnehmenden
Knoten auf Topologie T 1 . . . . . . . . . . . . . . . . . . . . . . . . . .
Durchschnittliche Routingschrittanzahl für das Ablegen eines Datensatzes im verteilten Speicher in Abhängigkeit von der Anzahl der am Speicher teilnehmenden Knoten auf Topologie T 1 . . . . . . . . . . . . . . .
Durchschnittliche Zeit für das Ablegen eines Datensatzes im verteilten
Speicher in Abhängigkeit von der Anzahl der am Speicher teilnehmenden
Knoten auf Topologie T 2 . . . . . . . . . . . . . . . . . . . . . . . . . .
A.1 Durchschnittliche Zeit für das Ablegen eines Datensatzes im verteilten
Speicher in Abhängigkeit von den Einstellungen des Algorithmus’ auf
Topologie T 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.2 Durchschnittliche Routingschrittanzahl für das Ablegen eines Datensatzes im verteilten Speicher in Abhängigkeit von den Einstellungen des
Algorithmus’ auf Topologie T 1 . . . . . . . . . . . . . . . . . . . . . . .
A.3 Durchschnittliche Zeit für das Abfragen eines Datensatzes aus dem verteilten Speicher in Abhängigkeit von den Einstellungen des Algorithmus’
auf Topologie T 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.4 Durchschnittliche Routingschrittanzahl für das Abfragen eines Datensatzes aus dem verteilten Speicher in Abhängigkeit von den Einstellungen des Algorithmus’ auf Topologie T 1 . . . . . . . . . . . . . . . . . .
A.5 Durchschnittliche Zeit für die Teilnahme eines Knotens am verteilten
Speicher in Abhängigkeit von den Einstellungen des Algorithmus’ auf
Topologie T 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.6 Durchschnittliche Zeit für das Ablegen eines Datensatzes im verteilten
Speicher in Abhängigkeit von den Einstellungen des Algorithmus’ auf
Topologie T 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.7 Durchschnittliche Routingschrittanzahl für das Ablegen eines Datensatzes im verteilten Speicher in Abhängigkeit von den Einstellungen des
Algorithmus’ auf Topologie T 2 . . . . . . . . . . . . . . . . . . . . . . .
A.8 Durchschnittliche Zeit für das Abfragen eines Datensatzes aus dem verteilten Speicher in Abhängigkeit von den Einstellungen des Algorithmus’
auf Topologie T 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
63
64
65
81
81
82
82
83
83
84
84
78
ABBILDUNGSVERZEICHNIS
ABBILDUNGSVERZEICHNIS
A.9 Durchschnittliche Routingschrittanzahl für das Abfragen eines Datensatzes aus dem Speicher in Abhängigkeit von den Einstellungen des Algorithmus’ auf Topologie T 2 . . . . . . . . . . . . . . . . . . . . . . . .
B.1 Durchschnittliche Zeit für das Ablegen eines Datensatzes im verteilten
Speicher in Abhängigkeit von der Anzahl der am Speicher teilnehmenden
Knoten auf Topologie T 1 . . . . . . . . . . . . . . . . . . . . . . . . . .
B.2 Durchschnittliche Zeit für das Abfragen eines Datensatzes aus dem verteilten Speicher in Abhängigkeit von der Anzahl der am Speicher teilnehmenden Knoten auf Topologie T 1 . . . . . . . . . . . . . . . . . . .
B.3 Durchschnittliche Routingschrittanzahl für das Abfragen eines Datensatzes aus dem verteilten Speicher in Abhängigkeit von der Anzahl der
am Speicher teilnehmenden Knoten auf Topologie T 1 . . . . . . . . . .
B.4 Zeit für die Teilnahme eines Datensatzes am verteilten Speicher in
Abhängigkeit von der Anzahl der bereits am Speicher teilnehmenden
Knoten auf Topologie T 2 . . . . . . . . . . . . . . . . . . . . . . . . . .
B.5 Durchschnittliche Routingschrittanzahl für das Ablegen eines Datensatzes im verteilten Speicher in Abhängigkeit von der Anzahl der am Speicher teilnehmenden Knoten auf Topologie T 2 . . . . . . . . . . . . . . .
B.6 Durchschnittliche Zeit für das Abfragen eines Datensatzes aus dem verteilten Speicher in Abhängigkeit von der Anzahl der am Speicher teilnehmenden Knoten auf Topologie T 2 . . . . . . . . . . . . . . . . . . .
B.7 Durchschnittliche Routingschrittanzahl für das Abfragen eines Datensatzes aus dem verteilten Speicher in Abhängigkeit von der Anzahl der
am Speicher teilnehmenden Knoten auf Topologie T 2 . . . . . . . . . .
85
87
87
88
88
89
89
90
79
Anhang A
Messergebnisse Simulationsreihe 1
Die folgenden Diagramme bestehen aus jeweils zwei Messreihen mit eingezeichneter
linearer Regression. Dabei sind auf der X-Achse die Algorithmeneinstellung für die
Anzahl der Zonen pro Knoten und davon abhängig auf der Y-Achse die ermittelten
Größen eingezeichnet. Eine Punktmenge steht dabei jeweils für die Simulationen mit
und ohne L2N-Tabellen (L2NT).
A.1
Simulationsreihe 1 auf Topologie T1
Die Diagramme 6.1, A.1, A.2, A.3 und A.4 beziehen sich auf die Simulationen auf der
Netzwerktopologie T 1.
A.2
Simulationsreihe 1 auf Topologie T2
Die Diagramme A.5, A.6, A.7, A.8 und A.9 beziehen sich auf die Simulationen auf der
Netzwerktopologie T 2.
80
Simulationsreihe 1 auf Topologie T2
Messergebnisse Simulationsreihe 1
durchschnittliche tstore [ms]
12
11.5
11
10.5
10
9.5
9
f (x) = ax + b mit a = 0.00321 und b = 10.9
g(x) = ax + b mit a = −0.0219 und b = 11.5
1
f (x)
2
3
4
Anzahl der Zonen pro Rechnerknoten
g(x)
mit L2NT
ohne L2NT
5
Abbildung A.1: Durchschnittliche Zeit für das Ablegen eines Datensatzes im verteilten
Speicher in Abhängigkeit von den Einstellungen des Algorithmus’ auf
Topologie T 1
durchschnittliche rstore [ms]
3.5
3
2.5
2
1.5
1
f (x) = ax + b mit a = 0.00422 und b = 1.81
g(x) = ax + b mit a = −0.0536 und b = 3.21
1
f (x)
2
3
4
Anzahl der Zonen pro Rechnerknoten
g(x)
mit L2NT
ohne L2NT
5
Abbildung A.2: Durchschnittliche Routingschrittanzahl für das Ablegen eines Datensatzes im verteilten Speicher in Abhängigkeit von den Einstellungen
des Algorithmus’ auf Topologie T 1
81
Simulationsreihe 1 auf Topologie T2
Messergebnisse Simulationsreihe 1
durchschnittliche tquery [ms]
12
11.5
11
10.5
10
9.5
9
f (x) = ax + b mit a = 0.00224 und b = 10.1
g(x) = ax + b mit a = −0.0225 und b = 10.7
1
f (x)
2
3
4
Anzahl der Zonen pro Rechnerknoten
g(x)
mit L2NT
ohne L2NT
5
Abbildung A.3: Durchschnittliche Zeit für das Abfragen eines Datensatzes aus dem
verteilten Speicher in Abhängigkeit von den Einstellungen des Algorithmus’ auf Topologie T 1
durchschnittliche rquery [ms]
3.5
3
2.5
2
1.5
1
f (x) = ax + b mit a = 0.00422 und b = 1.81
g(x) = ax + b mit a = −0.0536 und b = 3.21
1
f (x)
2
3
4
Anzahl der Zonen pro Rechnerknoten
g(x)
mit L2NT
ohne L2NT
5
Abbildung A.4: Durchschnittliche Routingschrittanzahl für das Abfragen eines Datensatzes aus dem verteilten Speicher in Abhängigkeit von den Einstellungen des Algorithmus’ auf Topologie T 1
82
Simulationsreihe 1 auf Topologie T2
Messergebnisse Simulationsreihe 1
durchschnittliche tjoin [ms]
1000
800
600
400
200
0
f (x) = ax + b mit a = 149 und b = 147
g(x) = ax + b mit a = 149 und b = 147
1
f (x)
2
3
4
Anzahl der Zonen pro Rechnerknoten
g(x)
mit L2NT
ohne L2NT
5
Abbildung A.5: Durchschnittliche Zeit für die Teilnahme eines Knotens am verteilten
Speicher in Abhängigkeit von den Einstellungen des Algorithmus’ auf
Topologie T 2
durchschnittliche tstore [ms]
180
170
160
150
140
130
120
f (x) = ax + b mit a = 1.46 und b = 115
g(x) = ax + b mit a = 1.72 und b = 152
110
100
1
f (x)
2
3
4
Anzahl der Zonen pro Rechnerknoten
g(x)
mit L2NT
ohne L2NT
5
Abbildung A.6: Durchschnittliche Zeit für das Ablegen eines Datensatzes im verteilten
Speicher in Abhängigkeit von den Einstellungen des Algorithmus’ auf
Topologie T 2
83
Simulationsreihe 1 auf Topologie T2
Messergebnisse Simulationsreihe 1
durchschnittliche rstore [ms]
3.5
3
2.5
2
1.5
1
f (x) = ax + b mit a = −0.00551 und b = 2.06
g(x) = ax + b mit a = −0.0536 und b = 3.21
1
f (x)
2
3
4
Anzahl der Zonen pro Rechnerknoten
g(x)
mit L2NT
ohne L2NT
5
Abbildung A.7: Durchschnittliche Routingschrittanzahl für das Ablegen eines Datensatzes im verteilten Speicher in Abhängigkeit von den Einstellungen
des Algorithmus’ auf Topologie T 2
durchschnittliche tquery [ms]
120
110
100
90
80
70
f (x) = ax + b mit a = 0.999 und b = 66.6
g(x) = ax + b mit a = 1.27 und b = 103
60
50
1
f (x)
2
3
4
Anzahl der Zonen pro Rechnerknoten
g(x)
mit L2NT
ohne L2NT
5
Abbildung A.8: Durchschnittliche Zeit für das Abfragen eines Datensatzes aus dem
verteilten Speicher in Abhängigkeit von den Einstellungen des Algorithmus’ auf Topologie T 2
84
Simulationsreihe 1 auf Topologie T2
Messergebnisse Simulationsreihe 1
durchschnittliche rquery [ms]
3.5
3
2.5
2
1.5
1
f (x) = ax + b mit a = −0.00551 und b = 2.06
g(x) = ax + b mit a = −0.0536 und b = 3.21
1
f (x)
2
3
4
Anzahl der Zonen pro Rechnerknoten
g(x)
mit L2NT
ohne L2NT
5
Abbildung A.9: Durchschnittliche Routingschrittanzahl für das Abfragen eines Datensatzes aus dem Speicher in Abhängigkeit von den Einstellungen des
Algorithmus’ auf Topologie T 2
85
Anhang B
Messergebnisse Simulationsreihe 2
Die folgenden Diagramme bestehen aus jeweils einer Messreihe. Dabei sind auf der
X-Achse die Algorithmeneinstellung für die Anzahl der am simulierten Speicher teilnehmenden Knoten und davon abhängig auf der Y-Achse die ermittelten Größen dargestellt. Die eingezeichneten Linien sind Versuche verschiedener Regressionen. Welche
Funktion zur Anpassung auf die Punktmenge im Einzelfall verwendet wurde, ist im
Diagramm selbst angegeben.
In den Abbildungen 6.2 und B.4 beginnt die lineare Regression erst mit dem fünften
Wert, also dem Wert bei x = 4, da es sich bei den ersten vier Werten bedingt durch
die Funktionsweise des Algorithmus’ um Ausreißer handelt.
B.1
Simulationsreihe 2 auf Topologie T1
Die Diagramme 6.2, B.1, 6.3, B.2 und B.3 beziehen sich auf die Simulation auf der
Netzwerktopologie T 1.
B.2
Simulationsreihe 2 auf Topologie T2
Die Diagramme B.4, 6.4, B.5, B.6 und B.7 beziehen sich auf die Simulation auf der
Netzwerktopologie T 2.
86
Simulationsreihe 2 auf Topologie T2
Messergebnisse Simulationsreihe 2
durchschnittliche tstore [ms]
11.05
11
10.95
10.9
10.85
10.8
10.75
√
g(x) = a x + b mit a = 0.0636 und b = 10.6
h(x) = a log(x) + b mit a = 0.154 und b = 10.4
10.7
10.65
5
10
15
g(x)
20
25
30
Anzahl der Rechnerknoten
h(x)
35
40
45
tstore
Abbildung B.1: Durchschnittliche Zeit für das Ablegen eines Datensatzes im verteilten
Speicher in Abhängigkeit von der Anzahl der am Speicher teilnehmenden Knoten auf Topologie T 1
durchschnittliche tquery [ms]
10.15
10.1
10.05
10
9.95
√
g(x) = a x + b mit a = 0.043 und b = 9.83
h(x) = a log(x) + b mit a = 0.104 und b = 9.72
9.9
9.85
5
10
g(x)
15
20
25
30
Anzahl der Rechnerknoten
h(x)
35
40
45
tquery
Abbildung B.2: Durchschnittliche Zeit für das Abfragen eines Datensatzes aus dem
verteilten Speicher in Abhängigkeit von der Anzahl der am Speicher
teilnehmenden Knoten auf Topologie T 1
87
Simulationsreihe 2 auf Topologie T2
Messergebnisse Simulationsreihe 2
1.9
durchschnittliche rquery
1.8
1.7
1.6
1.5
1.4
1.3
√
g(x) = a x + b mit a = 0.139 und b = 0.961
h(x) = a log(x) + b mit a = 0.33 und b = 0.611
1.2
1.1
5
10
15
g(x)
20
25
30
Anzahl der Rechnerknoten
h(x)
35
40
45
rquery
Abbildung B.3: Durchschnittliche Routingschrittanzahl für das Abfragen eines Datensatzes aus dem verteilten Speicher in Abhängigkeit von der Anzahl der
am Speicher teilnehmenden Knoten auf Topologie T 1
600
f (x) = ax + b mit a = −1.66 und b = 308
500
tjoin [ms]
400
300
200
100
0
0
5
10
f (x)
15
20
25
30
Anzahl der Rechnerknoten
35
40
45
tjoin
Abbildung B.4: Zeit für die Teilnahme eines Datensatzes am verteilten Speicher in
Abhängigkeit von der Anzahl der bereits am Speicher teilnehmenden
Knoten auf Topologie T 2
88
Simulationsreihe 2 auf Topologie T2
Messergebnisse Simulationsreihe 2
durchschnittliche rstore
2.2
2
1.8
1.6
1.4
√
g(x) = a x + b mit a = 0.193 und b = 0.862
h(x) = a log(x) + b mit a = 0.452 und b = 0.394
1.2
1
5
10
15
g(x)
20
25
30
Anzahl der Rechnerknoten
h(x)
35
40
45
rstore
Abbildung B.5: Durchschnittliche Routingschrittanzahl für das Ablegen eines Datensatzes im verteilten Speicher in Abhängigkeit von der Anzahl der am
Speicher teilnehmenden Knoten auf Topologie T 2
durchschnittliche tquery [ms]
72
70
68
66
64
62
60
√
g(x) = a x + b mit a = 1.53 und b = 58.6
h(x) = a log(x) + b mit a = 4.07 und b = 53.4
58
56
5
10
g(x)
15
20
25
30
Anzahl der Rechnerknoten
h(x)
35
40
45
tquery
Abbildung B.6: Durchschnittliche Zeit für das Abfragen eines Datensatzes aus dem
verteilten Speicher in Abhängigkeit von der Anzahl der am Speicher
teilnehmenden Knoten auf Topologie T 2
89
Simulationsreihe 2 auf Topologie T2
Messergebnisse Simulationsreihe 2
durchschnittliche rquery
2.2
2
1.8
1.6
1.4
√
g(x) = a x + b mit a = 0.193 und b = 0.862
h(x) = a log(x) + b mit a = 0.452 und b = 0.394
1.2
1
5
10
g(x)
15
20
25
30
Anzahl der Rechnerknoten
h(x)
35
40
45
rquery
Abbildung B.7: Durchschnittliche Routingschrittanzahl für das Abfragen eines Datensatzes aus dem verteilten Speicher in Abhängigkeit von der Anzahl der
am Speicher teilnehmenden Knoten auf Topologie T 2
90
Anhang C
Thesen
1. Durch seine übersichtlichen und einfachen Strukturen und das vorhandene Verbesserungspotential bildet ein optimiertes CAN eine geeignete Grundlage für weitere Entwicklungen auf dem Gebiet der verteilten Speicherung von Daten.
2. Eine geringe Anzahl an Routing-Schritten ist, besonders auf Netzwerktopologien
mit wenigen stark latenzbehafteten Verbindungen, kein Garant für kurze Anfragezeiten. Hier ist außerdem die Lokalität des Algorithmus’ von Bedeutung.
3. Die Erweiterung der Nachbartabellen im CAN-Routing um durch Broadcasts
ermittelte Nachbarknoten kann die Gesamtperformance des Algorithmus deutlich
verbessern.
4. Die Verwaltung mehrerer Zonen pro Knoten wirkt sich stark negativ auf die Beitrittszeit der Knoten in den verteilten Speicher aus, während keine wahrnehmbare
Verbesserung der Routing-Zeiten auftritt.
5. Das Hinzufügen neuer Knoten in den assoziativen verteilten Speicher ist im vorgestellten optimierten Speicherkonzept weitgehend unabhängig von der Anzahl
der bereits teilnehmenden Knoten.
6. Die durchschnittliche Routing-Komplexität des optimierten Algorithmus’ liegt
deutlich unter der für CAN angegebenen maximalen Komplexität von O(n1/d ).
7. Die Performance von CAN als dem Algorithmus mit einer relativ hohen Routingkomplexität in seiner einfachsten Form kann durch gezielte Optimierungen
enorm verbessert werden.
91
Thesen
8. Zur Gewinnung verwertbarer Erkenntnisse über das Verhalten eines Algorithmus’
auf stark latenzbehafteten Netzwerktopologien sind Simulationen mit vielen teilnehmenden Knoten notwendig.
9. Die detaillierte Simulation aller Eigenschaften der einem verteilten Speicher zugrundeliegenden Netzwerktopologie ist enorm aufwändig und begrenzt dadurch
die Anzahl der simulierbaren Knoten.
92
Thesen
Konformitätserklärung
Ich erkläre, dass ich die vorliegende Arbeit selbstständig und nur unter Vorlage der
angegebenen Literatur und Hilfsmittel angefertigt habe.
Rostock, den . . . . . . . . . . . . . . . . . .
.....................
Henry Ristau
93
Herunterladen