Entwicklung von Peer-to-Peer-Anwendungen mit Hilfe der JXTA-Technologie Hauptseminar Wintersemester...
-
Upload
bernd-legner -
Category
Documents
-
view
103 -
download
0
Transcript of Entwicklung von Peer-to-Peer-Anwendungen mit Hilfe der JXTA-Technologie Hauptseminar Wintersemester...
Entwicklung von Peer-to-Peer-Entwicklung von Peer-to-Peer-Anwendungen mit Hilfe der JXTA-Anwendungen mit Hilfe der JXTA-
TechnologieTechnologie
HauptseminarWintersemester 2002/2003
Bearbeiter:Dirk Michael
Betreuer:Dr. Ing. Jürgen Nützel
Gliederung
Seite 1
Übersicht über Peer-to-Peer-Netzwerke
Einführung in die JXTA-Technologie
Erklärung der wichtigsten Konzepte
Zusammenfassung und Ausblick
Übersicht: Peer-to-Peer-Netzwerke
Seite 2
dezentral organisiertes Netzwerk direkter Austausch von Ressourcen zwischen den einzelnen Systemen gleichzeitig Client als auch Server
im Gegensatz dazu: zentral organisiertes NetzwerkClient/Server-Architektur
Anwendungsgebiete für P2P-Netzwerke• File Sharing• Distributed Computing• Instant Messaging
Übersicht: Peer-to-Peer-Netzwerke
Seite 3
echtes P2P
A
B D
C
Beispiel: Gnutella Beispiel: SETI
A B
C D
Server
assistiertes P2P
Ausprägungen von P2P-Netzwerken
Einführung in die JXTA-Technologie
Seite 4
Was ist JXTA ?• gedacht für die einfache Entwicklung von komplexen P2P-Anwendungen• kein Design der grundlegenden Kommunikationsmechanismen nötig• Sammlung an Protokollen für Kommunikation • Implementationen für verschiedene Sprachen (JXTA J2SE Platform)• abgeleitet vom Wort „juxtapose“, bedeutet „nebeneinander stellen“
Woher kommt JXTA ?• ursprünglich Forschungsprojekt von SUN Microsystems• nun in der Hand einer öffentlichen Entwicklergemeinde
Lizenzierung• „SUN Project JXTA Software License“• abgeleitet von „Apache Software License Version 1.1“
Vorteile von JXTA• Unabhängig von einer Programmiersprache• Unabhängig von Hardware und Betriebssystem• Interoperabilität
Einführung in die JXTA-Technologie
Seite 5
Übersicht über die JXTA-Protokolle
Transport (TCP, HTTP)Transport-protokolle
Peer Endpoint Protocol
Peer Resolver Protocolnotwendig
• Weiterleiten von Botschaften
• Empfang und Versand
Peer Discovery Protocol
Pipe Binding Protocol
Rendezvous Protocol
Peer Information Protocoloptional
• Auffinden von Ressourcen
• Aufbau eines virtuellen Kanals
• Verteilung von Nachrichten
• Abfrage von Statusinformationen
Voraussetzungen für JXTA J2SE Platform
Seite 6
JXTA J2SE Platform: Referenzimplementierung in JAVA
Voraussetzungen• JDK 1.3.1 oder höher• Bibliotheken der JXTA J2SE Platform Implementierung• LOG4J der Apache Software Foundation
http://www.jxta.orghttp://www.apache.org
Begrifflichkeiten
Seite 7
Peergruppen• Zusammenschluss mehrerer Peers zu einer Gruppe• hierarchischer Aufbau, oberste Ebene Net Peer Group• Gründe: gemeinsame Interessen, sichere Umgebung
Relay Peer• dient zum Weiterleiten von Nachrichten zum Zielpeer• notwendig für Überwindung von Firewalls oder NAT-Umgebungen
Rendezvous Peer• dient zum Verteilen von Nachrichten an alle bekannten Peers• Reichweite nur innerhalb der Peergruppe
Advertisements• Metadatenstruktur zur Beschreibung von Ressourcen• XML-Dokumente
Pipes• virtueller Kommunikationskanal zwischen zwei oder mehreren Peers• Point-to-Point-Pipe, Propagated-Pipe• unidirektional, asynchron
Aufbau eines JXTA-Netzwerks
Seite 8
Net Peer Group
Sample Group R1
R2 A
B
Gruppeveröffentlichen
Suchanfrage
Antwort
Pipe-Adv.veröffentlichen
Suchanfragenach Pipe-Adv.
Antwort
Kommunikations-kanal
Anlegen der Gruppe „Sample
Group“
R1
A
Versenden von Botschaften
Seite 9
• Austausch von Botschaften ist Basis für Kommunikation• Peer Endpoint Protocol, Peer Resolver Protocol• Routing von Botschaften zum Zielpeer• Überwindung von Firewalls (über HTTP-Port)
Peer A will Botschaft nach Peer E senden
InternetInternet
Rl1 Rl2
Rl3A B C
D E F
Relay Peer
Seite 10
InternetInternet
R1 R2
R3A B C
D E F
Rendezvous Peer
Verteilung von Botschaften
Versenden von Suchanfragen, Veröffentlichen von Ressourcen• Discovery Protocol, Rendezvous Protocol• Rendezvous Peers dienen als Verteilerstationen• nur innerhalb einer Gruppe
Erzeugen eines Peers
Seite 11
public void startPeer() throws PeerGroupException{ PeerGroup netPeerGroup = null; netPeerGroup = PeerGroupFactory.newInstance();}
Erster Start des Peers Konfiguration:
• Name des Peers, IP-Adresse und Port, Nutzername und Kennwort• bekannte Rendezvous- und Relay Peers
Anlegen eines lokalen Caches für Speicherung der Advertisements
Bei jedem weiteren Start erfolgt Anmeldung• entweder manuell über Eingabe der Daten in ein Loginfenster• automatisches Login durch Code im Quelltext
System.setProperty("net.jxta.tls.principal", username);System.setProperty("net.jxta.tls.password", password);
Suchen von Ressourcen
Seite 12
Beispiel: Suchen der Gruppe „Sample Group“
public PeerGroupAdvertisement findGroup() throws IOException{ DiscoveryService ds = netPeerGroup.getDiscoveryService(); for (int i = 0; i < 5; i++) { Enumeration enum = ds.getLocalAdvertisements( DiscoveryService.GROUP, "Name", "Sample Group"); if ((enum != null) && (enum.hasMoreElements())) return (PeerGroupAdvertisement)enum.nextElement();
ds.getRemoteAdvertisements(null, DiscoveryService.GROUP, "Name", "Sample Group", 1, null); }}
Aufbau eines Kommunikationskanals
Seite 13
A
Output Pipe
B
Input Pipe
• Erstellung und Veröffentlichung eines Pipe-Advertisements
• Aufbau einer Input-Pipe
• Warten auf eingehende Botschaften
(asynchron, unidirektional)
Pipe-Binding-Protocol
• Suchen des Pipe-Advertisements des Zielpeers
• Aufbau einer Output-Pipe
• Versenden von Botschaften
Aufbau eines Kommunikationskanals
Seite 14
PipeAdvertisement padv = getPipeAdvertisement();PipeService ps = netPeerGroup.getPipeService();OutputPipe op = ps.createOutputPipe(padv, 10000);
Message msg = ps.createMessage();…op.send(msg);
Erstellung einer Output-Pipe zum Versenden von Botschaften
PipeAdvertisement padv = getPipeAdvertisement();PipeService ps = netPeerGroup.getPipeService();InputPipe ip = ps.createInputPipe(padv);while (true){ Message msg = ip.waitForMessage(); receiveMessage(msg);}
Erstellung einer Input-Pipe zum Empfang von Botschaften
Versand und Empfang von Dateien
Seite 15
public void sendFile(String filename, PipeService ps, OuputPipe op) throws IOException{ FileInputStream fis = new FileInputStream(filename); int length, count = 0; byte[] buffer = new byte[100000]; do { length = fis.read(buffer); Message msg = ps.createMessage(); msg.setString("FILENAME", filename); msg.setString("PACKAGE_SIZE", String.valueOf(length)); msg.setString("PACKAGE_NO", String.valueOf(++count)); msg.setBytes("CONTENT", buffer); op.send(msg); } while (length != -1); fis.close();}
Versenden einer Datei
Versand und Empfang von Dateien
Seite 16
public void receiveMessage(Message msg) throws IOException{ String filename = msg.getString("FILENAME"); String length = msg.getString("PACKAGE_SIZE"); String no = msg.getString("PACKAGE_NO"); byte[] buffer = msg.getString("CONTENT"); int l = (Integer.valueOf(length)).intValue(); int n = (Integer.valueOf(length)).intValue(); RandomAccessFile raf = getFileHandle(filename); if (l != -1) { raf.seek((n-1) * 100000); raf.write(buffer, 0, l); } else { raf.close(); }}
Empfang eines Teilstückes einer Datei
Zusammenfassung und Ausblick
Seite 17
Zusammenfassung• Einfache Entwicklung von P2P-Anwendungen mit JXTA möglich• Protokolle übernehmen grundlegende Kommunikationsaufgaben• Sprach-, Hardware- und Betriebssystemunabhängigkeit durch XML• Relay-Peers zur Überwindung von Firewalls • Rendezvous-Peers als Verteilerstationen• Referenzimplementierung in JAVA• Open Source
Ausblick• eigene intelligentere Implementation der Protokolle möglich• Sicherheitsaspekte (sichere Übertragung, sichere Gruppen)• Entwicklung für mobile Endgeräte (JXTA J2ME)• Mitwirkung an der Weiterentwicklung von JXTA• eigene Projekte mit JXTA
Vielen Dank für Ihre Vielen Dank für Ihre AufmerksamkeitAufmerksamkeit