Infrastruttura per la compravendita di merci
all’ingrosso tramite l’utilizzo di
Java Message Service
Progetto di Reti di Calcolatori LS – AA2006-2007
Gianluca Giri 0000243150
1



L’obiettivo è permettere l’interazione tra
rivenditori, grossisti e fornitori di merci
Occorre superare il forte disaccoppiamento sia
spaziale sia di tempi di vita delle tre entità
Le entità nel sistema non necessariamente si
conoscono a priori, ma devono poter comunque
comunicare.
◦ Esempio: un rivenditore che desidera acquistare dei
prodotti, ma non sa a chi rivolgersi, cerca prima i
grossisti disponibili e ne sceglie poi uno.

Focus:
◦ ricerca e confronto di prezzi
◦ Invio ed elaborazione degli ordini
Gianluca Giri 0000243150
2

Possibilità di interazione oltre C/S:

Perché non usare i Web Service?

Cosa serve:
◦ Coordinamento tra grossista e fornitori per evadere gli
ordini.
◦ Proposte di acquisto da parte dei grossisti.
◦ Alcune operazioni hanno granularità troppo fine
◦ Ogni volta per ritrovare il servizio giusto bisogna
ricorrere ad un UDDI (quale?) se si presuppone la non
conoscenza a priori.
◦ Non necessariamente tutti i Retailer o grossisti o
fornitori interessati dispongono di un web server.
◦ Possibilità di fare comunicazione multicast e unicast.
◦ Possibilità per un retailer o un grossista di entrare ed
uscire dal sistema quando lo desiderano.
Gianluca Giri 0000243150
3

Utilizzo di un MOM che permetta di:

Si è scelta un’implementazione recente dello standard JMS:
Open Message Queue.
◦ Gestire disaccoppiamento spaziale e temporale delle entità
comunicanti.
◦ Garantire persistenza dei messaggi.
Server JMS
(Broker)

Legenda:
collegamenti ideali;
collegamenti reali.
Lati negativi:
 Tutto il traffico di messaggi passa attraverso il/i broker
rischio di congestione?  cluster, limitare msg
depositati, politiche su esuberi
Gianluca Giri 0000243150
4

Open Message Queue:
◦ Comunicazione basata su scambio di messaggi
◦ Attraverso “destinazioni” fisicamente gestite come spazi
di memoria su un server chiamato “broker”
◦ Broker multipli in cluster (availability)
◦ Destinazioni di 2 tipi:
 Code (Queue): tipicamente per scambi unicast
 Argomenti (Topic): tipicamente per scambi multicast
◦ Possibilità di comunicazione sia sincrona sia asincrona
(NB: API JMS sempre sincrone, non bloccanti in invio,
bloccanti in ricezione messaggi)
◦ Usa standard JNDI per il servizio di nomi che permette di
ritrovare le destinazioni (ed altri oggetti gestiti)
◦ Usa database per persistenza messaggi
Gianluca Giri 0000243150
5
R1
Retailers
1
R2
3
2
Vendors
V1
S1
V2
4
S2

Rn
…
V3
…
Vn
S4
…
Sn

5
S3

Numerosi Retailer, ognuno
comunica con tutti i
grossisti (Vendor) presenti.
Numerosi Vendor, ognuno
comunica con molti fornitori
(Supplier).
Ogni Supplier comunica con
numerosi Vendor.
Suppliers
1) Ri chiede a tutti i V1-Vn presenti il prezzo di un tipo prodotto cercato.
2) I Vi che possono offrire il prodotto rispondono, fornendo anche il proprio
“biglietto da visita” per essere rintracciati.
3) Ri seleziona un’offerta (intervento utente) e invia un ordine direttamente
all’offerente.
4) Il Vi che riceve un ordine lo elabora richiedendo la merce o le parti per
assemblarla ai propri fornitori. Un Supplier può essere anche il gestore del
magazzino dello stesso grossista rappresentato da Vi (divisione delle
responsabilità).
5) Ri riceve l’esito dell’ordine (positivo o negativo).
Gianluca Giri 0000243150
6

Ogni Retailer ha 2 Queue per le
risposte:
◦ Sui prezzi
◦ Sugli ordini



I Vendor presenti sono tutti in
ascolto su un Topic “Prices” per
le richieste di prezzi in
multicast.
Ogni Vendor usa 2 Queue:
R1
Q Conf.Ord.R1
Q OrdiniV1
V1
Q Conf.Suppl.V1
◦ Una per ricevere ordini;
◦ Una per ricevere conferme dai
Supplier.
questo permette di usare due
processi gestori.
Ogni Supplier usa 1Queue per
ricevere le richieste dai Vendor.

Q Risp.PrezziR1
T Prices
Q S1
S1
Q S2
S2
Q Sn
…
Sn
Legenda:
operazioni listener
operazioni processo principale
Q = Queue
T = Topic
Messaggi strutturati per proprietà e valori
 somiglianza con XML
Gianluca Giri 0000243150
7

Alla ricezione di un ordine un Vendor avvia una
transazione:
◦ Se ci sono problemi di comunicazione o eccezioni:
ROLLBACK e si ritenta.
◦ Se si completa la sequenza delle conferme da parte di
tutti i Supplier coinvolti, allora Chiusura Transazione :
 Se non c’è abbastanza merce disponibile l’ordine non può
essere evaso: esito Negativo.
 Altrimenti esito Positivo.

Un Supplier notifica sempre ad un Vendor
richiedente la quantità di merce disponibile;
finché ciò non avviene la transazione resta
aperta.
Gianluca Giri 0000243150
8


Per un rivenditore è sufficiente un’entità Retailer
funzionante per volta; non è necessario che sia
sempre disponibile.
Un grossista potrebbe voler essere presente in
modo continuativo nel sistema (evitare tempi di
down) o dover gestire molto traffico di ordini:
◦ diventa necessario avere più copie dell’entità Vendor
tutte configurate per lavorare a nome dello stesso
grossista.

Si ipotizza che ogni Supplier sia sempre
disponibile nel sistema, altrimenti occorrerebbe
riutilizzare le stesse strategie proposte a breve
per il Vendor.
Gianluca Giri 0000243150
9


Un grossista può uscire dal sistema quando
desidera (dopo aver terminato transazioni in
corso).
Ma un Vendor che torna attivo NON ritrova una
lista degli ordini depositati mentre non era
operativo
◦ occorrerebbe usare la sottoscrizione ad un Topic invece
di una Queue, e il Retailer dovrebbe restare in attesa
della risposta (o delegare quest’attività) per un tempo
imprevedibile.

Quindi se un Vendor cade o esce dal sistema
mentre sta per ricevere un ordine, questo può
scadere e dare esito negativo (tempo di vita del
messaggio e di attesa del Retailer).
Gianluca Giri 0000243150
10

Q OrdiniV1
V1a
V1b
Q Conf.Suppl.V1a
Q Conf.Suppl.V1b
È possibile attivare più copie (un
pool) per:
1. Avere fault tolerance ed evitare che il
malfunzionamento di un Vendor
(guasto singolo) condizioni l’evasione
degli ordini.

Q S1
S1
Q S2
S2
Q Sn
…
Sn
Occorre partire sempre con almeno due
copie.
2. Fare load sharing in modo che il
traffico di messaggi previsto sia
distribuito equamente.




Tutte le copie rispondono ai prezzi;
Più Vendor “gemelli” prelevano a turno
gli ordini dall’apposita Queue che tutti
condividono;
Ciascuna copia gestisce un ordine in
modo esclusivo, mantenendo la
transazione con i Supplier.
Tutte le copie si appoggiano alla stessa
base dati (gestione accessi).
Gianluca Giri 0000243150
11




L’attivazione delle copie è manuale, perché:
◦ Se un Vendor si replica sulla stessa macchina in realtà le
copie non eseguono in parallelo;
◦ Non è possibile attraverso un MOM ordinare l’attivazione
su un’altra macchina senza l’ausilio di altre entità (a loro
volta soggette a possibili guasti).
Ogni copia può essere attivata a piacere.
La configurazione delle destinazioni usate da un
Vendor (vale anche per Retailer e Supplier)
avviene all’attivazione e non cambia durante
l’esecuzione.
Viene utilizzato un servizio di nomi (di tipo LDAP)
per rintracciare, secondo la configurazione delle
entità, le destinazioni predisposte sul server JMS.
Gianluca Giri 0000243150
12





Due Server JMS in cluster e servizio di nomi sulla stessa
macchina: necessario setup iniziale delle destinazioni.
Fino a tre applicazioni Retailer, tre Vendor e tredici
Supplier sono stati attivati contemporaneamente su tre PC.
Basi di dati per le merci su due PC.
Ogni istanza di Vendor è stata provata:
◦ In assenza di copie;
◦ Con una copia (sia sulla stessa macchina, sia su un’altra
macchina);
◦ Con più di una copia (sia sulla stessa macchina, sia su un’altra
macchina);
In tutti e tre i casi precedenti si è verificato cosa succede
quando:
◦ L’applicazione Vendor viene spenta bruscamente  effetto
negativo sulle transazioni;
◦ Uno dei due Broker si disattiva durante lo scambio di messaggi 
failover automatico, comunicazione garantita
Gianluca Giri 0000243150
13

Indipendenza tempi di vita tra Retailer e Vendor
(mentre questi necessitano dei Supplier)


Trasparenza della allocazione:



Non serve preventiva conoscenza reciproca
È possibile spostare le applicazioni da una macchina all’altra
semplicemente attivandone una copia configurata nello stesso
modo (stesse destinazioni e database applicativo)
Tempi di down mitigati
Cosa si può ancora fare:



Far sì che se un Vendor non può contattare un Supplier della
propria lista, possa almeno cercare un sostituto
 estensione protocollo di ricerca;
Dare l’iniziativa ai Vendor  proposte d’acquisto ai Retailer
(inversione del protocollo);
Permettere il passaggio dello stato di una transazione tra le
copie attive di un Vendor  propagazione attraverso messaggi
Gianluca Giri 0000243150
14
Scarica

presentazione