2.4 KiB
algoritmo di routing che sfrutta la breadth-first search.
restrizioni al modello dei sistemi distribuiti aggiuntive
- restrizione di topologia
- canale di comunicazione a costo unitario
Comportamento
[!Summary] Ad ogni iterazione:
- il leader invia un broadcast;
- le foglia di un albero che lo ricevono chiedono ai loro vicini di un'entità se sono già nell'albero;
- i vicini di un'entità che rispondono di no oppure con un altra domanda diventano le nuove foglia di un albero, notificando il loro nuovo genitore della cosa;
- ogni router attende che tutti i suoi figli abbiano completato l'operazione, poi notifica il genitore, fino ad arrivare alla radice.
algoritmo corretto
[!Success] Essendo tutti i router a distanza finita dal leader, eventualmente saranno aggiunti tutti allo spanning tree, terminando cosí l'algoritmo.
costo computazionale distribuito
Costo | notazione O-grande |
---|---|
comunicazione di routing | O(Entities^2 + Channels) |
tempo | ... |
Comunicazione di routing
Singola iterazione
- Il broadcast problem iniziale costa, nel caso peggiore:
Entities
- L'esplorazione costa, nel caso peggiore:
\mathrm{neighbours}(Entity)
- Le risposte all'esplorazione costano, nel caso peggiore:
\mathrm{neighbours}(Entity)
- Il messaggio di termine iterazione costa, nel caso peggiore:
Entities
Per un totale di:
(Entities)
+
(\mathrm{neighbours}(Entity))
+
(\mathrm{neighbours}(Entity))
+
(Entities)
Ovvero:
2 \cdot Entities + 2 \cdot \mathrm{neighbours}(Entity)
Totale
Il numero totale di iterazione dipende dal diametro di un grafo della rete di comunicazione, cioè:
\sum_{Iteration}^{\mathrm{diameter}} (2 \cdot Entities + 2 \cdot \mathrm{neighbours}(Entity))
Visto che ogni canale di comunicazione avrà esattamente una andata-e-ritorno di esplorazione, possiamo portarlo fuori dalla sommatoria, sostituendolo con 2 \cdot Channels
:
4 \cdot Channels + \sum_{Iteration}^{\mathrm{diameter}} (2 \cdot Entities)
Nel caso peggiore, il diametro di un grafo è pari al numero totale di router, quindi:
4 \cdot Channels + 2 Entities^2
In notazione asintotica:
\Large O(Entities^2 + Channels)