# Topologia di rete (centro elaborazione dati)

La topologia di rete di un data center è il tipo di interconnessione tra server e switch e viene scelta in base alle esigenze aziendali o di business. La topologia di rete deve essere scalabile ed efficiente nel connettere decine o anche centinaia di migliaia di server per rispondere alla domanda crescente in ambito di cloud computing.

## Classificazione fissa/flessibile di una topologia

Una classificazione possibile per la topologia di rete di un data center distingue le reti fisse da quelle flessibili dopo che viene fisicamente costruita. Le architetture vengono classificate a topologia fissa (fixed-topology architectures) o a topologia flessibile (flexible-topology architectures) in base alla possibilità di modificare la rete una volta che questa è entrata in funzione. Le architetture a topologia fissa possono essere di tipo fat-tree come l'architettura proposta da Al-Fares o le architetture PortLand e Hedera. Altre architetture a topologia fissa sono le Clos networks e le topologie ricorsive come le DCell e le BCube, le MDCube o le FiConn. Le architetture a topologia flessibile possono assere ad esempio di tipo c-Through, Helios e OSA.
Le reti a topologia flessibile possono essere basate su una tecnologia ottica (ne è un esempio l'architettura di rete Proteus): queste offrono una larghezza di banda maggiore rispetto a quelle basate sui cavi elettrici e la loro topologia può essere modificata anche durante l'operatività del data center. Altre topologie flessibili usano una tecnologia ibrida, ovvero basate sia su un protocollo di packet switching di tipo elettrico che ottico. Esistono inoltre reti per data center flessibili denominate Jellyfish che adottano la topologia di un grafo random.
Nella maggior parte di queste architetture il punto di partenza è la scelta della topologia, così da evitare l'implementazione di un protocollo di routing; infatti ogni nodo può eseguire un algoritmo specifico per determinare la porta di uscita di un pacchetto in base all'indirizzo di destinazione. Un protocollo di multipath routing o altre tecniche possono essere implementate per migliorare le performance della rete.

## Topologie ad albero
### Basic tree

La topologia basic tree è una topologia ad albero consiste in due o tre livelli di switch/router aventi i server come foglie (nodi terminali dell'albero). In una topologia a 2 livelli vi è un core tier switch alla radice dell'albero, collegato ad un livello di edge tier switch connessi a loro volta ai server. In una topologia a 3 livelli un livello di aggregation tier switch è interposto tra il livello core tier e il livello edge tier. Ogni livello dell'albero è connesso solamente a quello superiore e quello inferiore, dunque la comunicazione tra livelli non adiacenti è possibile solo grazie ai livelli intermedi. Poiché i tier switch di livello più alto devono garantire la comunicazione tra un elevato numero di server, è necessario che forniscano alte performance e affidabilità. Questo crea dei problemi di scalabilità che possono essere risolti sfruttando altre topologie di rete.

### Fat tree

La topologia di rete fat tree è stata introdotta da Charles E. Leirson nel 1985. In una topologia di rete fat tree i rami (vertici) in prossimità del livello core tier sono più "spessi", ovvero permettono una larghezza di banda maggiore rispetto al basic tree impiegando un maggior numero di switch.
La topologia di rete fat tree è basata su un albero binario completo i cui nodi sono switch aventi n porte. Ogni switch del livello edge tier è connesso a $n/2$ server mentre le rimanenti $n/2$ porte sono connesse ad altre $n/2$ porte di switch appartenenti al livello aggregation tier. Le $n/2$ porte degli switch dell'aggregation level, le $n/2$ porte degli switch dell'edge level e le rimanenti $n/2$ connesse ai server formano una cella elementare del fat tree chiamata pod. Ogni pod ha $(n/2)^{2}$ collegamenti al livello core tier, ovvero $n/2$ percorsi per ognuno degli $n/2$ edge switch del pod. Nel livello core tier ci sono $(n/2)^{2}$ switch aventi $n$ porte, ognuno connesso a ciascuno dei pod facenti parte della rete.

## Topologie ricorsive
### DCell

Una topologia DCell è una topologia di rete per data center proposta da Chuanxiong Guo nel 2008. La DCell è una struttura definita ricorsivamente in cui una DCell di alto livello è costruita da diverse DCell di basso livello; ognuna di queste è completamente connessa con le altre. Nell'architettura DCell un server è dotato di più network interface controller (NIC). Di solito, la sfida più rilevante in una rete di data center è come interconnettere in modo efficiente un numero esponenziale di server. Per questo motivo ci sono tre obiettivi di design per la rete di data center:
* Scalabilità
* Tolleranza ai guasti
* Capacità complessiva di trasmissione dell'informazione
Una struttura DCell con un basso grado di connessione può supportare diversi milioni di server. La struttura DCell è tollerante ai guasti perché non ha un singolo punto di errore e il suo protocollo di routing esegue l'instradamento del percorso più breve anche in presenza di errori gravi del nodo o del collegamento. La DCell offre una capacità di rete superiore rispetto ad una tradizionale struttura ad albero perché il traffico di rete viene distribuito in modo uniforme tra i server e tra i collegamenti su un server.

#### Struttura fisica e costruzione ricorsiva di una rete DCell

L'elemento più elementare di un DCell si chiama DCell$_{0}$. Una DCell$_{0}$ composta da $n$ server e uno switch n-port; ogni server nella DCell$_{0}$ è connesso allo switch nella stessa DCell$_{0}$. Una DCell di alto livello è costruita partendo da altre DCell di livello più basso. Consideriamo una DCell$_{k}$ appartenente al livello k-esimo dell'intera DCell. Il primo passo è costruire una DCell$_{1}$ partendo da altre DCell$_{0}$. Ogni DCell$_{1}$ ha $n+1$ DCell$_{0}$, e ogni server di ogni DCell$_{0}$ dentro una DCell$_{1}$ è connesso rispettivamente al server di un’altra DCell$_{0}$. Le DCell$_{0}$ sono connesse a tutte le altre grazie ad una connessione fra ogni coppia di DCell$_{0}$. Per costruire la DCell$_{k}$ possiamo applicare la stessa procedura usando diverse DCell$_{k-1}$s. In una DCell$_{k}$, ogni server avrà $k+1$ connessioni: la prima connessione o livello-0 si connette a uno switch formando una DCell$_{0}$, e i livelli-i sono connessi al server nella stessa DCell$_{i}$ ma con una differente DCelli$_{1}$. Assumendo che ogni DCell$_{k-1}$ ha $t_{k-1}$ servers, otterremo che una a DCell$_{k}$ sarà costituita da $t_{k}$ DCell$_{k_{1}}$s, e di conseguenza $t_{k-1}\times t_{k}$ servers. Alla fine avremo: $t_{k}=t_{k-1}\times (t_{k-1}+1)$ servers. Il numero di server nella DCell cresce doppiamente in modo esponenziale, e il numero totale di livelli nella DCell è limitato dal numero di NIC presenti dentro di essa. La struttura DCell ha la capacità di scalare un numero molto grande di server usando switch e server con pochissime porte.

### BCube

L'architettura di rete BCube adotta un approccio server-centrico per la produzione di un data center modulare utilizzando degli switch.L’elemento principale di una BCube, chiamato BCube$_{0}$, è molto simile ad una DCell$_{0}$: $n$ server sono connessi a n-porte degli switch. La differenza principale tra BCube e DCell consiste nel loro diverso modo di scalare: BCube fa un uso maggiore di switches quando costruisce una struttura di alto livello. Durante la costruzione di una BCube$_{1}$, sono usati $n$ extra switch connessi esattamente ad un server in ogni BCube$_{0}$. Pertanto una BCube$_{1}$ contiene n BCube$_{0}$ e $n$ extra switch (se gli switch nella BCube$_{0}$ sono presi in considerazione, ci sono in totale $2n$ switches nella BCube$_{1}$). Più genericamente, una BCube$_{k}$ è costruita da $n$ BCube$_{k-1}$ e n$^{k}$ extra switch da n-porte. Questi extra switches sono connessi esattamente ad un server nella BCube$_{k-1}$. nel livello-k BCube, ogni livello non ha bisogno di switch (ciascuno dei quali è uno switch di n-porte). La topologia BCube fa un uso maggiore di switch nella costruzione di una struttura di alto livello, a differenza di quella DCell che usa soltanto un livello-0 di switch aventi n-porte. In ogni caso entrambe hanno bisogno di server per avere $k+1$ NIC. La conseguenza è che i server saranno coinvolti nel passaggio di più pacchetti nella topologia DCell rispetto a BCube. Il numero dei livelli della BCube dipende dal numero delle porte nei server. Il numero dei server nella BCube cresce esponenzialmente con i livelli in una maniera molto più lenta rispetto a DCell. Considerando che BCube è un’architettura progettata per i data center basati su container mobili, questo livello di scalabilità è più che sufficiente.

## Comparazione delle topologie fisse
### Comparazione della scala di grandezza

Per paragonare la scala di grandezza di un grafo che rappresenta la rete di un data center si possono variare: il numero di porte di uno switch n (grado di connessione del nodo associato allo switch), il numero di porte di un server k (grado di connessione del nodo associato allo switch) e il numero totale di server N all'interno del data center. La seguente tabella vengono analizzati il grado di connessione di un server, il diametro della reta (il più lungo tra tutti i percorsi più brevi esistenti tra due server), numero degli switch e il numero di cavi (archi del grafo) in relazione ai parametri n, k e N della topoligia fissa specifica.
| | Basic tree | Fat tree | DCell | BCube |
| Grado di connessione dei server | 1 | 1 | k+1 | k+1 |
| Diametro della rete | $2log_{n-1}N$ | 6 | $2^{k+1}-1$ | $log_{n}N$ |
| Numero di switch | ${\frac {n^{2}+n+N}{n^{3}}}N$ | ${\frac {5N}{n}}$ | ${\frac {N}{n}}$ | ${\frac {N}{n}}log_{n}N$ |
| Numero di cavi (archi) | ${\frac {n}{n-1}}(N-1)$ | $Nlog_{\frac {N}{2}}{\frac {N}{2}}$ | ${\Bigg{\frac {k}{2}}+1{\Bigg )}N$ | $Nlog_{n}N$ |
| Numero di server | $(n-1)^{3}$ | ${\frac {N^{3}}{4}}$ | $\geq (n+{\frac {1}{2}})^{2^{k}}-{\frac {1}{2}},\leq (n+1)^{2^{k}}-1$ | $n^{k+1}$ |
La prossima tabella mette in relazione il numero di server di una rete per data center rispetto al numero di porte di uno switch n (grado di connessione del nodo associato allo switch) e il numero di porte di un server k (grado di connessione del nodo associato allo switch).
| n | Basic tree | Fat tree | k | DCell | BCube |
| 4 | 64 | 16 | 2 | 420 | 64 |
| 4 | 64 | 16 | 3 | 176.820 | 256 |
| 4 | 64 | 16 | 4 | $>$ 3 $\times$ 10 $^{10}$ | 1.024 |
| 6 | 216 | 54 | 2 | 1.806 | 216 |
| 6 | 216 | 54 | 3 | 3.263.442 | 1.296 |
| 6 | 216 | 54 | 4 | $>$ 10 $^{13}$ | 7.776 |
| 8 | 512 | 128 | 2 | 5.256 | 512 |
| 8 | 512 | 128 | 3 | 27.630.792 | 4.096 |
| 8 | 512 | 128 | 4 | $>$ 7 $\times$ 10 $^{14}$ | 32.768 |
| 16 | 4.096 | 1.024 | 2 | 74.256 | 4.096 |
| 16 | 4.096 | 1.024 | 3 | $>$ 5 $\times$ 10 $^{9}$ | 65.536 |
| 48 | 110.592 | 27.648 | 2 | 5.534.256 | 110.592 |