Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
JXTA: Tech Brief Dan Berger, Suvidhean Dhirakaosal, Essia Hamouda, Demetris Zeinalipour CS 202 Spring 2003 Outline Problem Statement/Motivation Architecture Overview Experiments/Demonstrations Conclusions Motivation Existing P2P solutions have had rapid adoption and success – so why build another? JXTA attempts to address 3 key “shortcomings” of typical P2P systems: Interoperability Platform Independence Ubiquity Interoperability Gnutella for file sharing, ICQ/AIM/Yahoo/Jabber/MSN for instant messaging But none of them can talk to each other. This has led to the development of apps like Gaim (linux) and Trillian (windows) that provide a single front-end to multiple protocols. JXTA aims to standardize at the protocol level. Platform Independence JXTA is “independent” of programming language, operating system, and networking platform. The core of JXTA are protocol definitions, not API’s. Ubiquity JXTA was designed to be scalable to any device with a “network heartbeat” – cited examples are: Sensors Consumer electronics (toasters, cell phones) PDAs Etc. The Grand Vision Enough Buzzwords, Already JXTA proposes a set of services to enable building a securable logical overlay network linking “peers:” Peer Discovery Peer Resolution Rendezvous Pipe Binding Endpoint Routing Gratuitous Architecture Picture Just the Facts Each node in the JXTA network has a “peer id” - a “globally” unique ID (UUID) Urn:jxta:idform3-31:08:66:42:67:::91:24::73 Is Autonomous and may operate independently of all peers Peers (self)organize into peer groups – loosely hierarchical. All peers belong to the “World” group. Peers and services are advertised with advertisements (XML documents) Advertisements Used to describe peers, peers groups, pipes, content, services and resources Used to pass info between peers Are presented in XML Peer Adv. Peer group Adv. Module Class Adv. Module Spec. Adv. Module Implementation Adv. Discovery Query <xs:element name="DiscoveryQuery" type="jxta:DiscoveryQuery"/> <xsd:simpleType name="DiscoveryQueryType"> <xsd:restriction base="xsd:string"> <!-- peer --> <xsd:enumeration value="0"/> </xsd:restriction> </xsd:simpleType> <xs:complexType name="DiscoveryQuery"> <xs:sequence> <xs:element name="Type" type="jxta:DiscoveryQueryType"/> <xs:element name="Threshold" type="xs:unsignedInt" minOccurs="0"/> <xs:element name="Attr" type="xs:string" minOccurs="0"/> <xs:element name="Value" type="xs:string" minOccurs="0"/> <!-- The following should refer to a peer adv, but is instead a whole doc for historical reasons --> <xs:element name="PeerAdv" type="xs:string" minOccurs="0"/> </xs:sequence> </xs:complexType> Discovery LAN-based (broadcast) Invitation (in or out of band, via an advertisement) Cascaded (controlled view across discovered peers) Rendezvous (napster-esqe) Resolution In general – a service that resolves advertisements into endpoints. JXTA ships with one implementation – “Rendezvous” – in which hosts serve as switchboards for messages. More complex/decentralized resolvers are possible, but not specified/provided. Pipes Pipes are unidirectional communication channels. Peers can host input pipes (incoming messages), or output pipes (outgoing messages). Pipes can be chained to link peers across multiple logical hops, and can be one-to-many. Pipes are bound to peer ids, not IP address. Pipe Routing Allows peers to discover routes for reaching a peer which can not be directly connected to. I.e. behind a firewall, NAT device, different network platform, etc. Experiments Required Components www.jxta.org has Java and C implementations of the core protocols. The C version is based on the APR (apache portable runtime) and trails behind the JAVA version in terms of functionality and ease of use. For Java – requires the J2SE JDK Installation & Configuration Install a JRE/JDK (e.g. Sun 1.3.1_1) Download the latest JXTAInst_VM.exe InstallAnywhere installer (JXTA v2.0) http://download.jxta.org/easyinstall/install.html (4.71MB) (Or download JXTAInst.exe which contains VM) Download tutorials/code from http://www.jxta.org/project/www/Tutorials.html JXTA Jars JXTA’s core uses 13 other JAR files like Jetty portable Web/Servlet Server, Log4J apache’s generic logging API. Directory Structure so far /InstantP2P -> A “full-fledged” instant P2P application /lib -> The JAR Files /lib/jxta.jar -> Contains the JXTA Programming API /Shell -> Command-line Interface to JXTA /tutorials -> Tutorials that we downloaded individually Step 0: Source/Compiling “Creating a PeerGroup” java -classpath jxta.jar;OTHER_JAR_FILES.jar; Hello import net.jxta.peergroup.*; import net.jxta.impl.id.UUID.*; import net.jxta.impl.id.binaryID.*; public class Hello { static PeerGroup netPeerGroup = null; static DigestTool digestTool = new DigestTool(); public static void main(String args[]) { try { netPeerGroup = PeerGroupFactory.newNetPeerGroup(); System.out.println("Hello from JXTA group " + netPeerGroup.getPeerGroupName() ); System.out.println(" Group ID = " + netPeerGroup.getPeerGroupID().toString()); System.out.println(" Peer name = " + netPeerGroup.getPeerName()); System.out.println(" Peer ID = " + netPeerGroup.getPeerID().toString()); } catch(Exception e) { e.printStackTrace(); } } } Step 1 : Running the code 1 Now a .jxta directory is created on disk which contains all settings 3 4 On the next run we only fill in an authentication box 2 Step 2 : JXTA Sockets! (as of v2.0) JXTA introduces a Socket API which is similar to the familiar sockets. The Socket API attempts to make JXTA Pipe programming easier. (JxtaSocket is a bidirectional Pipe) JxtaServerSocket: Server socket that waits for connections from clients. JxtaSocket: Socket class used to create the I/O streams for both clients and servers. Step 3 : JXTA Sockets Example In this example we use to types of “advertisement” Discovery Services: LAN-based discovery: Local broadcast over the subnet. (224.0.0.0 to 239.255.255.255) Works if peers are within the same subnet or if multicastenabled routers are connecting the peers Discovery via rendezvous points A peer at a wellknown address has the task of knowing and disseminating locations of peers. Works if peers are fire-walled in which case direct connection between peers is not feasible. Step 3 : JXTA Sockets Example Rendevouz Service Server FIREWALL 5 My ServerSocket 2 ID is uuid...BC a)connect, b)receive msg, c) send msg back (multicast channel) 1 read the text file 6 a)connect, b)receive msg, c) send msg back Client 4 The Server I want to connect to is uuid...BC 3 read the text file socket.adv <!DOCTYPE jxta:PipeAdvertisement> <jxta:PipeAdvertisement xmlns:jxta="http://jxta.org"> <Id> urn:jxta:uuid-59616261646162614A757874614D504725184FBC </Id> <Type> JxtaUnicast </Type> <Name> socket example </Name> </jxta:PipeAdvertisement> JXTA Sockets Code Snippets Server (main snippets) // create, and Start the default jxta NetPeerGroup PeerGroup netPeerGroup = PeerGroupFactory.newNetPeerGroup(); // Read file from disk FileInputStream is = new FileInputStream("socket.adv"); // Generate Pipe Advertisment PipeAdvertisement pipeAdv = (PipeAdvertisement)AdvertisementFactory. new Advertisement(is); // Launch ServerSocket JxtaServerSocket serverSocket = new JxtaServerSocket(netPeerGroup, socEx.pipeAdv); // if client connects, spawn two new Threads (input/output). JxtaSocket socket = serverSocket.accept(); OutputStream out = socket.getOutputStream(); InputStream in = socket.getInputStream(); // send a message String msg = “Hello JXTA”; out.write(msg.getbytes()); // receive message back in.read(inbuf, 0, bufsize); JXTA Sockets Code Snippets Client (main snippets) // create, and Start the default jxta NetPeerGroup PeerGroup netPeerGroup = PeerGroupFactory.newNetPeerGroup(); // Read file from disk FileInputStream is = new FileInputStream("socket.adv"); // Generate Pipe Advertisment PipeAdvertisement pipeAdv = (PipeAdvertisement)AdvertisementFactory. new Advertisement(is); // Launch Socket along with 2 new Threads (input/output). JxtaSocket socket = new JxtaSocket(netPeerGroup, pipeAdv); OutputStream out = socket.getOutputStream(); InputStream in = socket.getInputStream(); // receive message read = in.read(inbuf, 0, bufsize); System.out.println(">> " + new String(inbuf)); // send message back out.write(inbuf, 0, read); JXTA Sockets Code Snippets Server acting also as Rendezvous Client connecting to Rendezvous Conclusions JXTA Gnutella Napster Freenet/Chord Key Difference P2P Platform that allows the deployment of “any” P2P service P2P Protocol tailored to the needs of filesharers (searching based on filename P2P Protocol tailored to the needs of filesharers (searching based on filename) Algorithms for Object Location in P2P systems (searching based on keys) Architecture Any (Pure, Rendezvous (hybrid), or centralized Pure/Hybrid P2P (started out as Pure but with Limewire’s Ultra-peers moving to Hybrid) Centralized P2P Structured P2P networks (peers are positioned at well-known places) Transport HTTP or TCP/IP TCP/IP TCP/IP mostly TCP/IP Communication Sync/Async Asynchronous Synchronous Asynchronous Data Replication Open (depends on the Application) No (downloaded file not considered replication) No (downloaded file not considered replication) Required Lang Bindings JAVA, “C”, Open source mostly in Java. No API. (proprietary) Java and C++ Ongoing JXTA Projects Full list available at : http://apps.jxta.org/servlets/ProjectHome Gnougat: A Fully decentralized file caching RossetChat: Localized JXTA Peer Text Messaging Radiojxta: delivering audio content over JXTA networks P2Pconference: A tool to conduct remote, text-based conferences InstantP2P: To be interactively displayed.