Antonio Giovannelli Riccardo Gregori Discovery ◦ ◦ ◦ ◦ Basato su peer per garantire resistenza ai guasti Registrazione/Rimozione di servizi e cluster (di servitori) Ricerca di servizi (per descrizione o ID) Propagazione delle informazioni tra peer ◦ ◦ ◦ ◦ Creazione del contratto Pubblicazione/Rimozione Gestione dello stato Gestione invocazione Servant Client ◦ Ricerca con bilanciamento di carico ◦ Invocazione Ambiente di sviluppo: ◦ Microsoft Visual Studio .Net Linguaggio: ◦ C# Protocolli: ◦ TCP ◦ UDP Discovery Peer FIND Client Peer Peer INVOKE PUBLISH/REMOVE Copy Servant Servant Master Servant Copy Cluster Cluster a copie calde/fredde con un unico servant attivo Struttura multithread Un Thread (Agente) per ogni funzionalità Risorsa condivisa tra Threads ◦ Gli agenti comunicano tra di loro attraverso un sistema ad eventi in memoria comune “EventDispatching” ◦ ServiceList: una struttura thread-safe, contenente i servizi e i cluster registrati, con la quale interagiscono gli agenti. ServiceList Reference Reference Publisher Finder Event Dispatching Reference StateAgent Si occupa della registrazione/rimozione di un cluster e del suo servizio nella ServiceList. Le richieste possono giungere sia attraverso il sistema ad eventi, sia attraverso la rete mediante protocollo TCP. Se un servizio è già presente, il cluster pubblicante viene aggiunto tra i cluster che offrono quel servizio. La rimozione di un cluster implica anche la rimozione del servizio nel caso in cui un cluster sia l’unico registrato per quel servizio. In caso di richieste via TCP, viene inviata una notifica al sistema di eventi per notificare gli interessati. Event Dispatching Publish/Remove Spread Event Publish/Remove Notification Cluster Publish/Remove Request Publisher Publish/Remove ServiceList Ricerca i servizi registrati attraverso ID o descrizione del servizio. Si possono richiedere tutti i servant attivi (se sono disponibili più cluster per un servizio) o solo uno. Le richieste giungono via TCP dai Client. La risposta contiene il contratto del servizio ricercato e il servant attivo di ogni cluster che offre tale servizio. Identificazione del servant attivo mediante uno specifico protocollo di Liveness (UDP), partendo dal master e scorrendo via via le copie se non si ha risposta. Client Find_by_ID/description Finder Response Hello Servant Master Hello Copy Find Servant ServiceList Hello Servant Cluster Copy Propaga ai peer conosciuti le informazioni di pubblicazione/rimozione di un cluster ed accetta richieste di Join e Remove (vedi diapositiva successiva). Le informazioni da propagare possono giungere dal sistema di eventi (si tratta degli eventi lanciati dal Publisher) o via TCP da un peer che sta propagando a sua volta un’informazione. Controlla sulla ServiceList che le informazioni non siano già presenti, se sono presenti non si propaga il messaggio. Notifica con la ricezione di un messaggio di propagazione al sistema di eventi (evento di interesse al Publisher). La propagazione delle informazioni avviene curandosi di non contattare i vicini già notificati dal Peer che ha inviato le informazioni. Anche in questo caso si effettua un controllo mediante il protocollo di Liveness per identificare eventuali Peer inattivi Event Dispatching Publish/Remove Event Publish/Remove Spread Notification Peer Publish/Remove Spread Request Publish/Remove Spread Request Peer StateAgent Check ServiceList Publish/Remove Spread Request Peer Protocollo di inserimento di un nuovo discovery server in una rete di peer preesistente. Permette ai peer di conoscere il nuovo vicino e al nuovo discovery di avere informazioni sui servizi registrati (attraverso lo StateAgent). Il nuovo peer conosce almeno un discovery server. Si connette al massimo su 3 peer partendo dal più scarico (numero di vicini a cui è collegato) per limitare il numero di connessioni. Remove Il peer si rimuove dai discovery con cui ha fatto il join Peer Peer Join Peer Peer Join Peer Join Peer Peer Proxy incaricato di ricevere le richieste di servizio (invoke). Deserializza (da formato SOAP) e controlla i parametri in ingresso, serializza quelli in uscita (sempre SOAP) in modo dinamico mediante le informazioni fornite dal contratto del servizio. Registra, in maniera trasparente, il servizio sul sistema di discovery se il servant è attivato come master. Prevede situazioni di recovery. Si appoggia allo StateAgent per propagazione dello stato (modello a PUSH o PULL) sulle copie. Proxy lato client , permette di accedere al servizio di discovery per la ricerca in maniera trasparente. ◦ I discovery server conosciuti vengono contattati ciclicamente, mediante il protocollo di Liveness, con timeout sempre maggiori per determinare quello con il tempo di risposta minore. Usa un meccanismo uguale ed inverso al proxy dei servant per (de)serializzare e controllare in modo dinamico i parametri di invocazione mediante le informazioni contenute nel contratto del servizio, ottenuto durante la ricerca. L’invoke di un servizio può essere effettuata in maniera completamente trasparente, o scegliendo direttamente il servant (attivo) su cui effettuare la chiamata. Formato XML in cui si definiscono: ◦ ID del servizio ◦ Descrizione ◦ Parametri Direzione Nome Tipo (C#) Descrizione Checker lato chiamante che invia una stringa “Hello this is [IP chiamante]” tramite UDP ad un destinatario in cui sia attivo un LivenessAgent; un thread che si limita a rispondere con un’altra stringa. Attesa della risposta entro un certo timeout. Caching delle risposte per un periodo limitato (true se risponde in tempo, false altrimenti). Se entro tale periodo si effettua di nuovo un check, non si contatta il destinatario ma si restituisce il risultato presente in cache. Meccanismi di invalidazione della cache. Il meccanismo di Caching riduce notevolmente il ritardo di risposta. Gli obbiettivi prefissati sono stati raggiunti ottenendo anche risultati sperimentali soddisfacenti (paper per dettagli) Reingegnerizzazione del codice Autenticazione dei Cluster (simile a WSIL) Monitoring del traffico sui peer Estensione del contratto per eccezioni …