La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi Gianpaolo Cugola

Presentazioni simili


Presentazione sul tema: "Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi Gianpaolo Cugola"— Transcript della presentazione:

1 Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi Gianpaolo Cugola

2 Politecnico di Milano Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi2 Sommario Il concetto di applicazione distribuita –Larchitettura di una applicazione distribuita –Il paradigma a scambio di messaggi Il paradigma client-server Il paradigma peer-to-peer Internet e Intranet –Il protocollo TCP/IP Lo sviluppo di applicazioni distribuite in Java –I socket TCP/IP in Java –Linvocazione remota di metodi in Java (RMI)

3 Politecnico di Milano Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi3 Applicazione distribuita Definizione: –Applicazione costituita da due o più processi che eseguono in parallelo su macchine distinte connesse da una rete di comunicazione I processi che costituiscono una applicazione distribuita cooperano sfruttando i servizi forniti dalla rete di comunicazione

4 Politecnico di Milano Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi4 Applicazione distribuita: un esempio

5 Politecnico di Milano Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi5 Internet e le applicazioni distribuite Gli anni 90 hanno visto il boom delle tecnologie di telecomunicazione –Il caso di Internet: milioni di computer collegati in una rete unica Effetto pratico: –Un aumento esponenziale nella richiesta di applicazioni distribuite Principali campi di impiego delle applicazioni distribuite –Comunicazione: , web, chat, news –Supporto al lavoro collaborativo: sistemi di workgroup e workflow –Supporto alle attività commerciali: sistemi di commercio elettronico, sistemi di home banking

6 Politecnico di Milano Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi6 Architettura di una applicazione distribuita Una applicazione distribuita è caratterizzata dalla propria architettura run-time Definizione: –Con il termine architettura run-time si indica lorganizzazione dei componenti (processi) che costituiscono lapplicazione a run-time Elementi caratteristici di una architettura –Tipologia e ruolo dei componenti –Tipologia delle connessioni

7 Politecnico di Milano Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi7 Le architetture basate su scambio messaggi Lo scambio messaggi è il paradigma di comunicazione più semplice per lo sviluppo di applicazioni distribuite –Identifica una categoria di architetture distinte Caratteristiche: –Ogni componente dellapplicazione possiede uno o più indirizzi –Un componente A comunica con un componente B spedendo un messaggio ad uno degli indirizzi associati a B Principali architetture basate su scambio messaggi: –Architetture client-server –Architetture peer-to-peer –Architetture a tre livelli (three-tiered architecture)

8 Politecnico di Milano Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi8 Larchitettura client-server Caratteristiche: –Componenti distinti in due tipi: client e server I server erogano un servizio I client sfruttano tale servizio –Comunicazioni basate su scambio messaggi Esempio: il web –Client: il browser –Server: il demone http che fornisce i documenti ai client Browser Demone http Richiesta documento Invio documento

9 Politecnico di Milano Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi9 Larchitettura peer-to-peer Caratteristiche –Componenti indifferenziati: agiscono tanto da richiedenti di un servizio quanto da fornitori di servizio –Comunicazioni basate su scambio messaggi Esempio: talk Blah blah blah

10 Politecnico di Milano Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi10 Larchitettura a tre livelli Caratteristiche: –Tre tipologie di componenti: Client Server applicativo Data base –Comunicazioni basate su scambio messaggi Esempio: applicazioni di commercio elettronico Client (browser + ActiveX o Applet) Server applicativo (demone http+cgi o servlet) DB

11 Politecnico di Milano Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi11 Internet e Intranet una breve panoramica delle caratteristiche e dei protocolli di comunicazione

12 Politecnico di Milano Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi12 Internet: architettura logica Rete Server ftp Client web Client ftp Server web Client web Client web Server ftp Server web

13 Politecnico di Milano Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi13 Internet: architettura fisica Host Gateway Internet provider

14 Politecnico di Milano Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi14 Internet Protocol Suite Application Session Presentation Network Transport Data Link ISO/OSI Physical Non specificati IP e Protocolli di routing TCP e UDP Telnet FTP SMTP HTTPRPC Web-NFS NFS Internet Protocol Suite

15 Politecnico di Milano Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi15 Il protocollo IP Caratteristiche: –protocollo connectionless –si occupa dellinstradamento e della rilevazione derrore Indirizzo IP: –indirizzo numerico (32 bit) univocamente associato ad una interfaccia di rete di un host Esempio: I gateway hanno due o piu indirizzi IP diversi ed una tabella di instradamento

16 Politecnico di Milano Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi16 Gli indirizzi simbolici ed i DNS Un indirizzo simbolico può sostituire un indirizzo IP Un indirizzo simbolico è composto da un nome di dominio e da un nome di host –esempio: ipmel2.elet.polimi.it Il file hosts: –esempio: localhost www.polimi.it ipmel2 ipmel2.elet.polimi.it I Domain Name Servers (DNS): –costituiscono un data base distribuito per i nomi simbolici –permettono lassociazione nome simbolico/indirizzo IP

17 Politecnico di Milano Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi17 Il protocollo TCP Caratteristiche: –protocollo connection-oriented (indirizzo IP + porta TCP) –fornisce un servizio full-duplex, con acknowledge e correzione derrore Due host connessi su Internet possono scambiarsi messaggi attraverso canali TCP TCP costituisce linfrastruttura di comunicazione della maggior parte dei sistemi basati su scambio messaggi su Internet

18 Politecnico di Milano Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi18 Il protocollo UDP Caratteristiche: –protocollo connectionless (indirizzo IP + porta UDP) –fornisce un servizio di correzione derrore –Non assicura la consegna nè, tantomeno, lordine di invio (unreliable, best-effort protocol) Utilizzato nelle applicazioni client-server di tipo richiesta/risposta –Esempi: NFS, DNS

19 Politecnico di Milano Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi19 Intranet Il boom di Internet ha favorito la diffusione del protocollo TCP/IP anche in ambito locale Intranet: rete locale basata sui protocolli di Internet (TCP/IP)

20 Politecnico di Milano Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi20 Lo sviluppo di applicazioni distribuite basate su scambio messaggi in Java Socket TCP e UDP, RMI

21 Politecnico di Milano Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi21 Socket TCP e UDP Con il termine socket si indica unastrazione del sistema operativo per modellare la comunicazione tramite TCP o UDP Nati in ambiente Unix BSD (1982) Disponibili su tutte le piattaforme Le librerie per la gestione dei socket sono fornite con tutti i principali linguaggi di programmazione

22 Politecnico di Milano Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi22 Socket TCP: meccanismo di funzionamento Server P1 Client P2 P3

23 Politecnico di Milano Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi23 Socket UDP: meccanismo di funzionamento Server P1 Client P2

24 Politecnico di Milano Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi24 Socket TCP e UDP in Java Le classi per la gestione dei socket (TCP o UDP) sono parte del package java.net Classi principali –Classi di uso generale InetAddress –Socket TCP ServerSocket Socket –Socket UDP DatagramSocket MulticastSocket DatagramPacket

25 Politecnico di Milano Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi25 La classe InetAddress Descrive un indirizzo IP Non ha costruttori pubblici Metodi principali –public static InetAddress getByName(String host) –public static InetAddress getLocalHost() –public String getHostAddress() –public String getHostName() –public boolean isMulticastAddress()

26 Politecnico di Milano Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi26 La classe ServerSocket Usata dal lato server Costruttore principale: –public ServerSocket(int port) Metodi principali: –public synchronized void setSoTimeout(int timeout) permette di scegliere un timeout per la accept (in millisecondi) –public synchronized int getSoTimeout() –public Socket accept() bloccante se timeout=0 –public InetAddress getInetAddress() –public int getLocalPort() –public void close()

27 Politecnico di Milano Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi27 La classe Socket Costruttori principali: –public Socket(String host, int port) –public Socket(InetAddress host, int port) Metodi principali: –public InetAddress getInetAddress() –public InetAddress getLocalAddress() –public int getPort() –public int getLocalPort() –public InputStream getInputStream() –public OutputStream getOutputStream() –public void close() –public synchronized void setSoTimeout(int timeout) permette di scegliere un timeout per la lettura dei byte dall InputStream associato (in millisecondi) –public synchronized int getSoTimeout()

28 Politecnico di Milano Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi28 La classe DatagramSocket Usata per inviare e ricevere messaggi UDP Costruttori principali –public DatagramSocket() –public DatagramSocket(int port) Metodi principali –public void close() –public void connect(InetAddress address, int port) –public void disconnect() –public void setSoTimeout(int timeout) –public int getSoTimeout() –public void receive(DatagramPacket p) –public void send(DatagramPacket p)

29 Politecnico di Milano Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi29 La classe MulticastSocket Usata per inviare e ricevere messaggi multicast Sottoclasse della classe DatagramSocket Costruttori principali –public MulticastSocket() –public MulticastSocket(int port) Metodi principali –public void joinGroup(InetAddress mcastaddr) –public void leaveGroup(InetAddress mcastaddr) –public void send(DatagramPacket p, byte ttl) –public void setTimeToLive(int ttl) –public byte getTimeToLive()

30 Politecnico di Milano Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi30 La classe DatagramPacket Rappresenta un messaggio UDP Costruttore principale –public DatagramPacket(byte[] buf, int length) Metodi principali –public InetAddress getAddress() –public int getPort() –public byte[] getData() –public void setData(byte[] buf) –public int getLength() –public void setLength(int length)

31 Politecnico di Milano Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi31 Applicazioni client-server basate su socket TCP: schema di funzionamento Lapplicazione server rimane in attesa su una porta logica Lapplicazione client apre una connessione verso la macchina sulla quale gira il server specificando la porta Il server riceve la connessione e apre una canale di comunicazione Caso 1: –Il server riceve il messaggio inviato dal client, lo interpreta e svolge il servizio richiesto inviando leventuale risposta –Al termine si rimette in attesa di nuove connessioni Caso 2: –Il server crea un nuovo thread incaricato di gestire la connessione e si rimette in attesa di nuove connessioni

32 Politecnico di Milano Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi32 I socket TCP: un esempio - 1 import java.net.*; import java.io.*; public class ServerTCP { public static void main(String[] args) { ServerSocket sSock = null; try {sSock = new ServerSocket(4444); } catch (IOException e) { System.out.println("Could not listen on port: 4444, "+e);System.exit(-1); } Socket sock = null; while(true) { try { sock = sSock.accept(); new ServerThread(sock).start(); } catch (IOException e) { System.out.println("Accept failed, " + e); System.exit(1); } class ServerThread extends Thread { Socket sock; public ServerThread(Socket sock) { this.sock=sock; } public void run() { String inputLine; try { BufferedReader br= new BufferedReader( new InputStreamReader( sock.getInputStream())); while((inputLine=br.readLine())!=null){ System.out.println(inputLine); if (inputLine.equals("Bye.")) break; } br.close(); sock.close(); }catch (IOException e) {e.printStackTrace();} }

33 Politecnico di Milano Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi33 I socket TCP: un esempio - 2 import java.io.*; import java.net.*; public class ClientTCP { public static void main(String[] args) { Socket sock=null; OutputStreamWriter osw=null; try{ sock=new Socket(args[0],4444); osw=new OutputStreamWriter(sock.getOutputStream()); } catch(IOException e) { System.out.println("Error opening socket, "+e); System.exit(-1); } try{ osw.write(args[1]); osw.write("Bye."); osw.close(); sock.close(); } catch(IOException e) { System.out.println("Error sending message, "+e); System.exit(-1); }

34 Politecnico di Milano Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi34 I socket UDP: un esempio - 1 import java.net.*; public class ServerUDP { public static void main(String[] args) { DatagramSocket sock = null; String mess=null; DatagramPacket pack = new DatagramPacket(new byte[128],128); try { sock = new DatagramSocket(4444); } catch (SocketException e) { System.out.println("Error opening socket, "+e); System.exit(-1); } while(true) { try { sock.receive(pack); } catch (java.io.IOException e) { System.out.println("Error receiving packet, " + e); System.exit(- 1); } mess=new String(pack.getData()); System.out.println(mess); if (mess.equals("Bye.")) break; } sock.close(); }

35 Politecnico di Milano Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi35 I socket UDP: un esempio - 2 import java.net.*; public class ClientUDP { public static void main(String[] args) { DatagramSocket sock = null; DatagramPacket pack = null; try{ sock=new DatagramSocket(); sock.connect(InetAddress.getByName(args[0]), 4444); } catch(java.io.IOException e) { System.out.println("Error opening socket, "+e); System.exit(-1); } try{ byte[] buf=args[1].getBytes(); pack=new DatagramPacket(buf,buf.length); sock.send(pack); } catch(java.io.IOException e) { System.out.println("Error sending message, "+e); System.exit(-1); } sock.disconnect(); sock.close(); }

36 Politecnico di Milano Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi36 Le altre classi del package java.net Il package java.net fornisce altre classi per: –usare gli URL –sfruttare il protocollo HTTP –Autenticare un utente

37 Politecnico di Milano Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi37 Dai socket alla Remote Method Invocation I socket TCPe UDP forniscono un valido strumento per la programmazione di applicazioni distribuite ma risultano talvolta di difficile utilizzo –Occorre definire un protocollo per linvio delle richieste di servizio e delle risposte... –... con relativa codifica e decodifica dei parametri in sequenze di byte La Remote Method Invocation (RMI) permette di superare tali limiti

38 Politecnico di Milano Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi38 Remote Method Invocation Attraverso i servizi RMI è possibile invocare metodi su un oggetto remoto come se si trattasse di un oggetto locale Un oggetto remoto è ogni oggetto che implementi una interfaccia che estende linterfaccia java.rmi.Remote Gli oggetti remoti si comportano come gli oggetti tradizionali –è possibile passare riferimenti ad oggetti remoti nelle chiamate a metodo La differenza principale riguarda il passaggio di parametri non remoti a metodi di oggetti remoti –il passaggio è fatto per copia (i parametri devono essere serializzabili) Lo stesso vale per i valori di ritorno restituiti da metodi di oggetti remoti

39 Politecnico di Milano Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi39 RMI: schema di funzionamento Client Server Server_SkelServer_Stub rmiregistry IntServer bind IntServer host Ahost B lookup invoke

40 Politecnico di Milano Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi40 Implementazione di una applicazione client/server basata su RMI: server - 1 Si crea una interfaccia che descriva i servizi forniti dal server –linterfaccia deve estendere java.rmi.Remote –tutti i metodi devono dichiarare di sollevare leccezione java.rmi.RemoteException

41 Politecnico di Milano Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi41 Implementazione di una applicazione client/server basata su RMI: server - 2 Si implementa il server –come sottoclasse di java.rmi.server.UnicastRemoteObject –oppure come classe generica che reimplementi i metodi equals, hashCode e toString in maniera da mantenere la semantica corretta in ambito distribuito in tal caso il server deve essere esplicitamente esportato per essere visibile ai client, invocando il metodo: java.rmi.server.UnicastRemoteObject.exportObject –il server può essere registrato sul rmiregistry attraverso un nome simbolico nella forma //host:porta/nome –il server dovrebbe impostare come security manager un RMISecurityManager

42 Politecnico di Milano Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi42 Implementazione di una applicazione client/server basata su RMI: server - 3 Si compila il server Si creano le classi stub e skeleton attraverso il compilatore rmic Si lancia lapplicazione rmiregistry Si lancia il server

43 Politecnico di Milano Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi43 Implementazione di una applicazione client/server basata su RMI: client Si implementa il client Il client ottiene un riferimento alloggetto remoto –passato da altri oggetti –ottenuto accedendo allo rmiregistry Il client può invocare tutti i metodi elencati nellinterfaccia remota implementata dal server Per il client non occorre alcun processo di compilazione speciale

44 Politecnico di Milano Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi44 Implementazione di una applicazione client/server basata su RMI: rmiregistry Il rmiregistry fornisce un servizio di directory per RMI Un server RMI si può registrare su un rmiregistry attraverso un nome simbolico Un client RMI può: –ottenere un riferimento ad un server RMI indicando il nome simbolico –chiedere la lista dei server disponibili Tali servizi sono realizzati attraverso le classi: –java.rmi.Naming –java.rmi.registry.LocateRegistry –java.rmi.registry.Registry e attraverso leseguibile rmiregistry

45 Politecnico di Milano Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi45 Esempio RMI: linterfaccia del server import java.rmi.*; public interface RMIServer extends Remote { public void print(String s) throws RemoteException; }

46 Politecnico di Milano Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi46 Esempio RMI: limplementazione del server import java.rmi.*; import java.rmi.server.UnicastRemoteObject; public class RMIServerImpl extends UnicastRemoteObject implements RMIServer { public static void main(String[] args) { try { System.setSecurityManager(new RMISecurityManager()); RMIServerImpl server = new RMIServerImpl(); Naming.rebind("polimi/RMIServer", server); System.out.println("Server bound"); } catch (Exception e) { e.printStackTrace(); } public RMIServerImpl() throws RemoteException {} public void print(String s) throws RemoteException { System.out.println(s); }

47 Politecnico di Milano Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi47 Esempio RMI: il client import java.rmi.*; public class RMIClient { public static void main(String[] args) { try { System.out.println("Looking up server..."); RMIServer server = (RMIServer) Naming.lookup("rmi:// "+args[0]+ "/polimi/RMIServer"); System.out.println("Server bound..."); server.print("prima prova"); server.print("seconda prova"); } catch (Exception e) { e.printStackTrace(); }

48 Politecnico di Milano Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi48 Esempio RMI: la compilazione javac RMIServerImpl.java –compila il server javac RMIClient.java –compila il client rmic RMIServerImpl –crea le classi RMIServer_Skel e RMIServer_Stub rmiregistry –lancia il registry java RMIServerImpl –lancia il server java RMIClient localhost –lancia il client dicendo di collegarsi a localhost

49 Politecnico di Milano Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi49 Il deployment Le classi stub devono essere accessibili al client (attraverso un opportuno class loader) Il caso delle applet –le classi stub devono essere inserite nella stessa directory della classe dellapplet (sul server http) il classloader usato è AppletClassLoader –il server RMI deve girare sullo stesso host su cui gira il server http dal quale viene scaricata lapplet

50 Politecnico di Milano Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi50 Domande?


Scaricare ppt "Lo sviluppo di applicazioni distribuite secondo il paradigma a scambio di messaggi Gianpaolo Cugola"

Presentazioni simili


Annunci Google