Protocolli


Client - Server

In ogni server c’è una tabella di corrispondenze Stringhe- Interi.
 
I Client si rivolgono ad uno dei  Server attivi nella rete per le operazioni di lettura di un valore attraverso la chiave, o di update di un valore.

Lettura:

In fase di lettura esistono 3 casi:

1) Il dato è presente nel server

Il cliente chiama Read(chiave) sul server, che restituisce il valore cercato
2) Il dato non è presente nel server, ma è presente su un altro server
Il cliente chiama Read(chiave) sul server, il server effettua una lookup(chiave, server mittente) sugli altri server, fino a che non ne trova uno (cioè finchè la lookup non restituisce un valore diverso da zero), restituisce il valore al cliente  aggiunge l’entry nella tabella con lo status = ‘c’. L’altro server cambia l’entry della tabella secondo queste regole:
a) se status = ‘n’ => status =’r’ , e aggiungo il server al vettore
b) se status =’r’ =>aggiunge il server al vettore
c) se status = ‘c’ deve leggere dalla lista dei vettori di questa entry da dove è stato replicato il dato, e chiamare la lookup(chiave, servermittente)sul server che contiene la prima copia del dato, dove servermittente è il PRIMO server.
3) Il dato non è presente su nessun server.
La lookup fallisce su tutti i server, e quindi restituisco 0 al client

 

Update:

In fase di update abbiamo 2 casi:

1) Il dato non è presente sul server

1.a) Il dato è su un altro server
 Il server se ne accorge con lookup, poi chiama update su un altro server
1.b) Il dato non è presente nella rete
Il server si accorge che non è presente nella rete con lookup, ed effettua l’inserimento della entry nella sua tabella

 

2) Il dato è presente nel server

2.a) Il dato è presente solo in questo server
 Il dato è presente nel server, e lo stato è ‘n’. Effettuo tranquillamente l’update

2.b) Il dato è stato replicato su altri server
Lo stato del dato nel server è ‘r’. Effettuo l’update, e chiamo il metodo reCache() su tutti i server del vettore, che aggiorna il valore di quell’Entry nei server dove il dato è cachato.

2.c) Il dato è una copia cachata proveniente da un altro server.
Lo stato del server è ‘c’.  In questo caso, restituisco al client il nome del server che contiene il dato valido, ed il client (in maniera trasparente) effettua l’update sul server principale.

Server - Server


Torna all'indice.