• Non ci sono risultati.

3.3 Algoritmi di supporto agli Ambienti Virtuali Distribuiti

3.3.2 L’algoritmo di Ghaffari et al

Mohsen Ghaffari, Behnoosh Hariri e Shervn Shirmohammadi descrivono in [14] un’architet- tura distribuita per il supporto di Massive Multiplayer Virtual Environments (MMVE). I MMVE sono ambienti virtuali dove milioni di utenti connessi in tutto il mondo possono in- teragire tra loro. Esempi di MMVE possono essere i giochi di ruolo online (MMPORG) e ambienti virtuali social.

Come descritto nella sezione precedente, la principale sfida è la costruzione di una struttu- ra che sia in grado di gestire una rete altamente dinamica, poiché gli utenti effettuano molto frequentemente connessioni, disconnessioni e cambiamenti di posizione.

A differenza dell’algoritmo di Buyukkaya et al., Ghaffari et al. in [14] propongono l’utiliz- zo di due triangolazioni di Delaunay parallele per la gestione degli aggiornamenti e dell’alta dinamicità della rete. Queste due triangolazioni parallele utilizzano il greedy routing per po- tersi aggiornare correttamente a tempi alterni: per esempio, se la prima si aggiorna ai tempi 0T, 2T, 4T, allora la seconda si aggiorna ai tempi T, 3T, 5T. L’utilizzo di due triangolazioni

di Delaunay parallele è necessario per garantire che l’algoritmo di greedy routing sia libero da cicli. Utilizzando una sola triangolazione di Delaunay, infatti, non sarebbe possibile l’utilizzo del greedy routing per permettere ai nodi di comunicare eventuali cambiamenti di posizione, poiché la modifica apportata alla triangolazione nel momento in cui il cambiamento di posi- zione è avvenuto non garantisce più che questa sia di Delaunay, quindi il supporto al greedy routing. Ghaffari et al. propongono di dividere i nodi della rete V in due insiemi R(Red) e B(Black) e di mantenere due triangolazioni di Delaunay parallele: DT (R) e DT (B). I due insiemi aggiornano le proprie informazioni a tempi che differiscono di t/2 utilizzando l’altro grafo per effettuare un greedy routing: per esempio, se al tempo t i nodi in R aggiornano la propria posizione inviando messaggi a nodi in B, al tempo t + t/2 saranno i nodi in B ad aggiornarsi utilizzando il grafo costruito su R.

In questo modo, non essendo il grafo costruito nell’insieme B ancora stato aggiornato, è ga- rantito che la triangolazione di Delaunay DT (B) sia valida al momento in cui sono inviati i messaggi. I nodi che fanno parte degli insiemi B e R possono essere scelti arbitrariamente, anche se è consigliato l’utilizzo di una distribuzione uniforme, il quale può influire positiva- mente sulla velocità di convergenza dell’algoritmo.

Figura 3.4: Struttura Red-Black .

Per semplicità, in questa sessione è descritto solo l’aggiornamento di posizione del grafo dei nodi nell’insieme R, poiché quello dei nodi nell’insieme B utilizza la stessa procedura.

Si consideri la seguente definizione di Vertex Region di un nodo n:

Definizione 3.7. Si consideri un grafo G = (V, E) nell’insieme di punti V , dove per ogni vi ∈ V , N (vi) rappresenta l’insieme di vicini di vi. Per ogni vi ∈ V , definiamo la Vertex

Region di vi nel grafo G, V RG(vi), come l’insieme di tutti i punti del piano che sono più

L’aggiornamento della posizione dei nodi in R corrisponde al loro aggiornamento della Vertex Region. L’algoritmo di aggiornamento dei nodi in R può essere diviso in due fasi:

1. i nodi in R comunicano la loro posizione ai vecchi vicini in R: in questo modo, ogni nodo r ∈ R sarà in possesso dell’informazione necessaria all’aggiornamento di V RR(r)

con le nuove posizioni dei nodi in R;

2. tra le nuove Vertex Regions dei nodi in R calcolate, sono identificate quelle che si sovrappongono. I nodi relativi a tali regioni diventeranno nuovi vicini nella nuova rete calcolata.

Per trovare le Vertex Regions sovrapposte, le informazioni di ogni Vertex Region in R V RR(r) è inviata ai nodi b in B tali che V RB(b) contiene almeno un punto in comune con

V RR(r). Supponendo che il nodo vib ∈ B trovi almeno un punto x in comune tra due

V R rosse, dove x ∈ V RB(vib), vib sarà responsabile del comunicare al primo nodo rosso di

aggiungere un collegamento con il secondo nodo.

I nodi in B responsabili della Vertex Region di un nodo rosso vjrsono detti Black Parents di vrj.

Definizione 3.8 (Black Parents). Dato un nodo vjr∈ R, definiamo Black Parents di vr j

l’insieme BP (vjr) = {vib|V RB(vib) ∩ V RR(vrj) 6= ∅}

L’invio della Vertex Region V RR(vjr) di vjr ai nodi dell’insieme BP (vrj) viene diviso in due fasi:

1. la prima fase consiste nell’inviare il messaggio contenente la Vertex Region di vrj a un nodo in particolare in BP (vjr). In dettaglio, se vjr ∈ V RB(vjb) allora vbj ∈ BP (vrj).

Per questo motivo, ogni nodo in R memorizza il nodo vicino più vicino appartenente all’insieme B e utilizza questo per l’invio del messaggio contenente la Vertex Region calcolata;

2. la seconda fase consiste nel broadcasting del messaggio contenente la Vertex Region di vrj tra i Black parents di vrj. Questa fase consiste nell’invio del messaggio da parte di un nodo n che ha ricevuto il messaggio ad ogni nodo d in B tale che la Vertex Region V RB(d) abbia dei punti in comune con la Vertex Region contenuta nel messaggio.

Infine, viene calcolata la struttura utilizzando le informazioni acquisite nelle fasi prece- denti: una volta che le Vertex Regions di due nodi in R r1 e r2 sono state calcolate dai

Black Parents di uno dei due nodi, per esempio di r1, uno dei nodi in BP (r1) invia a r1 un

messaggio di candidate neighbor per r2.

In questo modo, i nodi r in R vengono a conoscenza dei loro candidate neighbors. L’algoritmo per il calcolo dei nuovi vicini effettivi è il seguente:

1. il nodo r1 considera la bisettrice ortogonale del segmento che lo collega a un suo candidate set r2;

2. se la bisettrice ortogonale interseca V R(r1), allora significa che esiste una porzione di

V R(r1) che è più vicina a r2 rispetto che a r1: in questo caso, r1 aggiorna V R(r1)

considerando solamente il suo sottoinsieme più vicino a r1, e aggiunge r2 ai suoi vicini. 3. l’aggiornamento di V R(r1) può generare la creazione di vicini ridondanti per r1. Questi

vicini possono essere identificati utilizzando la bisettrice ortogonale del lato che li collega a r1: se tale bisettrice è fuori da V R(r1), allora il vicino è ridondante e l’arco che lo

collega a r1 viene eliminato

Una volta calcolata la lista dei nuovi vicini, il nodo r1 si mette in contatto con questi utilizzando un messaggio HelloNeighbor.

L’aggiornamento della triangolazione globale sull’insieme V = R ∪ B può essere effettuato in questo modo: un nodo r ∈ R invia la propria Vertex Region aggiornata ad ogni nodo b ∈ BP (r). Ognuno di questi controlla se la bisettrice ortogonale del segmento che lo collega a r interseca internamente la Vertex Region di r, e in tal caso invia a r una richiesta di vicinato contenente le informazioni sulla sua posizione. Inoltre, ognuno dei nodi b ricostruisce la sua triangolazione globale considerando r come vicino.

3.3.3 Conclusioni

Nelle ultime due sezioni sono stati analizzati due algoritmi distribuiti con applicazione agli ambienti virtuali distribuiti: l’algoritmo di Buyukkaya et al. e l’algoritmo di Ghaffari et al. Il primo descrive una serie di procedure per gestire efficientemente gli ambienti virtuali di- stribuiti limitando il numero di messaggi che vengono inviati nella rete senza perdere le performance richieste, poiché considera la triangolazione di Delaunay troppo vincolante per un ambiente virtuale distribuito, in cui ad ogni nodo importa conoscere l’aggiornamento so- lamente della porzione di mondo intorno a lui.

Il secondo costruisce una triangolazione di Delaunay distribuita su una rete ad alta dinami- cità, sfruttando delle triangolazioni di supporto per l’invio di messaggi utilizzando algoritmi di routing efficienti.

La Tabella ??ostra le principali differenze trovate durante l’analisi: l’algoritmo di Buyuk- kaya si presta meglio agli ambienti virtuali perché si pone il problema della limitazione del numero di messaggi nella rete, osservando correttamente che in un ambiente virtuale distri- buito non è di grande rilevanza per un nodo di aggiornare la triangolazione correttamente poiché i messaggi di aggiornamento nella rete interessano nodi vicini. La mancanza del sup- porto ad algoritmi di routing di tipo greedy o compass dell’algoritmo di Buyukkaya et al.

Buyukkaya et el. [8] Ghaffari et al. [14]

Supporto churn Si Si

Supporto alta dinamicità di rete Si Si

Limitazione messaggi Si No

Supporto greedy routing No Si Completamente distribuito No (nodi gate) Non specificato

Tabella 3.2: Differenze tra algoritmi per Ambienti Virtuali Distribuiti

risulta essere giustificata in questo contesto, perché tale supporto esiste entro l’area di inte- resse dei nodi, e questo è sufficiente per l’applicazione dell’algoritmo. Entrambi gli algoritmi analizzati hanno supporto all’alta dinamicità della rete e al churn: questo è ragionevole per via della natura degli ambienti virtuali distribuiti.