190 likes | 326 Views
Hauptseminar Wintersemester 2002/2003. Entwicklung von Peer-to-Peer-Anwendungen mit Hilfe der JXTA-Technologie. Bearbeiter: Dirk Michael. Betreuer: Dr. Ing. Jürgen Nützel. Gliederung. Übersicht über Peer-to-Peer-Netzwerke. Einführung in die JXTA-Technologie.
E N D
Hauptseminar Wintersemester 2002/2003 Entwicklung von Peer-to-Peer-Anwendungen mit Hilfe der JXTA-Technologie Bearbeiter: Dirk Michael Betreuer: Dr. Ing. Jürgen Nützel
Gliederung Übersicht über Peer-to-Peer-Netzwerke Einführung in die JXTA-Technologie Erklärung der wichtigsten Konzepte Zusammenfassung und Ausblick Seite 1
Übersicht: Peer-to-Peer-Netzwerke • dezentral organisiertes Netzwerk • direkter Austausch von Ressourcen zwischen den einzelnen Systemen • gleichzeitig Client als auch Server • im Gegensatz dazu: zentral organisiertes Netzwerk Client/Server-Architektur • Anwendungsgebiete für P2P-Netzwerke • File Sharing • Distributed Computing • Instant Messaging Seite 2
Übersicht: Peer-to-Peer-Netzwerke • echtes P2P • assistiertes P2P A A B B D Server C D C Ausprägungen von P2P-Netzwerken • Beispiel: Gnutella • Beispiel: SETI Seite 3
Einführung in die JXTA-Technologie • 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 Seite 4
Einführung in die JXTA-Technologie Peer Information Protocol optional • Abfrage von Statusinformationen Rendezvous Protocol • Verteilung von Nachrichten Pipe Binding Protocol • Aufbau eines virtuellen Kanals Peer Discovery Protocol • Auffinden von Ressourcen Peer Resolver Protocol notwendig • Empfang und Versand Peer Endpoint Protocol • Weiterleiten von Botschaften Transport- protokolle Transport (TCP, HTTP) Übersicht über die JXTA-Protokolle Seite 5
Voraussetzungen für JXTA J2SE Platform http://www.jxta.org http://www.apache.org 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 Seite 6
Begrifflichkeiten • 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 Seite 7
Aufbau eines JXTA-Netzwerks Net Peer Group Sample Group Gruppe veröffentlichen Suchanfrage Pipe-Adv. veröffentlichen Antwort Antwort Suchanfrage nach Pipe-Adv. Kommunikations- kanal Anlegen der Gruppe „Sample Group“ R1 R1 R2 A A B Seite 8
Versenden von Botschaften Internet D E F Rl2 Rl1 A B C Rl3 • 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) Relay Peer Peer A will Botschaft nach Peer E senden Seite 9
Verteilung von Botschaften Internet D E F R2 R1 A B C R3 • Versenden von Suchanfragen, Veröffentlichen von Ressourcen • Discovery Protocol, Rendezvous Protocol • Rendezvous Peers dienen als Verteilerstationen • nur innerhalb einer Gruppe Rendezvous Peer Seite 10
Erzeugen eines Peers public void startPeer() throws PeerGroupException { PeerGroup netPeerGroup = null; netPeerGroup = PeerGroupFactory.newInstance(); } System.setProperty("net.jxta.tls.principal", username); System.setProperty("net.jxta.tls.password", password); • 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 Seite 11
Suchen von Ressourcen • 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); } } Seite 12
Aufbau eines Kommunikationskanals Output Pipe Input Pipe A B Pipe-Binding-Protocol (asynchron, unidirektional) • Suchen des Pipe-Advertisements • des Zielpeers • Aufbau einer Output-Pipe • Versenden von Botschaften • Erstellung und Veröffentlichung • eines Pipe-Advertisements • Aufbau einer Input-Pipe • Warten auf eingehende • Botschaften Seite 13
Aufbau eines Kommunikationskanals 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 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 Seite 14
Versand und Empfang von Dateien 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 Seite 15
Versand und Empfang von Dateien 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 Seite 16
Zusammenfassung und Ausblick • 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 Seite 17